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

MySQL EXISTS 연산자로 하위 쿼리의 레코드 존재 여부 확인하기

MySQL에서는 EXISTS 연산자를 사용하여 하위 쿼리(subquery)에 레코드가 존재하는지 테스트할 수 있습니다. 즉, EXISTS 연산자는 하위 쿼리가 하나 이상의 행을 반환하는지 검사하는 역할을 합니다.

EXISTS 연산자 문법

WHERE EXISTS (Subquery)

위의 EXISTS (subquery) 표현식은 하위 쿼리가 최소 한 개 이상의 행을 반환하면 TRUE를 반환하고, 그렇지 않으면 FALSE를 반환합니다.

예제

EXISTS 연산자의 동작을 이해하기 위해 아래 두 개의 테이블 데이터를 사용해 보겠습니다.

Customers 테이블:

mysql> Select * from Customers;
+-------------+----------+
| Customer_Id | Name     |
+-------------+----------+
| 1           | Rahul    |
| 2           | Yashpal  |
| 3           | Gaurav   |
| 4           | Virender |
+-------------+----------+
4 rows in set (0.00 sec)

Reservations 테이블:

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)

EXISTS를 활용한 하위 쿼리 예시

위 두 테이블에 EXISTS 연산자를 적용한 MySQL 하위 쿼리는 다음과 같습니다.

mysql> Select Name from customers WHERE EXISTS (SELECT * FROM Reservations WHERE Customers.customer_id = Reservations.customer_id);
+---------+
| Name    |
+---------+
| Rahul   |
| Yashpal |
| Gaurav  |
+---------+
3 rows in set (0.06 sec)

위 쿼리는 예약 내역이 있는 고객들의 이름만 반환합니다. 하위 쿼리가 각 고객에 대해 예약 기록의 존재 여부를 확인하고, 레코드가 존재하는 경우에만 해당 고객의 이름이 결과에 포함됩니다. 반면 Virender는 예약 기록이 없기 때문에 결과에서 제외된 것을 확인할 수 있습니다.