SUBQUERY
- 하나의 SQL 문 안에 포함된 또 다른 SQL 문을 뜻한다.
- 메인 쿼리(기존 쿼리)를 보조하는 역할을 하는 쿼리문이다.
서브 쿼리 구분
서브 쿼리는 서브 쿼리를 수행한 결과값의 행과 열의 개수에 따라서 분류할 수 있다.
1) 단일행 서브 쿼리 : 서브 쿼리의 조회 결과 값의 행과 열의 개수가 1개 일 때
2) 다중행 서브 쿼리 : 서브 쿼리의 조회 결과 값의 행의 개수가 여러 행 일때
3) 다중열 서브 쿼리 : 서브 쿼리의 조회 결과 값이 한 행이지만 컬럼이 여러 개 일때
4) 다중행 다중열 서브 쿼리 : 서브 쿼리의 조회 결과 값이 여러 행, 여러 열 일때
* 서브 쿼리의 유형에 따라서 서브 쿼리 앞에 붙는 연산자가 달라진다.
<단일행 서브 쿼리>
서브 쿼리의 조회 결과 값의 행과 열의 개수가 1개 일 때 (단일행, 단일열)
비교 연산자(단일행 연산자) 사용 가능 (=, !=, <>, ^=, >, <, >=, <=, ...)
<다중행 서브 쿼리>
서브 쿼리의 조회 결과 값의 행의 개수가 여러 행 일때
IN / NOT IN (서브 쿼리): 여러 개의 결과 값 중에서 한 개라도 일치하는 값이 있다면 혹은 없다면 TRUE를 리턴한다.
ANY: 여러 개의 값들 중에서 한 개라도 만족하면 TRUE, IN과 다른 점은 비교 연산자를 함께 사용한다는 점이다.
ANY(100, 200, 300)
SALARY = ANY(...) : IN과 같은 결과
SALARY != ANY(...) : NOT IN과 같은 결과
SALARY > ANY(...) : 최소값 보다 크면 TRUE
SALARY < ANY(...) : 최대값 보다 작으면 TRUE
ALL: 여러 개의 값들 모두와 비교하여 만족해야 TRUE, IN과 다른 점은 비교 연산자를 함께 사용한다는 점이다.
ALL(100, 200, 300)
SALARY > ALL(...) : 최대값 보다 크면 TRUE
SALARY < ALL(...) : 최소값 보다 작으면 TRUE
<다중열 서브 쿼리>
조회 결과 값은 한 행이지만 나열된 컬럼 수가 여러 개 일때
<다중행 다중열 서브 쿼리>
서브 쿼리의 조회 결과값이 여러 행, 여러 열일 경우
인라인 뷰
- FROM 절에 서브 쿼리를 제시하고, 서브 쿼리를 수행한 결과를 테이블 대신 사용한다.
<RANK 함수>
[표현법]
RANK() OVER(정렬 기준) / DENSE_RANK() OVER(정렬 기준)
RANK() OVER(정렬 기준) : 동일한 순위 이후의 등수를 동일한 인원수만큼 건너뛰고 순위를 계산한다.
(EX. 공동 1위가 2명이면 다음 순위는 3위)
DENSE_RANK() OVER(정렬 기준): 동일한 순위 이후의 등수를 무조건 1씩 증가한다.
(EX. 공동 1위가 2명이면 다음 순위는 2위)