언어/SQL

IN, NOT IN 연산자

asu2880 2022. 6. 13. 15:27

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