Derived Tables in SQL
Quick Summary
Derived Table은 FROM 절 안의 서브쿼리로 만든 임시 가상 테이블이며, 복잡한 SQL을 집계·필터링·조인 단계로 나누어 더 읽기 쉽게 만드는 데 유용하다.
🖼️ 인포그래픽
🖼️ 4컷 인포그래픽
💡 한 줄 요약
Derived Table은 FROM 절 안의 서브쿼리로 만든 임시 가상 테이블이며, 복잡한 SQL을 집계·필터링·조인 단계로 나누어 더 읽기 쉽게 만드는 데 유용하다.
📌 핵심 요약
- 이 글은 SQL 학습에서 SELECT, JOIN, GROUP BY, 윈도 함수만큼 실무와 인터뷰에서 자주 등장하는 개념으로 Derived Table을 소개한다.
- Derived Table은 FROM 절 내부의 서브쿼리가 만든 임시 결과 집합으로, 외부 쿼리가 이를 가상 테이블처럼 조회하며 별칭은 반드시 필요하다.
- 직원 평균 급여보다 높은 급여를 받는 직원을 찾는 예제에서는 내부 쿼리가 평균 급여를 계산하고, 외부 쿼리가 이를 기준으로 직원을 필터링한다.
- Derived Table은 집계 후 필터링, 복잡한 조인 단순화, 계산값 분리, 평균·랭킹·요약 관련 인터뷰 문제 해결에 특히 적합하다.
- 서브쿼리, CTE, 임시 테이블과 비교하면 Derived Table은 쿼리 실행 중에만 존재하고 재사용성은 낮지만, 조인과 단계적 계산을 다루기 쉬운 장점이 있다.
🧩 주요 포인트
- 이 글은 SQL 학습에서 SELECT, JOIN, GROUP BY, 윈도 함수만큼 실무와 인터뷰에서 자주 등장하는 개념으로 Derived Table을 소개한다.
- Derived Table은 FROM 절 내부의 서브쿼리가 만든 임시 결과 집합으로, 외부 쿼리가 이를 가상 테이블처럼 조회하며 별칭은 반드시 필요하다.
- 직원 평균 급여보다 높은 급여를 받는 직원을 찾는 예제에서는 내부 쿼리가 평균 급여를 계산하고, 외부 쿼리가 이를 기준으로 직원을 필터링한다.
- Derived Table은 집계 후 필터링, 복잡한 조인 단순화, 계산값 분리, 평균·랭킹·요약 관련 인터뷰 문제 해결에 특히 적합하다.
- 서브쿼리, CTE, 임시 테이블과 비교하면 Derived Table은 쿼리 실행 중에만 존재하고 재사용성은 낮지만, 조인과 단계적 계산을 다루기 쉬운 장점이 있다.
🧠 상세 정리
1. Derived Table의 정의와 등장 배경
글은 SQL을 배울 때 많은 사람이 SELECT, JOIN, GROUP BY, 윈도 함수에 집중하지만, 실제 프로젝트와 SQL 인터뷰에서는 Derived Table도 자주 등장한다고 설명한다. Derived Table은 FROM 절 안에 작성한 서브쿼리가 만들어 내는 임시 결과 집합이다. 이 결과는 외부 SQL 문에서 하나의 가상 테이블처럼 다뤄진다. 즉 먼저 쿼리로 임시 테이블과 같은 결과를 만들고, 그 결과를 다시 다른 쿼리에서 사용하는 방식이다. SQL이 이 임시 결과를 참조할 이름이 필요하기 때문에 Derived Table에는 별칭이 필수라고 강조한다.
2. 평균 급여 예제로 본 동작 흐름
글은 직원 테이블을 예로 들어 평균 급여보다 많이 받는 직원을 찾는 과정을 보여 준다. 내부 쿼리는 employees 테이블에서 AVG(salary)를 계산해 avg_salary라는 값을 만들고, 예시에서는 평균 급여가 65000으로 나온다. 이 내부 쿼리 결과가 임시 가상 테이블이 된 뒤, 외부 쿼리는 직원 테이블과 이를 조인한다. 조인 조건에서는 각 직원의 salary가 avg_salary보다 큰지를 비교한다. 최종 결과로는 급여가 70000인 Amit과 80000인 Priya가 반환되며, Derived Table이 계산과 비교를 단계적으로 나누는 방식을 보여 준다.
3. 집계 후 필터링과 조인에서의 활용
Derived Table이 필요한 대표 상황으로 글은 집계한 뒤 다시 필터링해야 하는 경우를 든다. 주문 테이블 예제에서는 고객별 주문 금액을 SUM(amount)로 먼저 합산하고, 그 결과를 Derived Table로 만든 다음 total_spent가 700을 초과하는 고객만 외부 쿼리에서 걸러낸다. 이 방식으로 cust_id 1의 총액 800과 cust_id 3의 총액 900이 출력된다. 또 다른 예로는 부서별 평균 급여를 Derived Table에서 계산한 뒤, 직원 테이블과 department_id로 조인해 자기 부서 평균보다 많이 받는 직원을 찾는다. 글은 이 문제가 SQL 인터뷰에서 매우 자주 나오는 유형이라고 설명한다.
4. 서브쿼리와 CTE와의 차이
글은 초보자가 Derived Table과 일반 서브쿼리를 같다고 생각하기 쉽지만 용도와 위치가 다르다고 정리한다. 일반 서브쿼리는 주로 WHERE나 SELECT 절에 들어가 값이나 결과 집합을 반환하고, 별칭이 반드시 필요한 것은 아니다. 반면 Derived Table은 FROM 절에 위치하며 외부 쿼리에서 가상 테이블처럼 사용되므로 별칭이 필요하고, 복잡한 로직이나 조인에 더 적합하다. 같은 로직은 CTE로도 표현할 수 있는데, CTE는 WITH 절로 이름을 붙여 정의하고 이후 SELECT에서 조회한다. 글은 현대 SQL 개발에서는 CTE가 가독성을 높이기 때문에 선호되는 경우가 많지만, Derived Table 역시 인터뷰와 실무에서 매우 흔히 사용된다고 설명한다.
5. 임시 테이블, 중첩, 인터뷰 질문
Derived Table은 임시 테이블과도 구분된다. 글에 따르면 Derived Table은 물리적으로 저장되지 않고 쿼리 실행 동안만 존재하며, 실행이 끝나면 즉시 사라진다. 반면 임시 테이블은 물리적 저장을 사용하고 세션 동안 유지되며, 여러 번 재사용할 수 있지만 정리 작업이 필요할 수 있다. Derived Table은 중첩해서 사용할 수도 있지만, 지나친 중첩은 가독성을 낮추므로 일반적으로 피하는 것이 좋다고 경고한다. 인터뷰 관점에서는 별칭이 필수인지, GROUP BY를 내부에서 사용할 수 있는지, 여러 Derived Table을 조인할 수 있는지, 복잡한 쿼리의 가독성을 높일 수 있는지가 주요 질문으로 제시된다.
6. 장점, 한계, 실무 분석 패턴
글은 Derived Table의 실무 예로 제품별 총매출을 계산한 뒤 전체 평균 제품 매출과 비교해 평균보다 높은 매출을 낸 제품을 찾는 분석 흐름을 제시한다. 이 패턴은 대시보드, 리포팅 시스템, 분석 프로젝트에서 자주 등장한다고 설명한다. 장점으로는 복잡한 쿼리 단순화, 가독성 향상, 집계 후 필터링 지원, 인터뷰 문제 풀이에 유용함, 조인과 결합하기 쉬움이 언급된다. 한계로는 같은 쿼리 안에서 재사용할 수 없고, 깊은 중첩은 읽기 어렵게 만들며, 큰 Derived Table은 성능에 영향을 줄 수 있다는 점이 제시된다. 결론적으로 Derived Table은 FROM 절의 서브쿼리로 만든 임시 가상 테이블이며, 복잡한 로직을 더 작고 관리 가능한 단계로 나누는 도구로 정리된다.
🧾 핵심 주장 / 시사점
- Derived Table의 핵심 가치는 계산 결과를 먼저 테이블 형태로 만든 뒤 외부 쿼리에서 필터링이나 조인을 수행하게 해 복잡한 SQL을 단계적으로 읽게 만드는 데 있다.
- 평균 급여, 부서별 평균, 고객별 총지출처럼 집계 결과를 다시 비교해야 하는 문제에서는 Derived Table이 문제 구조를 명확하게 드러낸다.
- Derived Table은 간단하고 즉시적인 가상 테이블이 필요할 때 유용하지만, 같은 결과를 여러 번 참조하거나 가독성을 더 높여야 할 때는 CTE가 더 적합할 수 있다.
✅ 액션 아이템
- FROM 절 서브쿼리 결과에 반드시 별칭을 붙이고, 외부 쿼리가 가상 테이블처럼 조회하는 구조를 확인한다.
- 직원 평균 급여 예제처럼 내부 쿼리의 집계와 외부 쿼리의 필터링을 분리해 작성한다.
- Derived Table 적용 범위를 집계 후 필터링, 복잡한 조인 단순화, 계산값 분리 문제로 구분한다.
❓ 열린 질문
- Derived Table과 CTE, 임시 테이블을 구분할 때 재사용성보다 단계적 계산 편의가 더 중요한 상황은 무엇인가?
- 평균·랭킹·요약 관련 SQL 문제에서 Derived Table을 선택할 기준은 무엇인가?
- 복잡한 조인을 단순화할 때 내부 쿼리에 남길 계산값과 외부 쿼리로 넘길 조건은 어떻게 판단할 것인가?