단일 쿼리에서 테이블의 최소값(MIN)과 최대값(MAX)을 동시에 구하려면 MySQL의 UNION 연산자를 활용하면 됩니다. UNION은 여러 SELECT 문의 결과를 하나의 결과 집합으로 합쳐 주기 때문에, 최소값을 조회하는 쿼리와 최대값을 조회하는 쿼리를 결합할 때 매우 유용합니다.
1. 예제 테이블 생성
먼저 실습에 사용할 테이블을 만들어 보겠습니다.
mysql> create table DemoTable
(
Price int
);
Query OK, 0 rows affected (0.57 sec)2. 데이터 삽입
INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values(88); Query OK, 1 row affected (0.30 sec) mysql> insert into DemoTable values(100); Query OK, 1 row affected (0.22 sec) mysql> insert into DemoTable values(98); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable values(120); Query OK, 1 row affected (0.12 sec)
3. 저장된 데이터 확인
SELECT 문으로 테이블의 전체 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-------+ | Price | +-------+ | 88 | | 100 | | 98 | | 120 | +-------+ 4 rows in set (0.00 sec)
4. UNION을 이용한 최소값·최대값 동시 조회
아래 쿼리는 서브쿼리로 MIN(Price)와 MAX(Price)를 각각 구한 뒤, 해당 값과 일치하는 행을 UNION으로 결합하여 단일 쿼리에서 최소값과 최대값을 함께 반환합니다.
mysql> select Price from DemoTable where Price=(select min(Price) from DemoTable) UNION select Price from DemoTable where Price=(select max(Price) from DemoTable);
실행 결과는 다음과 같습니다.
+-------+ | Price | +-------+ | 88 | | 120 | +-------+ 2 rows in set (0.00 sec)
참고: 더 간단한 대안
UNION 없이 MIN()과 MAX() 집계 함수를 하나의 SELECT 문에 함께 사용하는 방법도 있습니다.
mysql> select min(Price) as MinPrice, max(Price) as MaxPrice from DemoTable;
이 방식은 결과가 한 행의 두 컬럼으로 출력되며, UNION 방식은 최소값과 최대값이 별도의 행으로 출력된다는 차이가 있습니다. 상황에 맞는 방식을 선택하면 됩니다.