
SUBQUERY서브쿼리
하나의 SQL 문 안에 포함되어 있는 또 다른 SQL 문을 말한다.
메인 쿼리가 서브 쿼리를 포함하는 종속적인 관계이다.
- 서브쿼리는 메인쿼리의 칼럼 사용 가능
- 메인쿼리는 서브쿼리의 칼럼 사용 불가
SCALAR SUBQUERYSELECT column1, (SELECT column2 FROM table2 WHERE condition)
FROM table1
WHERE condition;

INLINE VIEWSELECT a.column, b.column
FROM table1 a, (SELECT column1, column2 FROM table2) b
WHERE condition;

NESTED SUBQUERY서브쿼리가 비교연산자와 사용되는 경우,
서브쿼리의 검색 결과는 한 개의 결과값을 가져야 한다. (두개 이상인 경우 에러)
SELECT column_names
FROM table_name
WHERE column_name = (SELECT column_name
FROM table_name
WHERE condition)
ORDER BY column_name;

MULTIPLE ROW - IN서브쿼리 결과 중에 포함 될 때
SELECT column_names FROM table_name WHERE column_name IN (SELECT column_name FROM table_name WHERE condition) ORDER BY column_name;
SNL에 출연한 영화배우를 조회

MULTIPLE ROW - EXISTS서브쿼리 결과에 값이 있으면 반환
SELECT column_names FROM table_name WHERE EXISTS (SELECT column_name FROM table_name WHERE condition) ORDER BY column_name;
범죄 검거 혹은 발생 건수가 2000건 보다 큰 경찰서 조회

MULTIPLE ROW - ANY서브쿼리 결과 중에 최소한 하나라도 만족하면 (비교연산자 사용)
SELECT column_names FROM table_name WHERE column_name = ANY (SELECT column_name FROM table_name WHERE condition) ORDER BY column_name;
SNL에 출연한 적이 있는 연예인 이름 조회

MULTIPLE ROW - ALL서브쿼리 결과를 모두 만족하면 (비교연산자 사용)
SELECT column_names FROM table_name WHERE column_name = ALL (SELECT column_name FROM table_name WHERE condition) ORDER BY column_name;

MULTI COLUMN SUBQUERY서브쿼리 내에 메인쿼리 컬럼이 같이 사용되는 경우.
SELECT column_names FROM tablename a WHERE (a.column1, a.column2, ...) IN (SELECT b.column1,... FROM tablename b WHERE a.column_name = b.column_name) ORDER BY column_names;
