Database/SQL

Oracle IN, NOT IN 문 알짜만 빼먹기

리커니 2019. 7. 17.
반응형

Oracle IN, NOT IN 문 알짜만 빼먹기

값이 포함되는 혹은 포함되지 않는 데이터를 추출하고 싶을 때 사용하는 것이 IN, NOT IN 문입니다.

용법을 보도록 하죠.

 

[용법] IN 문

 
SELECT *
  FROM TABLE 
 WHERE COLUMN IN ('A' , 'B')

 

[IN문 풀이]

 
SELECT *
  FROM TABLE 
 WHERE COLUMN  = 'A' 
    OR COLUMN = 'B'

 

[용법] NOT IN 문

 
SELECT *
  FROM TABLE 
 WHERE COLUMN NOT IN ('A' , 'B')

 

[NOT IN문 풀이]

SELECT *
  FROM TABLE 
 WHERE COLUMN  <> 'A' 
   AND COLUMN <> 'B'

 

위의 쿼리를 보면

IN문은 'A'와 'B' 가 포함되는 데이터만 추출되고,

NOT IN 문은 'A'와 'B' 가 포함되지 않는 데이터만 추출이 됩니다.

IN의 경우 OR가 NOT IN의 경우 AND 조건이 걸린다는 차이가 있죠!

 

물론 IN 문 안에는 SUBQUERY 사용이 가능합니다.

 

[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과의 연산이 추가됩니다.

 

SELECT *
  FROM TABLE 
 WHERE COLUMN  <> 'A' 
   AND COLUMN <> 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)

 

 

 

반응형

댓글

💲 추천 글