📕🐘 도로락 - 코끼리를 냉장고에 넣는 방법
데이터베이스[DB] | 2020. 9. 1. 11:05

[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);
도로락

도로락

Writer

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