Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 파생 테이블(Derived Table)이란? FROM 절 서브쿼리의 개념과 활용법

MySQL에서 서브쿼리가 FROM 절에서 시작될 때, 그 결과로 생성되는 결과 집합을 파생 테이블(Derived Table)이라고 합니다. 이렇게 파생 테이블을 만들어내는 서브쿼리를 특별히 구체화된 서브쿼리(Materialized Subquery)라고 부르기도 합니다.

파생 테이블 예제 데이터 준비

개념을 쉽게 이해하기 위해 'cars' 테이블의 데이터를 활용해 보겠습니다.

mysql> Select * from Cars;
+------+--------------+---------+
| ID   | Name         | Price   |
+------+--------------+---------+
|  1   | Nexa         | 750000  |
|  2   | Maruti Swift | 450000  |
|  3   | BMW          | 4450000 |
|  4   | VOLVO        | 2250000 |
|  5   | Alto         | 250000  |
|  6   | Skoda        | 1250000 |
|  7   | Toyota       | 2400000 |
|  8   | Ford         | 1100000 |
+------+--------------+---------+
8 rows in set (0.02 sec)

파생 테이블을 생성하는 쿼리 실행

다음 쿼리는 FROM 절 안에 서브쿼리를 포함하고 있으며, 실행 결과로 파생 테이블이 생성됩니다.

mysql> Select AVG(P) FROM(SELECT Name, SUM(Price) P FROM cars GROUP BY Name)AS totals;
+--------------+
| AVG(P)       |
+--------------+
| 1612500.0000 |
+--------------+
1 row in set (0.76 sec)

쿼리 동작 원리 분석

이 쿼리의 내부 동작 순서는 다음과 같습니다.

1단계: 내부 서브쿼리가 먼저 실행되어 차량별 가격 합계를 담은 파생 테이블을 생성합니다.
2단계: 외부 쿼리가 이 파생 테이블을 하나의 일반 테이블처럼 사용하여 평균값(AVG)을 계산해 반환합니다.

파생 테이블에는 반드시 별칭(Alias)을 지정해야 합니다

MySQL에서 파생 테이블을 사용할 때는 반드시 별칭(alias)을 붙여야 한다는 규칙이 있습니다. 위 예제에서는 파생 테이블에 'totals'라는 별칭을 지정했습니다. 별칭이 없으면 쿼리 실행 시 오류가 발생하므로 주의해야 합니다.

서브쿼리만 단독으로 실행해 보기

내부 서브쿼리만 따로 실행하면, 외부 쿼리에 전달되는 파생 테이블의 실제 모습을 확인할 수 있습니다.

mysql> SELECT Name, SUM(Price) P FROM cars GROUP BY Name ;
+--------------+---------+
| Name         | P       |
+--------------+---------+
| Alto         | 250000  |
| BMW          | 4450000 |
| Ford         | 1100000 |
| Maruti Swift | 450000  |
| Nexa         | 750000  |
| Skoda        | 1250000 |
| Toyota       | 2400000 |
| VOLVO        | 2250000 |
+--------------+---------+
8 rows in set (0.03 sec)

위 결과가 바로 파생 테이블입니다. 각 차량 이름별로 가격의 합계(SUM)가 계산되어 임시 테이블 형태로 만들어지며, 이후 외부 쿼리가 이 테이블을 기반으로 최종 결과(평균값)를 산출하는 구조입니다.