쿼리문 안에서 사용되는 하부 SELECT문
ex)
SELECT point FROM student
WHERE point= (SELECT COUNT(*) FROM table1) AS table_count
SELECT SubQuery
SELECT (SELECT COUNT(*) FROM table1) AS table_count
이 때 서브쿼리는 스칼라 형태여야 하며 후에 설명한다
SET SubQuery
UPDATE TABLE table1 SET attr1 = (스칼라 서브쿼리)
FROM SubQuery
SELECT * FROM (SELECT * FROM table1) AS sq
위 쿼리는 Oracle DB에서 LIMIT을 대체하는 용도로 사용된다
sq는 전체 쿼리가 아닌 서브쿼리에 대한 별명으로 동작한다
INSERT SubQuery
INSERT INTO table1 VALUES(
(SELECT COUNT(*) from table2), # 스칼라 값
(SELECT COUNT(*) from table3) # 스칼라 값
)
INSERT INTO table1 SELECT * FROM table2
위 쿼리는 table2의 모든 레코드를 table1으로 복사하며IN
SELECT * FROM table1 WHERE id IN (SUBQUERY) # 또는 집합
WHERE절의 속성이 IN 뒤의 서브쿼리, 집합에 존재하면 리턴한다
EXISTS
EXISTS (SubQuery) 형태로 사용되며 SubQuery의 리턴이 존재할 경우 true를 리턴한다
리턴으로 하나의 값을 가질때 이를 스칼라 값이라고 하며
쿼리의 리턴이 스칼라 값일 경우 스칼라 쿼리라고 한다
서브쿼리의 Pattern은 다음과 같다