TIL -> SUBQUERY
하나의 SQL문 안에 포함된 다른 SQL(SELECT)문으로 메인쿼리(기존쿼리)를 위해 보조 역할을 하는 쿼리문이다.
SELECT, FROM, WHERE, HAVING 절에서 사용 가능.
TIP : 서브쿼리 유형에 따라 서브쿼리 앞에 붙는 연산자가 다르다.
서브쿼리의 조회 결과 값의 개수가 1개인 서브쿼리
단일행 서브쿼리 앞에는 비교 연산자 사용
서브쿼리의 조회 결과 값의 개수가 여러 행일때 사용한다.
다중행 서브쿼리는 앞에 일반 비교연산자 사용 불가.
SELECT절에 서브쿼리 사용 가능하다. 그리고 선택함수(DECODE,CASE WHEN, ELSE, END) 혹은 집합연산자(UNION,합집합)를 사용 할 수도 있다.
(단일행 = 결과값은 한 행)
서브쿼리 SELECT절에 나열된 컬럼 수가 여러개 일 때
서브쿼리 조회 결과 행 수와 열 수가 여러개 일 때
상관쿼리는 메인쿼리가 사용하는 테이블값을 서브쿼리가 이용해서 결과를 만든다.
메인쿼리의 테이블값이 변경되면 서브쿼리의 결과값도 바뀌게 되는 구조.
상관쿼리는 먼저 메인쿼리 한 행을 조회하고 해당 행이 서브쿼리의 조건을 충족하는지 확인하여 SELECT를 진행한다.
해석순서가 기존 서브쿼리와 다르게
메인쿼리 1행 -> 1행에 대한 서브쿼리
메인쿼리 2행 -> 2행에 대한 서브쿼리
...
메인쿼리의 행의 수 만큼 서브쿼리가 생성되어 진행된다.
SELECT절에 사용되는 서브쿼리 결과로 1행만 반환한다.
SQL에서 단일 값을 가르켜 '스칼라' 라고 하고 SELECT절에 작성되는 단일행 서브쿼리다.
FROM 절에서 서브쿼리를 사용하는 경우로 서브쿼리가 만든 결과의 집합(RESULT SET)을 테이블 대신에 사용한다.
ROWNUM 컬럼 = 행번호를 나타내는 가상 컬럼으로 SELECT, WHERE, ORDER BY에 사용 가능하다.
서브쿼리에 이름을 붙여주고 사용시 이름을 사용하게 한다.
인라인뷰로 사용될 서브쿼리에 주로 사용된다.
실행 속도도 빨라진다는 장점이 있다.