10.1. 서브쿼리

10.1.1. 서브쿼리 개요

서브쿼리는 쿼리 내의 다른 쿼리로 메인쿼리에 필요한 데이터를 필터링, 변환 또는 집계하는 데 사용됩니다.

1개의 SQL문 내에 포함된 **SELECT**문을 의미하며, 서브쿼리 밖에 있는 SQL문을 메인쿼리라고 합니다.

서브쿼리는 소괄호 안에 작성되며, 메인쿼리에서 필요한 데이터를 제공하는 데 사용됩니다. 서브쿼리는 단독으로 실행될 수 없으며, 항상 메인쿼리와 연계되어 실행됩니다.

복잡한 데이터 요구사항을 처리하기 위한 효과적인 도구로서, 두 개 이상의 테이블에서 데이터를 참조할 때나 복잡한 SQL 문을 작성할 필요가 있을 때 주로 사용됩니다.

Untitled

<aside> 💡 **JOIN**으로 작성된 SQL 문은 서브쿼리가 포함된 SQL 문으로 변경할 수 있습니다. **JOIN**도 서브쿼리와 마찬가지로 두 개 이상의 테이블에서 데이터를 가져오는 데 사용하지만, 2개의 테이블에서 1개의 결과를 얻고자 할 때는 서브쿼리문을 사용하고 3개 이상의 테이블에서 데이터를 얻고자 하는 경우는 **JOIN**을 사용하는 것을 권장합니다.

3개 이상의 테이블에서는 서브쿼리 대신 **JOIN**을 사용할 시 쿼리가 더 간결해지고 가독성이 높아질 수 있기 때문입니다.

</aside>

서브쿼리는 SELECT, FROM, WHERE, HAVINGJOIN 절 등 다양한 SQL 절에서 활용될 수 있으며, 메인쿼리보다 먼저 실행되는 종속적인 구조를 가지고 있습니다.

서브쿼리는 소괄호 내에 정의되며, 단일 값 또는 집합 값을 반환할 수 있습니다.

또한, 다양한 비교 연산자(=, <, >, IN, NOT IN, EXIST, NOT EXIST 등)와 결합하여 복잡한 조건을 표현하는 데 활용할 수 있습니다.

<aside> 💡 서브쿼리의 종류나 목적에 따라서 **ORDER BY**절은 사용할 수 없습니다.
조건절 서브쿼리(IN, EXISTS 등)는 결과 집합의 존재를 확인하는 것이기 때문에 해당 구문 안에서는 **ORDER BY**절을 사용할 수 없습니다.

</aside>

10.1.2. 사용 목적

서브쿼리는 알려지지 않은 기준으로 검색할 때 용이합니다. 테이블 내에서 조건을 설정하기 어려워 다른 테이블에서 조건을 가져와야 할 경우 서브쿼리를 사용합니다. 서브쿼리는 특정 기준값을 미리 계산하고, 그 값을 바탕으로 다른 쿼리에서 활용하는 상황에서 큰 장점을 발휘합니다. 또한 아래와 같이 열 데이터 생성, 임시 테이블 생성, 집합 연산 수행, 데이터 검증, 복잡한 질의처리 시 서브쿼리를 활용할 수 있습니다.