SQL을 작성하다 보면, FROM 절 안에 또 다른 SELECT 문을 작성하는 경우가 있습니다.
이렇게 SELECT 결과를 하나의 임시 테이블처럼 사용하는 것을 **Derived Table(파생 테이블)**이라고 합니다.
Derived Table이란?
Derived Table은 쿼리 안에서만 유효한 가상의 테이블입니다.
실제 데이터베이스에 물리적으로 존재하는 테이블은 아니고, 쿼리가 실행될 때만 생성되어 활용됩니다.
예시 쿼리를 살펴봅시다:
SELECT AVG(review_count_summary.review_count)
FROM
(
SELECT
SUBSTRING(address, 1, 2) AS region,
COUNT(*) AS review_count
FROM review AS r
LEFT JOIN member AS m
ON r.mem_id = m.id
GROUP BY SUBSTRING(address, 1, 2)
HAVING region IS NOT NULL
AND region != '안드'
) AS review_count_summary;
위 쿼리에서 괄호 안의 SELECT 구문은 지역(region)별 리뷰 수(review_count)를 구한 결과 집합입니다.
이 집합은 실제 테이블이 아니라 쿼리 실행 중에만 생기는 Derived Table입니다.
왜 Alias(별칭)가 필요할까?
SQL 문법상, Derived Table에는 반드시 Alias(별칭)를 붙여야 합니다.
즉, (...) AS old 부분이 꼭 있어야 한다는 뜻이죠.
만약 AS review_count_summary같은 별칭을 생략하면, SQL 엔진은 이 임시 테이블을 어떻게 참조해야 할지 알 수 없습니다.
따라서 MySQL, PostgreSQL, Oracle, SQL Server 등 거의 모든 RDBMS에서 Derived Table은 무조건 별칭이 필요합니다.
➡️ 위 예시에서 AS review_count_summary는 "파생 테이블 이름을 review_count_summary로 하겠다"는 의미입니다.
따라서 SELECT AVG(review_count_summary.review_count)처럼 파생 테이블의 컬럼을 참조할 수 있게 되는 것이죠.
Derived Table의 장점
- 복잡한 쿼리를 단계별로 쪼갤 수 있음
→ 가독성이 좋아지고 유지보수가 편리해집니다. - 집계 결과를 다시 활용할 수 있음
→ 예시처럼 지역별 리뷰 수를 구한 뒤, 그 평균을 다시 구할 수 있습니다. - JOIN, WHERE, GROUP BY 등 다른 SQL 구문과 유연하게 조합 가능
정리
- Derived Table(파생 테이블): 쿼리 실행 시점에만 존재하는 가상의 임시 테이블
- Alias 필수: 파생 테이블을 참조하려면 반드시 별칭을 붙여야 함
- 활용 예시: 집계된 결과를 다시 계산하거나, 복잡한 조건을 분리할 때 유용
'컴퓨터 과학 > 데이터 베이스' 카테고리의 다른 글
| MySQL에서 백틱(`), 작은따옴표(’), 큰따옴표(”)의 용도 정리 (2) | 2025.08.18 |
|---|---|
| SQL 상관 서브쿼리와 비상관 서브쿼리 (1) | 2025.08.18 |
| SQL 서브쿼리(Subquery)의 결과 형태 정리 (1) | 2025.08.18 |
| SQL 서브쿼리와 ANY, ALL 키워드 (3) | 2025.08.18 |
| SQL 다양한 조인(Join) 연산 정리 (5) | 2025.08.18 |