MySQL INTERSECT

Trong hướng dẫn này, bạn đã học được một vài cách để mô phỏng toán tử INTERSECT trong MySQL.

MySQL INTERSECT

Introduction to the SQL INTERSECT operator

Toán tử INTERSECT là toán tử được thiết lập chỉ trả về các hàng khác nhau của hai truy vấn hoặc nhiều truy vấn hơn.

The following illustrates the syntax of the INTERSECT operator.

(SELECT column_list 
FROM table_1)
INTERSECT
(SELECT column_list
FROM table_2);

Toán tử INTERSECT so sánh 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 trái và phải.

Để sử dụng toán tử INTERSECT cho hai truy vấn, các quy tắc sau được áp dụng:
+ Thứ tự và số lượng cột 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 minh họa toán tử INTERSECT.

Truy vấn bên trái tạo ra một tập kết quả là (1,2,3).
Truy vấn đúng trả về một tậ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 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 vò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.

Thật không may, MySQL không hỗ trợ toán tử INTERSECT. Tuy nhiên, bạn có thể mô phỏng toán tử INTERSECT.

Hãy để cùng nhau tạo ra một số dữ liệu mẫu cho cuộc biểu tình.

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 đây trả về các hàng từ bảng t1.

SELECT id FROM t1;
id
----
1
2
3

Truy vấn sau đây trả về các hàng từ bảng t2:

SELECT id FROM t2;
id
---
2
3
4

Mô phỏng toán tử MySQL INTERSECT bằng toán tử DISTINCT và mệnh đề 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
Làm thế nào nó hoạt động.
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.

Mô phỏng toán tử MySQL INTERSECT bằng toán tử IN và truy vấn con

Câu lệnh sau sử dụng toán tử IN và truy vấn con để trả về giao điểm của hai tập kết quả.

SELECT DISTINCT
    id
FROM
    t1
WHERE
    id IN (SELECT 
            id
        FROM
            t2);
id
----
2
3
Làm thế nào nó hoạt động.
+ 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ị trong tậ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.

Last updated