EXISTS 연산자와 빈 결과를 반환하는 하위 쿼리
MySQL에서 EXISTS 연산자는 하위 쿼리(서브쿼리)의 결과에 행이 하나라도 존재하는지 여부를 확인하는 데 사용됩니다. 만약 하위 쿼리가 단 한 개의 행도 반환하지 않는다면, EXISTS 표현식은 FALSE로 평가되며, 최종적으로 MySQL은 빈 결과 집합(Empty Set)을 출력합니다.
아래의 간단한 예제를 통해 이 동작 방식을 쉽게 이해할 수 있습니다. 먼저 'Customers' 테이블과 'Reservations' 테이블의 데이터를 살펴보겠습니다.
예제 데이터 확인
mysql> Select * from Customers; +-------------+----------+ | Customer_Id | Name | +-------------+----------+ | 1 | Rahul | | 2 | Yashpal | | 3 | Gaurav | | 4 | Virender | +-------------+----------+ 4 rows in set (0.00 sec) mysql> Select * from Reservations; +------+-------------+------------+ | ID | Customer_id | Day | +------+-------------+------------+ | 1 | 1 | 2017-12-30 | | 2 | 2 | 2017-12-28 | | 3 | 2 | 2017-12-29 | | 4 | 1 | 2017-12-25 | | 5 | 3 | 2017-12-26 | +------+-------------+------------+ 5 rows in set (0.00 sec)
행을 반환하지 않는 하위 쿼리 실행 예제
위 데이터에서 Customer_id가 4인 고객(Virender)은 Reservations 테이블에 예약 기록이 없습니다. 따라서 아래 쿼리처럼 customer_id가 4인 행을 찾는 하위 쿼리는 아무런 행도 반환하지 못합니다.
mysql> Select Name from Customers WHERE EXISTS (SELECT * FROM Reservations WHERE customer_id = 4); Empty set (0.00 sec)
하위 쿼리가 어떤 행도 반환하지 않았기 때문에 EXISTS 표현식은 FALSE로 평가되고, 그 결과 WHERE 조건을 만족하는 행이 없어 MySQL은 Empty set, 즉 빈 결과 집합을 출력하게 됩니다.
정리
- EXISTS 연산자는 하위 쿼리의 결과 행 존재 여부만 판단합니다.
- 하위 쿼리가 행을 하나 이상 반환하면 TRUE, 하나도 반환하지 않으면 FALSE입니다.
- FALSE로 평가되면 외부 쿼리는 어떤 행도 반환하지 않으며, 결과는 빈 집합(Empty set)이 됩니다.