하나의 SQL 문에 포함되어 있는 또 다른 SQL 문
- 한 행 , 한 컬럼만 반환하는 서브쿼리
SELECT col1 , (select col2 from table2) from table1
- 기본적으로 FROM절에는 TABLE명을 써야 합니다.
서브쿼리가 FROM절에 사용되면 동적으로 생성된 테이블인 것처럼 사용 할 수 있다.- SQL문이 실행 될 때만 임시적으로 생성되는 동적인 뷰 이기때문에 데이터베이스에 해당 정보가 저장되어 있지 않다..
- 동적으로 조인방식을 사용하는것과 같다.
SELECT T1.col1 , T1.col2 FROM T1.table1, (SELECT col1 FROM table2) T2 WHERE T1.col1 = T2.col1
3_1. 단일 행
- 서브쿼리의 결과 값이 1건 이하인 경우 , 단일 행 비교 연산자(=,<,<=,>,>=,<>) 와 함께 사용한다.
SELECT col1, col2, col3 FROM table1 WHERE col1 = (SELECT col1 FROM table2 WHERE col2 = 'A')
3_2. 다중 행
- 서브쿼리 결과 값이 2건 이상인 경우 , 다중 행 비교 연산자(IN,ALL,ANY,SOME) 와 함께 사용한다.
SELECT col1, col2, col3 FROM table1 WHERE col1 IN (SELECT col1 FROM table2 WHERE col2 = 'A')
3_3.다중 컬럼
- 서브쿼리 결과로 여러 개의 컬럼이 반환되어 메인쿼리의 조건과 동시에 비교된다.
SELECT col1, col2, col3 FROM table1 WHERE (col1,col2) IN (SELECT col1 , col2 FROM table2 WHERE col2 = 'A')
3_4.연관 서브쿼리
- 서브쿼리 내에 메인쿼리 컬럼이 사용된 서브쿼리
SELECT M.col1, M.col2, M.col3 FROM mainTable1 M WHERE (M.col1, M.col2) IN (SELECT S.col1, S.col2 FROM subTable S WHERE S.col2 = M.col2) -- 메인 쿼리의 컬럼을 서브쿼리에 사용
- 그룹함수와 함께 사용될 때 그룹핑된 결과에 대해 부가적인 조건을 주기 위해 사용
SELECT T1.col1, T2.col1, T2.col2 FROM table1 T1, table2 T2 WHERE T1.col1 = T2.col1 GROUP BY T1.col1, T2.col1, T2.col2 HAVING SUM(T1.col1) < (SELECT SUM(col1) FROM T2 );