Subquery
서브 쿼리란 하나의 쿼리가 다른 쿼리에 포함되는 구조로서
다른 쿼리에 포함된 내부 쿼리는 외부 쿼리에 사용 될 값을 반환하는 역할을 한다.
서브쿼리는 메인쿼리에게 데이터를 넘겨주는 것 이다.
SELECT
FROM
WHERE expr operator( SELECT ...
FROM ...
WHERE ... ) ;
식의 구문으로 이루어진다.
Subquery의 유형은 총 4개다
단일(행) - 단일열 / 다중열
다중(행) - 단일열 / 다중열
으로 나뉜다. 여기서 열은 행열 할때 열이다. 단일 다중은 행을 나타낸다.
단일 행일 경우 비교 연산자(=, > ,>= ,<= , <>)를 사용한다.
다중일 경우에는 (IN, ANY,ALL)을 사용한다.
Subquery - 단일 행 서브쿼리
서브쿼리에 대한 결과 값이 단일 행 (단 하나의 행)으로 나오는 쿼리
다양한 예제
Subquery - 다중 행 서브쿼리
다중 서브 쿼리 앞에는 보통 IN / ANY / ON 를 사용한다.
기본적인 비교 연산자를 사용 할 수 없는 이유는 하나의 값이 아니기 때문이다.
그래서 IN / ANY / ON 추가로 사용한다.
NOT IN 에서는 문법상 서브쿼리에서 WHERE조건 절을 통해서 NULL이 아닌 조건만 가져와야 한다.
IN 연산자
여기서 주의 할점은 NOT IN은 서브쿼리에서 하나라도 널이 있으면 널로 출력한다.
이 UNION을 CASE WHEN 으로 나타내면
ANY 연산자
< ANY : 비교 대상 중 최대 값 보다 작음
> ANY : 비교 대상 중 최소 값 보다 큼
= ANY : IN 연산자와 동일
ALL 연산자는
< ALL: 비교 대상 중 최소 값 보다도 작음
> ALL: 비교 대상 중 최대 값 보다도 큼
= ALL: IN 연산자와 동일
다중행에 다중열 서브쿼리
다중열일 경우는 where 에서도 다중으로 받아줘야 한다.
'Base > Database' 카테고리의 다른 글
[Database] DDL(데이터 정의어), DML(데이터 조작어), DCL(데이터 제어어) 이란? (0) | 2020.07.19 |
---|---|
[Database] 테이블 생성(CREATE TABLE) 및 제약조건(CONSTRAINT) (0) | 2020.07.18 |
[Database] SEP Operator(UNION,UNION ALL, INTERSECT,MINUS) & IN Operator사용법 (0) | 2020.07.17 |
[Database] Self JOIN 사용법 (ANSI 표준) (0) | 2020.07.17 |
[Database] INNER JOIN / OUTER JOIN 함수 사용법 및 차이(ORACLE & ANSI표준) (0) | 2020.07.16 |