Trong bài viết này, chúng ta sẽ cùng tìm hiểu về toán tử INTERSECT
và chỉ cách hoạt động của toán tử MySQL INTERSECT
.
Lưu ý rằng MySQL không hỗ trợ toán tử INTERSECT. Bài viết này se giới thiệu cho bạn cáchs sử dụng toán tử INTERSECT trong MySQL bằng cách sử dụng các mệnh đề nối.
Giới thiệu về toán tử INTERSECT
Toán tử INTERSECT
là toán tử tập hợp chỉ trả về các hàng riêng biệt của hai truy vấn trở lên.
Sau đây minh họa cú pháp của toán tử INTERSECT
.
(SELECT column_list FROM table_1) INTERSECT (SELECT column_list FROM table_2);
Toán tử INTERSECT
sẽ so sánh tập hợp kết quả của hai truy vấn và trả về các hàng riêng biệt được xuất ra bởi cả hai truy vấn.
Để sử dụng toán tử INTERSECT
cho hai truy vấn, bạn tuân theo các quy tắc sau:
- Thứ tự và số cột trong danh sách truy vấn được chọn phải giống nhau.
- Các kiểu dữ liệu của các cột tương ứng phải tương thích.
Sơ đồ sau đây minh họa về toán tử INTERSECT
.
Truy vấn bên trái tạo ra một tập hợp kết quả là (1,2,3).
Truy vấn bên phải trả về tập hợp kết quả là (2,3,4).
Toán tử INTERSECT
trả về các hàng riêng biệt của cả hai tập hợp kết quả bao gồm (2,3).
Không giống như toán tử UNION
, toán tử INTERSECT
trả về giao điểm giữa hai đường tròn.
Lưu ý rằng tiêu chuẩn SQL có ba toán tử tập hợp bao gồm UNION
, INTERSECT
và MINUS
.
Giả lập INTERSECT
trong MySQL
Thật không may, MySQL không hỗ trợ toán tử INTERSECT
. Tuy nhiên, bạn có thể mô phỏng chức năng của toán tử INTERSECT
.
Thiết lập bảng mẫu
Các câu lệnh sau đây tạo bảng t1
và t2
, sau đó chèn dữ liệu vào cả hai bảng.
CREATE TABLE t1 ( id INT PRIMARY KEY ); CREATE TABLE t2 LIKE t1; INSERT INTO t1(id) VALUES(1),(2),(3); INSERT INTO t2(id) VALUES(2),(3),(4);
Truy vấn sau trả về các hàng từ bảng t1
.
SELECT id FROM t1;
id ---- 1 2 3
Truy vấn sau trả về các hàng từ bảng t2
SELECT id FROM t2;
id --- 2 3 4
1) Giả lập mệnh đề INTERSECT
sử dụng DISTINCT
và INNER JOIN
Câu lệnh sau sử dụng toán tử DISTINCT
và mệnh đề INNER JOIN
để trả về các hàng riêng biệt trong cả hai bảng:
SELECT DISTINCT id FROM t1 INNER JOIN t2 USING(id);
id ---- 2 3
Cách hoạt động của câu lệnh trên:
- Mệnh đề
INNER JOIN
trả về các hàng từ cả hai bảng bên trái và bên phải. - Toán tử
DISTINCT
loại bỏ các hàng trùng lặp.
2) Emulate INTERSECT
using IN
and subquery
Câu lệnh sau đây sử dụng toán tử IN
và truy vấn con để trả về giao điểm của hai tập hợp kết quả.
SELECT DISTINCT id FROM t1 WHERE id IN (SELECT id FROM t2);
id ---- 2 3
Cách hoạt động của câu lệnh trên:
- Truy vấn con trả về tập kết quả đầu tiên.
- Truy vấn bên ngoài sử dụng toán tử
IN
để chỉ chọn các giá trị tồn tại trong tập hợp kết quả đầu tiên. Toán tửDISTINCT
đảm bảo rằng chỉ các giá trị riêng biệt được chọn.
Tổng kết
Trong bài viết này, bạn đã học được một vài cách để mô phỏng chức năng của toán tử INTERSECT
trong MySQL.
Các bạn có thể tham khảo: https://www.mysqltutorial.org/mysql-intersect/
Các bài viết liên quan: