서브쿼리란 부모 쿼리 안에 작성하는 내부의 SELECT 쿼리이며, 주로 부모 쿼리의 FROM과 WHERE의 조건으로 사용됩니다.
서브쿼리라고 해서 특별한 문법이 있는 것이 아니라, SELECT를 괄호( )로 묶어서 가독성을 높입니다.
① 서브쿼리를 괄호로 감싸서 사용한다.
② 서브쿼리는 단일 행 또는 복수 행 비교 연산자와 함께 사용 가능
③ 서브쿼리에서는 ORDER BY를 사용하지 못한다.
서브쿼리란 위치에 따라 SELECT절, FROM절, WHERE절로 나뉘는데,
SELECT절에 [SELECT, FROM, WHERE]을 넣음
SELECT절에 사용되는 서브쿼리는 하나의 열처럼 사용된다
FROM절에 [SELECT, FROM, WHERE]을 넣음
FROM절에 사용되는 서브쿼리는 하나의 테이블처럼 사용된다.
테이블처럼 사용되므로, 열 이름과 테이블명을 꼭 명시해줘야 함 (FROM절 내 서브쿼리는 괄호를 치고, AS 명시)
유형에 따라 나눈 서브 쿼리는 아래와 같다.
중첩 서브쿼리 ( Nested Subquery )
WHERE 절에 나타는 서브쿼리
FROM 절에 나타나는 서브쿼리
- FROM 절에서 사용되는 서브쿼리
FROM 절에서 사용되는 서브쿼리를 인라인 뷰(Inline View)라고 한다. FROM 절에는 테이블 명이 오도록 되어 있다. 그런데 서브쿼리가 FROM절에 사용되면 뷰(View)처럼 결과가 동적으로 생성된 테이블로 사용할 수 있다. 임시적인 뷰이기 때문에 데이터베이스에 저장되지는 않는다.
또한, 인라인 뷰로 동적으로 생성된 테이블이여서 인라인 뷰의 칼럼은 자유롭게 참조가 가능하다.
스칼라 서브쿼리 ( Scalar Subquery )
SELECT 절에 나타나는 서브쿼리
참고로 일반적으로 join 연산이 서브쿼리 연산보다 성능이 좋기 때문에, 서브쿼리는 join으로 바꿀 수 있으면 성능측정 과정을 통해 바꾸는 것이 좋습니다.
[참조]
https://snowple.tistory.com/360
https://victorydntmd.tistory.com/139
그리고 참조는 안했는데 믿음 가는 티스토리 'SQL 전문가 가이드 한국 데이터베이스 진흥원에서 공부한 내용' 적어둔 티스토리
https://mozi.tistory.com/233