[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에서는 사용할 수 없다.