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

MySQL FROM 절에서 서브쿼리를 테이블처럼 활용하는 방법

MySQL에서는 WHERE 절에서 연산자와 함께 서브쿼리의 결과를 활용할 수 있는 것처럼, FROM 절에서도 서브쿼리를 하나의 테이블처럼 사용할 수 있습니다. 이를 파생 테이블(Derived Table) 또는 인라인 뷰라고 부르며, 복잡한 쿼리를 단계별로 나누어 처리할 때 매우 유용합니다.

FROM 절 서브쿼리의 기본 문법

FROM 절에 서브쿼리를 작성할 때는 반드시 별칭(Alias)을 붙여야 합니다. 별칭이 없으면 MySQL이 해당 결과 집합을 참조할 수 없어 오류가 발생합니다. 아래 예제에서는 'C_car'라는 별칭을 사용했습니다.

예제 데이터 확인

먼저 예제로 사용할 '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)

서브쿼리를 테이블로 사용한 조회

아래 쿼리는 가격이 200,000보다 큰 차량을 먼저 서브쿼리로 추출한 뒤, 그 결과를 'C_car'라는 임시 테이블처럼 취급하여 이름이 'Nexa'인 행만 다시 필터링하는 예제입니다.

mysql> Select * FROM ( Select Name, Price from Cars Where Price > 200000) C_car WHERE Name = 'Nexa';
+------+--------+
| Name | Price  |
+------+--------+
| Nexa | 750000 |
+------+--------+
1 row in set (0.00 sec)

쿼리 실행 순서 이해하기

이 쿼리는 다음과 같은 순서로 동작합니다.

1. 내부 서브쿼리가 먼저 실행되어 가격이 200,000을 초과하는 차량 목록(Nexa, BMW, VOLVO, Toyota)을 생성합니다.
2. 생성된 결과 집합이 'C_car'라는 별칭을 가진 임시 테이블이 됩니다.
3. 외부 쿼리가 'C_car' 테이블에서 Name이 'Nexa'인 행만 최종적으로 반환합니다.

정리

FROM 절의 서브쿼리를 활용하면 집계 결과에 대한 추가 필터링, 조인 전 사전 가공 등 복잡한 데이터 처리를 논리적으로 구성할 수 있습니다. 단, 서브쿼리 뒤에는 반드시 별칭을 지정해야 한다는 점을 기억하세요.