서브쿼리
어떤 SQL문의 결과를 다른 SQL문에세 전달하기 위해 두 개 이상의 SQL문을 하나의 SQL문으로 연결하는 방법으로 메인쿼리(Main Query)에 포함되는 쿼리를 서브쿼리(Sub Query)라고 한다.
서브쿼리를 먼저 실행한 뒤 그 결과를 메인쿼리로 전달하는 방식으로 동작한다.
- 일반 서브쿼리 (Where 절)
1) 단일 행 서브쿼리
2) 다중 행 서브쿼리- 스칼라 서브쿼리 (Select 절)
- 인라인 뷰 (From 절)
- 결과가 1행이다. (1개이다.)
- 단일 행 서브쿼리인 경우
1) WHERE 절에서 사용한 칼럼이 PK 또는 UNIQUE 칼럼인 경우
2) 통계 함수를 사용한 경우- 단일 행 서브쿼리 연산자 (=, !=, >, >=, <, <=)
- 결과가 N행이다.
- 다중 행 서브쿼리 연산자 (IN, ANY, ALL 등)
하나의 칼럼처럼 사용되는 쿼리로 어떤 값을 반환하는 서브쿼리이다.
칼럼의 역활을 수행하기 위해서 반드시 한 개의 행(Row) 만을 반한해야 한다.
성능이 좋지 않기 때문에 자주 사용할 필요가 없다.
하나의 테이블처럼 사용되는 쿼리로 어떤 테이블 형식의 결과를 반환하는 서브쿼리이다.
인라인 뷰에서 조회한 칼럼만 메인쿼리에서 조회할 수 있다.
SELECT절의 수행 순서를 변경하기 위해서 사용 가능하다. FROM절의 수행 순서가 우선이기 때문에 먼저 처리하고자 하는 작업을 인라인 뷰를 작업하면 가장 먼저 처리하게 된다.
CREATE TABLE문에서 서브쿼리를 이용하여 다른 테이블의 구조와 데이터를 복사하여 새로운 테이블을 생성할 수 있다.
서브쿼리의 출력 결과가 새로운 테이블의 초기 데이터로 사용된다.
서브쿼리의 출력 결과가 없어도 새로운 테이블은 생성됨 . 초기 데이터가 없는 상태로 생성되기 때문
에 특정 테이블의 구조만 복사하고자 하는 경우에 유용하다.
CREATE TABLE 문에서 지정한 칼럼 개수 , 타입 과 서브쿼리의 칼럼 개수 , 타입 이 반드시 일치해야 한다.
DML의 INSERT UPDATE DELETE 도 동일하다.
INSERT
UPDATE
DELETE