컴퓨터 과학/데이터 베이스

SQL Derived Table(파생 테이블)과 Alias의 필요성

Data Jun 2025. 8. 18. 12:52

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의 장점

  1. 복잡한 쿼리를 단계별로 쪼갤 수 있음
    → 가독성이 좋아지고 유지보수가 편리해집니다.
  2. 집계 결과를 다시 활용할 수 있음
    → 예시처럼 지역별 리뷰 수를 구한 뒤, 그 평균을 다시 구할 수 있습니다.
  3. JOIN, WHERE, GROUP BY 등 다른 SQL 구문과 유연하게 조합 가능

 

정리

  • Derived Table(파생 테이블): 쿼리 실행 시점에만 존재하는 가상의 임시 테이블
  • Alias 필수: 파생 테이블을 참조하려면 반드시 별칭을 붙여야 함
  • 활용 예시: 집계된 결과를 다시 계산하거나, 복잡한 조건을 분리할 때 유용