반응형
SQL에서 목록 검색 연산자라고 하면 IN과 NOT IN이 있다.
IN 연산자는 일반적으로 주 질의의 WHERE 절에서 하나의 컬럼 값이 하위 질의가 반환한 결과 목록에 포함되는지 확인을 하는 역할을 한다.
지난 첫번째 중첩질의 포스팅에서도 다뤘지만, 하위 질의는 테이블(뷰) 형태를 반환할 수 있기 때문에 두개 이상의 값을 취할 수 있다.
주 질의는 WHERE 절의 컬럼 값이 하위 질의의 결과 목록에 포함되면 True를 반환한다고 이해하면 된다.
예시를 들어보자.
다음과 같은 3개의 테이블(emplyee, department, dependent) 이 존재한다고 가정해보자.
예제 1) 관리자인 사원의 정보를 검색
중첩질의를 활용해 이 문제를 해결해보자면 다음과 같이 SQL을 만들어서 원하는 답을 구할 수 있다.
SELECT *
FROM employee
WHERE ssn IN (SELECT mgr_ssn FROM department);
(where 절에서 manager의 사번을 참고하기 위해 department에서 select하는 하위 질의를 하나 만들어서 활용했다.)
예제 2) 부양가족이 존재하지 않는 사원의 정보를 검색
이 문제는 다음처럼 JOIN을 활용한 SQL로 답을 구하는 것이 더 익숙할 수는 있어도, 중첩 질의를 통해서도 충분히 구할 수 있다.
SELECT e.*
FROM employee e
LEFT JOIN department d ON e.ssn = d.essn
WHERE essn IS NULL;
- 중첩 질의 ver
SELECT *
FROM employee
WHERE ssn NOT IN (SELECT essn FROM dependent);
이면에 대규모 DB에서 쿼리를 할 때, 속도와 리소스 측면에서는 다를 수 있겠으나
단순하게 SQL을 연습하는 과정에서는 두 쿼리 모두 동일한 결과를 리턴한다.
반응형
'SQL' 카테고리의 다른 글
[SQL] 프로그래머스 특정 물고기를 잡은 총 수 구하기 - 조인 & 상관중첩질의 (0) | 2024.03.25 |
---|---|
[SQL] 중첩 질의 - 상관 중첩 질의와 존재 연산자 EXISTS (3) (0) | 2024.03.21 |
[SQL] 검색 - 비교 연산자와 중첩 질의 Nested Query (1) (0) | 2024.03.20 |
[SQL] 조건에 부합하는 중고거래 댓글 조회 (프로그래머스) (0) | 2024.03.18 |