다중컬럼(Multi Column) IN 연산자 설명
보통 IN 연산자를 사용할때는 특정 컬럼이 여러개의 값 중 하나 일 때의 조건에 사용합니다.

예를 들어 아래와 같이 사원 테이블이 있다고 가정하겠습니다.



부서번호가 20, 30 인 부서에 속해있는 사원을 조회하는 경우 IN 연산자를 사용하여 아래와 같이 조회할 수 있습니다.
SELECT * FROM EMP
WHERE DEPTNO IN (2030);
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 (2030)
  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



블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

댓글을 달아 주세요! 질문 환영합니다!