Chuyển đổi subquery sang JOIN thường hiệu quả hơn.
Ví dụ subquery
Dữ liệu customers, reserve:
mysql> Select * from customers; +-------------+----------+ | Customer_Id | Name | +-------------+----------+ | 1 | Rahul | | 2 | Yashpal | | 3 | Gaurav | | 4 | Virender | +-------------+----------+ mysql> Select * from reserve; +------+------------+ | ID | Day | +------+------------+ | 1 | 2017-12-30 | | 2 | 2017-12-28 | | 2 | 2017-12-25 | | 1 | 2017-12-24 | | 3 | 2017-12-26 | +------+------------+
Subquery tìm khách chưa đặt chỗ:
mysql> Select Name from customers
where customer_id NOT IN (Select id From reserve);
+----------+
| Name |
+----------+
| Virender |
+----------+
Chuyển sang LEFT JOIN
- Di chuyển bảng
Reservetừ subquery sangFROM, nối vớiCustomersbằngLEFT JOIN - Chuyển điều kiện
INthành so sánh trực tiếp cộtid - Lọc hàng có
NULLở bảngReserve(không khớp)
mysql> SELECT Name from customers
LEFT JOIN reserve ON customer_id = Id
WHERE Id IS NULL;
+----------+
| Name |
+----------+
| Virender |
+----------+
1 row in set (0.00 sec)
Lợi ích: LEFT JOIN thường tối ưu hơn NOT IN, đặc biệt khi subquery trả về NULL.