[Oracle] IN 연산자 사용법 (NOT IN, 다중컬럼)
- 데이터베이스/오라클
- 2023. 7. 31.
오라클 쿼리에서 하나의 칼럼에 여러 개의 값을 한 번에 입력하기 위해서는 IN 연산자를 사용하면 된다. IN 연산자는 OR 연산자를 여러 개 사용하여 쿼리문을 작성하는 것과 동일한 결과를 얻을 수 있다. 오라클에서는 다중칼럼 IN도 지원하기 때문에 아래의 예제를 참고하면 된다.
목차 |
IN 연산자 사용법
SELECT *
FROM emp
WHERE job IN ('ANALYST', 'MANAGER', 'SALESMAN')
job 칼럼에 IN 연산자에 입력된 직업(ANALYST, MANAGER, SALESMAN) 중 하나라도 일치하면 조회된다.
IN 연산자는 1000개 값까지만 입력할 수 있으며, 그 이상을 입력하기 위해서는 IN 연산자를 1000개 이하로 여러 개의 OR로 분리하던지, 서브쿼리를 사용하여 값을 입력해야 한다.
IN 연산자를 사용하여 쿼리문을 실행하면 오라클 내부에서는 OR 연산자로 다시 변환되어 실행된다.
SELECT *
FROM emp
WHERE (job = 'ANALYST' OR job = 'MANAGER' OR job = 'SALESMAN')
IN 연산자의 결과와 OR 연산자의 결과가 동일한 것을 확인할 수 있다.
IN 연산자는 OR 연산자와 동일하므로 해당 칼럼은 인덱스를 타지 못한다.
NOT IN 연산자 사용법
SELECT *
FROM emp
WHERE job NOT IN ('ANALYST', 'MANAGER', 'SALESMAN')
NOT IN 연산자를 사용하면 입력된 값을 제외한 나머지 데이터가 조회된다.
job 칼럼이 ANALYST, MANAGER, SALESMAN은 제외된 것을 확인할 수 있다.
NOT IN 연산자 사용 시 주의사항
SELECT *
FROM emp a
WHERE mgr NOT IN (7839, 7566, 7902, 7782, 7698)
NOT IN 연산자를 사용하면 해당 칼럼의 값이 NULL인 것은 제외하고 조회된다.
SELECT *
FROM emp a
WHERE NVL(mgr, 9999) NOT IN (7839, 7566, 7902, 7782, 7698)
NOT IN 사용 시 NULL 값도 포함하기 위해서는 NVL 함수를 사용해서 NULL 값을 하여 특정 값으로 치환해 주면 된다.
mgr 칼럼이 NULL인 데이터도 조회된 것을 확인할 수 있다.
다중칼럼 IN 사용법
SELECT *
FROM emp a
WHERE (a.job, a.deptno) IN (SELECT aa.job, aa.deptno
FROM emp aa
WHERE aa.ename = 'SCOTT')
다중칼럼 IN을 사용하기 위해서는 서브쿼리를 사용하면 된다.
job, deptno 칼럼이 동시에 일치하는 데이터만 조회된다.