다중컬럼(Multi Column) IN 연산자 설명
보통
IN
연산자를 사용할때는 특정 컬럼이 여러개의 값 중 하나 일 때의 조건에 사용합니다.예를 들어 아래와 같이 사원 테이블이 있다고 가정하겠습니다.
부서번호가 20, 30 인 부서에 속해있는 사원을 조회하는 경우 IN 연산자를 사용하여 아래와 같이 조회할 수 있습니다.
SELECT * FROM EMP WHERE DEPTNO IN (20, 30); | cs |
IN 연산자 대신 OR를 사용할수도 있습니다.
SELECT * FROM EMP WHERE (DEPTNO = 20) OR (DEPTNO = 30); | cs |
결과는 두 쿼리 모두 아래와 같습니다.
이번에는
부서번호
가 20
이면서 직책이 MANAGER
이거나 부서번호
가 30
이면서 직책이 CLERK
인 사원을 알아보도록 하겠습니다.SELECT * FROM EMP WHERE (DEPTNO = 20 AND JOB = 'MANAGER') OR (DEPTNO = 30 AND JOB = 'CLERK'); | cs |
결과는 아래와 같습니다.
다중 컬럼 IN 사용
방금 앞서 작성한 쿼리는 다중 컬럼을 이용한 IN 연산자로 변경 가능합니다.
하나의 컬럼만 사용하는 IN 연산자와는 다르게 괄호
( )
가 중첩으로 들어가고 안쪽의 괄호는 AND
조건으로 묶이게 됩니다. 바로 위에서 작성한 쿼리와 동일한 효과를 내는 것입니다.SELECT * FROM EMP WHERE (DEPTNO, JOB) IN ((20, 'MANAGER'), (30, 'CLERK')); | cs |
당연히 결과는 같습니다.
주의할 점
다중 컬럼 IN 연산자를 사용했을때의 결과와 아래 여러개의 IN을 사용했을때의 결과는 다를 수 있습니다.
SELECT * FROM EMP WHERE DEPTNO IN (20, 30) AND JOB IN ('MANAGER', 'CLERK'); | cs |
예를 들어 4번 행을 보면 부서코드가 20이면서 직책이 CLERK인 사원도 포함됩니다.
서브쿼리에서의 활용
다중 컬럼 IN 연산자는 서브쿼리에서도 사용이 가능합니다. 아래 쿼리는 의미 있는 쿼리는 아니지만 의미를 떠나서 여러개의 컬럼을 가지게 되는 서브쿼리를 이용할 수 있다는 점을 참고해 주시기 바랍니다.
SELECT * FROM EMP WHERE (DEPTNO, JOB) IN (SELECT DEPTNO, JOB FROM EMP WHERE SAL > 2000); | cs |
'데이터베이스[DB]' 카테고리의 다른 글
[Oracle] 오라클 열을 행으로 바꾸는 UNPIVOT 사용법 및 설명 (0) | 2020.08.26 |
---|---|
[Oracle] 오라클 행을 열로 바꾸는 PIVOT 사용법 및 설명 및 PIVOT 대체하기 (0) | 2020.08.25 |
[Oracle] 여러행의 데이터를 하나의 행에 가로로 출력하기 LISTAGG 함수 사용법 (0) | 2020.08.23 |
[Oracle] 대소문자 구분 없이 검색하는 경우에 WHERE 조건 (0) | 2020.08.10 |
[Oracle] ORA-65096: 공통 사용자 또는 롤 이름이 부적합합니다 오류 (1) | 2020.08.09 |