[MSSQL] IN 연산자 사용법 (NOT IN, 서브쿼리)
- 데이터베이스/MSSQL
- 2021. 12. 20.
SQL Server에서 OR 연산자를 사용하여 여러 개의 값을 비교하는 작업을 IN 연산자를 사용하면 아주 간단하게 쿼리문을 작성할 수 있다. IN 연산자에 입력된 값 중에서 하나라도 일치하는 것이 있으면 리스트에 조회된다.
IN 사용법
SELECT *
FROM emp
WHERE ename IN ('JONES', 'SCOTT', 'MILLER')
![]() |
영문성명(ename)에 'JONES', 'SCOTT', 'MILLER'가 하나라도 일치하 값이 있으면 조회된다.
IN을 사용하면 쿼리가 실행될 때 내부적으로 OR 연산자로 변경되어 실행되므로 아래와 동일한 결과가 조회된다.
![]() |
IN 연산자는 OR 연산자와 동일하게 실행 되므로 인덱스가 있는 칼럼에 사용할 경우 인덱스를 타지 못할 수 있으니 주의해서 사용해야 한다.
NOT IN 사용법 & 주의사항
SELECT *
FROM emp
WHERE ename NOT IN ('JONES', 'SCOTT', 'MILLER')
![]() |
NOT IN을 사용하면 IN('JONES', 'SCOTT', 'MILLER')에 있는 값은 제외하고 조회가 된다.
NOT IN을 사용할 때는 해당 칼럼에 NULL이 존재할 경우 해당 값이 조회되어야 한다면, 꼭 ISNULL 함수로 치환해야 해당 값이 누락되지 않고 조회된다.
![]() |
ISNULL로 치환 후 'KING'이 누락되지 않고 조회된 것을 확인할 수 있다.
IN 서브 쿼리 사용법
SELECT *
FROM emp
WHERE deptno IN (SELECT deptno
FROM dept
WHERE deptno BETWEEN 10 AND 20)
![]() |
IN 연산자에 대량의 값을 대입하거나, 동적으로 값이 변경되어야 한다면 IN 연산자에 서브 쿼리를 사용하면 된다.
자주 변경될 수 있는 코드 테이블을 사용할 경우 서브 쿼리를 사용하여 쿼리문을 작성하면 좋다.
![]() |
오라클 DB에서 사용할 수 있는 다중 칼럼 IN은 MSSQL에서는 사용할 수 없다.