Scalar Subquery
- SELECT절에서 사용하는 서브쿼리
- 결과는 하나의 column이어야 함
SELECT column1, (SELECT column2 FROM table2 WHERE condition) FROM table1 WHERE condition;
Inline View
- FROM 절에 사용하는 서브쿼리.
- 메인쿼리에서는 Inline View에서 조회한 column만 사용가능
SELECT a.column, b.column FROM table a, (SELECT column1, column2 FROM table2) b WHERE codition;
Nested Subquery
- WHERE절에서 사용하는 서브쿼리
[Single Row] - 하나의 열을 검색하는 서브쿼리 - 서브쿼리가 비교연산자와 사용되는 경우, 서브쿼리의 검색 결과는 한 개의 결과값을 가져야 함 SELECT column_names FROM table_name WHERE column_name = (SELECT column_name FROM table_name WHERE condition) OREDER BY column_name; ![](https://velog.velcdn.com/images/cjaeks6401/post/7e973420-f935-46d5-9b44-eff93cad03a4/image.png)
Multiple Row : 하나 이상의 열을 검색하는 서브쿼리
[Multiple Row - IN] 서브쿼리 결과중에 포함
SELECT column_names FROM table_name
WHERE column_name IN (SELECT column_name FROM table_name WHERE condition)
ORDER BY column_names;
[Multiple Row - EXISTS] 서브쿼리 결과에 값이 있으면 반환
SELECT column_names FROM table_name
WHERE EXISTS (SELECT column_name FROM table_name WHERE condition)
ORDER BY column_names;
[Multiple Row - ANY] 서브쿼리 결과 중에 최소한 하나라도 만족하면 반환(비교연산자 사용)
SELECT column_names FROM table_name
WHERE column_name = ANY (SELECT column_name FROM table_name WHERE condition)
ORDER BY column_names;
[Multiple Row - ALL] 서브쿼리 결과를 모두 만족하면 반환(비교연산자 사용)
SELECT column_names FROM table_name
WHERE column_name = ALL (SELECT column_name FROM table_name WHERE condition)
ORDER BY column_names;
Multi Column Subquery
- 하나 이상의 행을 검색하는 서브쿼리
- 서브쿼리 내에 메인쿼리 컬럼이 같이 사용되는 경우
SELECT column_names FROM tablename a
WHERE (a.column1, a.column2, ...) IN (SELECT b.column1, b.column2, ... FROM tablename b WHERE a.column_name = b.column_name)
ORDER BY column_names;
실습
자료출처 : 제로베이스 데이터스쿨