IN / NOT IN 연산자
값이 포함되는 혹은 포함되지 않는 데이터를 추출하고 싶을 때 사용하는 것
IN (...) | 괄호 안의 값들 가운데 있음 |
NOT IN (...) | 괄호 안의 값들 가운데 없음 |
🎓 IN
SELECT *
FROM TABLE
WHERE COLUMN IN ('A' , 'B')
🎓 NOT IN
SELECT *
FROM TABLE
WHERE COLUMN NOT IN ('A' , 'B')
😎 IN문은 'A'와 'B' 가 포함되는 데이터만 추출되고,
NOT IN 문은 'A'와 'B' 가 포함되지 않는 데이터만 추출이 됩니다.
🎓 SUBQUERY IN
SELECT *
FROM TABLE
WHERE COLUMN IN (SELECT COLUMN1 FROM TABLE2)
🎓 SUBQUERY NOT IN
SELECT *
FROM TABLE
WHERE COLUMN NOT IN (SELECT COLUMN1 FROM TABLE2)
IN, NOT IN 문 안에 서브쿼리 사용시에는 주의 하셔야 될 경우가 있습니다.
NOT IN문 서브쿼리의 결과 중에 NULL이 포함되는 경우 데이터가 출력되지 않기 때문에
조회 컬럼에 IS NOT NULL 조건을 주셔야 합니다.
NULL은 논리적으로 비교할 수 없는 연산이기 때문에 값이 없게 되는 것.
오라클에서 NULL 비교를 위해 IS NULL, IS NOT NULL을 제공하는 이유가 그 것 입니다.
그래서! 서브쿼리 내에 조회컬럼이 IS NOT NULL인 조건을 주어 NULL 인 데이터를 빼고 조회를 하셔야 원하는 데이터를 추출 할 수 있습니다.
SELECT *
FROM TABLE1
WHERE COLUMN1 NOT IN (SELECT COLUMN2
FROM TABLE2
WHERE COLUMN2 IS NOT NULL)
예제
💊 사번이 7900, 7934번인 사원의 사번과 성명 출력
SELECT empno, ename
FROM emp
WHERE empno IN (7900, 7934) ;
EMPNO ENAME
------- --------
7934 MILLER
7900 JAMES
💊 사번이 7900, 7934번이 아닌 사원의 사번과 성명 출력
SELECT empno, ename
FROM emp
WHERE empno NOT IN (7900, 7934);
EMPNO ENAME
-------- --------
7369 SMITH
7499 ALLEN
7698 BLAKE
SELECT 1 + 2 IN (2, 3, 4)
SELECT 'Hello' IN (1, TRUE, 'hello')
SELECT * FROM Customers
WHERE City IN ('Torino', 'Paris', 'Portland', 'Madrid')
728x90
반응형
'언어 > SQL' 카테고리의 다른 글
IS, IS NOT 연산자 (0) | 2022.06.13 |
---|---|
BETWEEN 연산자 (0) | 2022.06.13 |
LIMIT (0) | 2022.06.13 |
GROUP BY / HAVING / DISTINCT / WITH ROLLUP (0) | 2022.06.13 |
ORDER BY (0) | 2022.06.13 |