데이터베이스[DB]
[Database] 다중컬럼(Multi Column) IN 연산자 설명
도로락
2020. 9. 1. 11:05
다중컬럼(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 |