[Database] 다중컬럼(Multi Column) IN 연산자 설명
다중컬럼(Multi Column) IN 연산자 설명
보통 IN 연산자를 사용할 때는 특정 컬럼이 여러 개의 값 중 하나일 때의 조건에 사용합니다.
예를 들어 아래와 같이 사원 테이블이 있다고 가정하겠습니다.

부서번호가 20, 30 인 부서에 속해있는 사원을 조회하는 경우 IN 연산자를 사용하여 아래와 같이 조회할 수 있습니다.
SELECT * FROM EMP
WHERE DEPTNO IN (20, 30);
IN 연산자 대신 OR 를 사용할 수도 있습니다.
SELECT * FROM EMP
WHERE (DEPTNO = 20)
OR (DEPTNO = 30);
결과는 두 쿼리 모두 아래와 같습니다.

이번에는 부서번호가 20 이면서 직책이 MANAGER이거나 부서번호가 30 이면서 직책이 CLERK인 사원을 알아보도록 하겠습니다.
SELECT *
FROM EMP
WHERE (DEPTNO = 20 AND JOB = 'MANAGER')
OR (DEPTNO = 30 AND JOB = 'CLERK');
결과는 아래와 같습니다.

다중 컬럼 IN 사용
방금 앞서 작성한 쿼리는 다중 컬럼을 이용한 IN 연산자로 변경 가능합니다.
하나의 컬럼만 사용하는 IN 연산자와는 다르게 괄호 () 가 중첩으로 들어가고 안쪽의 괄호는 AND 조건으로 묶이게 됩니다. 바로 위에서 작성한 쿼리와 동일한 효과를 내는 것입니다.
SELECT *
FROM EMP
WHERE (DEPTNO, JOB) IN ((20, 'MANAGER'), (30, 'CLERK'));
당연히 결과는 같습니다.

주의할 점
다중 컬럼 IN 연산자를 사용했을 때의 결과와 아래 여러 개의 IN을 사용했을 때의 결과는 다를 수 있습니다.
SELECT *
FROM EMP
WHERE DEPTNO IN (20, 30)
AND JOB IN ('MANAGER', 'CLERK');
예를 들어 4 번 행을 보면 부서코드가 20 이면서 직책이 CLERK 인 사원도 포함됩니다.

서브쿼리에서의 활용
다중 컬럼 IN 연산자는 서브쿼리에서도 사용이 가능합니다. 아래 쿼리는 의미 있는 쿼리는 아니지만 의미를 떠나서 여러 개의 컬럼을 가지게 되는 서브쿼리를 이용할 수 있다는 점을 참고해 주시기 바랍니다.
SELECT *
FROM EMP
WHERE (DEPTNO, JOB) IN (SELECT DEPTNO, JOB
FROM EMP
WHERE SAL > 2000);

'데이터베이스[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 |
도로락
WriterIT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그