하나의 쿼리 문장 내에 포함된 또 하나의 쿼리 문장. 비교연산자의 오른쪽에 기술해야 하고 반드시 괄호 안에 넣어야 함. 메인 쿼리가 실행되기 이전에 한 번만 실행된다.
스칼라 서브쿼리 라고 불리며 SELECT 절 안에 서브쿼리가 들어있다. 이 때, 서브쿼리의 결과는 반드시 단일 행이나 SUM, COUNT 등의 집계함수를 거친 단일 값으로 리턴 되어야 한다. 서브쿼리를 끝마친 값 하나를 메인쿼리에서 SELECT하기 때문이다.
EX)
SELECT 학생이름,
(SELECT 학과, 학과이름
FROM 학과
WHERE 학과, 학과ID = 학생, 학생ID) AS 학과이름
FROM 학생
WHERE 학생이름 = '홍길동';
인라인뷰 라고 불리며 FROM 절 안에 서브쿼리가 들어있다. 이 때 , 서브쿼리의 결과는 반드시 하나의 테이블로 리턴되어야 한다. 서브쿼리를 끝마친 테이블 하나를 메인쿼리의 FROM에서 테이블로 잡기 때문이다.
EX)
SELECT 학생이름, 수학점수
FROM ( SELECT 학생.학생이름 AS 학생이름,
과목.과목점수 AS 수학점수
FROM 학생, 과목
WHERE 학생.학생이름 = 과목.학생이름
AND 과목.과목이름 = '수학' ) ;
중첩 서브쿼리 라고 불리며 WHERE 절 안에 서브쿼리가 들어있다. 가장 자주 쓰이는 대중적인 서브쿼리이며 단일행과 복수행 둘 다 리턴이 가능하다. 서브쿼리를 끝마친 값들을 메인쿼리의 조건절을 통해 비교하기 때문이다.
EX)
SELECT *
FROM 학생
WHERE 학생.학생이름 IN ( SELECT 과목.학생이름 FROM 과목 WHERE 과목.과목이름 = '수학' ) ;
서브쿼리의 수행결과가 오직 하나의 ROW(행)만을 반환한다. 이 하나의 결과를 가지고 메인쿼리는 비교연산자를 통해 쿼리를 수행한다. 비교연산자는 단일행 비교연산자를 사용한다.(>, ≥, <, ≤, =, <>, …)