MySQL에서 하위 쿼리(서브쿼리)는 최대 하나의 값만 반환할 수 있습니다. 이 값은 산술 표현식의 결과일 수도 있고, AVG(), SUM(), MAX() 같은 컬럼 함수(집계 함수)의 결과일 수도 있습니다.
MySQL은 서브쿼리가 반환한 값을 비교 연산자 반대편에 있는 값과 비교하여 최종 결과를 도출합니다. 서브쿼리는 다음과 같은 모든 비교 연산자 앞이나 뒤에 자유롭게 사용할 수 있습니다.
- = (같음)
- > (보다 큼)
- >= (크거나 같음)
- < (보다 작음)
- <= (작거나 같음)
- != , <> (같지 않음)
- <=> (NULL 안전 동등 비교)
예제: <(보다 작음) 연산자와 함께 사용하는 서브쿼리
아래 예제는 Cars 테이블에서 전체 차량 평균 가격보다 낮은 가격의 차량을 조회하는 쿼리입니다. WHERE 절 안에 < 비교 연산자와 함께 서브쿼리가 사용되었습니다.
mysql> SELECT * FROM Cars WHERE Price < (SELECT AVG(Price) FROM Cars); +------+--------------+---------+ | ID | Name | Price | +------+--------------+---------+ | 1 | Nexa | 750000 | | 2 | Maruti Swift | 450000 | | 5 | Alto | 250000 | | 6 | Skoda | 1250000 | | 8 | Ford | 1100000 | +------+--------------+---------+ 5 rows in set (0.00 sec)
위 예제에서 내부 서브쿼리 (SELECT AVG(Price) FROM Cars)는 먼저 실행되어 전체 차량의 평균 가격을 계산하고, 외부 쿼리는 그 평균값보다 가격이 낮은 행들만 필터링하여 반환합니다.
이처럼 서브쿼리는 < 연산자뿐만 아니라 =, >, >=, <=, != 등 다른 비교 연산자와도 동일한 방식으로 함께 사용할 수 있습니다. 단, 비교 연산자와 함께 사용하려면 서브쿼리가 반드시 단일 값을 반환해야 한다는 점을 기억해야 합니다. 여러 행을 반환하는 서브쿼리를 사용하려면 IN, ANY, ALL 같은 연산자를 대신 활용해야 합니다.