반응형
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)
반응형
'Database > SQL' 카테고리의 다른 글
Oralce 오라클 UNIX Timestamp 변환 timestamp to date String (0) | 2019.08.01 |
---|---|
오라클 형변환 알짜만 빼먹기, TO_NUMBER(), CAST(), TO_CHAR(), TO_DATE() (0) | 2019.07.24 |
oracle 오라클 과거 데이터 조회, 복구 AS OF 몇분전, 몇시간전 (0) | 2018.01.30 |
Oracle 오라클 두 좌표 사이의 거리 구하기 WGS84 (0) | 2017.11.07 |
오라클 WM_CONCAT 하나의 컬럼으로 가져오기, 중복제거 (0) | 2017.10.25 |
댓글