[Oracle] IN 연산자 사용법 (NOT IN, 다중컬럼)

오라클 쿼리에서 하나의 칼럼에 여러 개의 값을 한 번에 입력하기 위해서는 IN 연산자를 사용하면 된다. IN 연산자는 OR 연산자를 여러 개 사용하여 쿼리문을 작성하는 것과 동일한 결과를 얻을 수 있다. 오라클에서는 다중칼럼 IN도 지원하기 때문에 아래의 예제를 참고하면 된다.

 

목차
  1. IN 연산자 사용법
  2. NOT IN 연산자 사용법
  3. NOT IN 연산자 사용 시 주의사항
  4. 다중칼럼 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 칼럼이 동시에 일치하는 데이터만 조회된다.

예제쿼리(테이블포함).txt
0.00MB

 

[Oracle] EXISTS, NOT EXISTS 사용법 정리

오라클에서 EXISTS( ) 함수를 처음 접하면 조금 어려움 느낌이 들 수도 있다. EXISTS를 사용하지 않아도 비슷한 결과를 만들 수 있는 기능이 많기 때문에, EXISTS에 대해 자세히 익히지 않고 넘어가는

gent.tistory.com

 

[Oracle] INSTR 함수 사용법 완벽 정리

오라클에서는 문자열에서 원하는 문자를 찾을 때 INSTR 함수를 사용한다. INSTR 함수는 대소문자를 구별하여 문자를 검색하며, 여러 개의 문자를 찾을 때는 OR 연산자를 사용하면 된다. 해당 문자를

gent.tistory.com

 

댓글

Designed by JB FACTORY