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

MySQL에서 EXISTS 연산자와 함께 사용된 하위 쿼리가 행을 반환하지 않으면 어떻게 평가될까?

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)이 됩니다.