SQL Subquery
- 하나의 SQL문 안에 포함되어 있는 또 다른 SQL문
- 메인 쿼리가 서브쿼리를 포함하는 종속적인 관계
- 서브쿼리는 메인쿼리의 칼럼 사용 가능
- 메인쿼리는 서브쿼리의 칼럼 사용 불가
- Subquery는 괄호로 꼭 묶을것!!!!
- 단일행 혹은 복수행 비교 연산자와 함께 사용 가능
- Subquery에서는 order by 사용 X!!
1. Scalar Subquery - select절
select column1, (select column2 from table2 where condition) <-괄호 안에 있는게 Subquery! 괄호 밖에 있는게 MainQuery!
from table 1
where condition;
2. Inline view - from절
- from절에 사용하는 서브쿼리, 메인쿼리에서는 인라인 뷰에서 조회한 Column만 사용가능!!
select a.column, b.column
from tabel a, (select column1, column2 from table2) b
where condition;
3. Nested Subquery - where절
3-1) Single row - 하나의 열을 검색하는 서브쿼리
- 서브쿼리가 비교연산자(=,>,<,...)랑 사용되는 경우, 서브쿼리의 검색 결과는 한개의 값을 가져야 함!!! (두개 이상인 경우 에러!)
3-2) Multiple row - 하나 이상의 열을 검색하는 서브쿼리
- In vs Exists
In - 무조건 서브쿼리의 모든 행을 검색하여 해당값을 In 연산자에 대입
Exists - 서브쿼리에 해당하는 값을 1개라도 찾는다면 조회를 멈춤
-> In은 끝까지 서브쿼리 조회! Exists는 찾을 때가지만 조회!
-> 존재여부만을 찾을 땐 exists가 효율 Good!
*Any
- 서브쿼리 결과 중 최소 하나라도 만족하면(비교연산자 사용)
*All
- 서브쿼리 결과를 모두 만족하면(비교연산자 사용)
3-3) Multiple column - 하나 이상의 행을 검색하는 서브쿼리
- 서브쿼리 내에 메인쿼리 칼럼이 같이 사용되는 경우!
아직 완전히 이해하지 못했다....
예제 문제를 보면 어떤걸 써야할지 정확히 모르겠다...
예제를 통해서 더 연습해야할 듯...!!!!