sql subquery
- 하나의 sql 문 안에 포함되어 있는 또 다른 sql문을 말한다.
- 메인쿼리가 서브쿼리를 포함하는 종속적인 관계이다.
** 서브쿼리는 메인쿼리의 칼럼 사용 가틍
** 메인쿼리는 서브쿼리의 칼럼 사용 불가사용 시 주의할 점
* subquery는 괄호로 묶어서 사용
* 단일 행 혹은 복수 행 비교 연산자와 함께 사용 가능
* subquery 에서는 order by를 사용하지 않는다.종류
scalar(스칼라) subquery - select 절에 사용
inline(인라인) view - from 절에 사용
* nested(중첩) subquery - where 절에 사용
1. scalar(스칼라) subquery
- select 절에서 사용하는 서브쿼리
- 결과는 하나의 column 이어야 한다.
[ 생성 문법 ]
select columns1, (select columns2 from table2 where condition) from table1 where condition;
2. inline(인라인) view
- from 절에서 사용하는 서브쿼리
- 메인쿼리에서는 인라인 부에서 조회한 column만 사용가능하다.
[ 생성 문법 ]
select a.colun, b.column from table1.a, (select column1, column2, from table2) b where condition;
3. nested(중첩) subquery
- where 절에서 사용하는 서브쿼리
- single row - 하나의 열을 검색하는 서브쿼리
- multiple row - 하나 이상의 열을 검색하는 서브쿼리, in, exists, any, ALL과 같이 사용됨
- multiple column - 하나 이상의 행을 검색하는 서브쿼리,
1) single row subquery
* 서브쿼리가 비교연산자(=, >, >=, <. <=, <>, !=)와 사용되는 경우, 서브쿼리의 검색 결과는 한 개의 결과값(row)을 가져야 한다. (두 개 이상인 경우 에러)
select column_names from table_name where column_name = (select column_name from table_name where condition) order by column_name;
4. multiple column Subquery (연관 서브쿼리)
- 서브쿼리 내에 메인쿼리 컬럼이 같이 사용되는 경우
생성 문법
select columnn_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;