SQL을 활용한 데이터 분석
서브 쿼리
카테고리 : SQL을 활용한 데이터 분석
서브 쿼리
서브 쿼리의 기본 개념
- 서브 쿼리는 하나의 SELECT 문장의 절 안에 포함된 또 하나의 SELECT 문장을 의미한다.
- 서브 쿼리를 포함하고 있는 쿼리문을 메인 쿼리, 포함된 또 하나의 쿼리를 서브 쿼리라 한다.
- 서브 쿼리는 비교 연산자의 오른쪽에 기술해야 하고 반드시 괄호로 둘러 쌓아야 한다.
단일 행 서브 쿼리
- 단일 행(Single Row) 서브 쿼리는 수행 결과가 오직 하나의 로우(행, row)만을 반환하는 서브 쿼리를 갖는 것을 말한다.
- 단일 행 서브 쿼리문에서는 이렇게 오직 하나의 로우(행, row)로 반환되는 서브 쿼리의 결과는 메인 쿼리에 보내게 되는데 메인 쿼리의 WHERE 절에서는 단일 행 비교 연산자인 =,>,>=,<,<=,<> 를 사용해야 한다.
다중 행 서브 쿼리
- 하나 이상의 행을 반환하는 서브 쿼리
- 단일 행 연산자를 사용하지 못하며, 다중 행 연산자(IN, NOT IN, ANY, ALL, EXISTS)만 사용이 가능하다.
- 서브 쿼리에서 반환되는 결과가 하나 이상의 행일 때 사용하는 서브 쿼리이다. 다중 행 서브 쿼리는 반드시 다중 행 연산자와 함께 사용해야 한다.
종류 | 의미 |
---|---|
IN | 메인 쿼리의 비교 조건이 서브 쿼리의 결과 중에서 하나라도 일치하면 참이다. |
ANY, SOME | 메인 쿼리의 비교 조건인 서브 쿼리의 검색 결과와 하나 이상이 일치하면 참이다. |
ALL | 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 모든 값이 일치하면 참이다. |
EXIST | 메인 쿼리의 비교 조건이 서브 쿼리의 결과 중에서 만족하는 값이 하나라도 존재하면 참이다. 조건을 만족하면 TRUE 아니면 FALSE만 체크한다. |
ANY 연산자
- ANY 조건은 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 하나 이상만 일치하면 참이다.
- ” > ANY “는 찾아진 값에 대해서 하나라도 크면 참이 된다. 그러므로 찾아진 값 중에서 가장 작인 값 즉, 최소 값 보다 크면 참이 된다.
ALL 연산자
- ALL 조건은 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 모든 값이 일치하면 참이다.
- 찾아진 값에 대해서 AND 연산을 해서 모두 참이면 참이 되는 셈이 됩다. “ > ALL “은 “모든 비교값 보다 크냐”고 묻는 것이 되므로 최대값보다 더 크면 참이 된다.
스칼라 서브쿼리(Scalar Subquery)
- SELECT 절에 위치한 서브 쿼리
- 한 개의 로우만 반환
- 일치하는 값이 없는 경우 NULL은 반환