서브쿼리를 활용한 MySQL 뷰 생성 개요
MySQL에서 뷰(View)는 복잡한 쿼리를 재사용 가능한 형태로 저장할 수 있는 강력한 기능입니다. 이 글에서는 서브쿼리(subquery)를 사용하여 뷰를 생성하는 방법을 실제 예제와 함께 자세히 알아보겠습니다.
예제 데이터: Cars 테이블
설명을 위해 다음과 같은 '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.08 sec)
서브쿼리로 뷰 생성하기
아래 쿼리는 서브쿼리가 제공하는 값을 기반으로 'cars_avgprice'라는 이름의 뷰를 생성합니다. 여기서 중요한 점은 서브쿼리가 반드시 괄호( ) 안에 포함되어야 한다는 것입니다.
mysql> Create view cars_avgprice AS SELECT NAME, Price FROM Cars WHERE price > (SELECT AVG(Price) from cars); Query OK, 0 rows affected (0.12 sec) mysql> Select * from cars_avgprice; +--------+---------+ | NAME | Price | +--------+---------+ | BMW | 4450000 | | VOLVO | 2250000 | | Toyota | 2400000 | +--------+---------+ 3 rows in set (0.03 sec)
서브쿼리의 동작 원리 이해하기
위의 서브쿼리를 개별적으로 실행해 보면, 뷰가 어떻게 값을 얻게 되었는지 명확하게 이해할 수 있습니다.
mysql> Select AVG(Price) from cars; +--------------+ | AVG(Price) | +--------------+ | 1612500.0000 | +--------------+ 1 row in set (0.00 sec)
결과 분석
서브쿼리 (SELECT AVG(Price) FROM cars)는 전체 차량 가격의 평균값인 1,612,500을 반환합니다. 따라서 뷰 'cars_avgprice'는 평균 가격보다 비싼 차량들, 즉 BMW(4,450,000), VOLVO(2,250,000), Toyota(2,400,000)만을 결과로 보여주게 됩니다.
이처럼 서브쿼리를 활용한 뷰 생성은 평균값, 최댓값 등 집계 함수의 결과를 조건으로 활용해야 할 때 매우 유용합니다. 한 번 뷰를 만들어 두면 복잡한 조건의 쿼리를 매번 작성할 필요 없이 간단한 SELECT 문으로 손쉽게 조회할 수 있다는 장점이 있습니다.