Code Tu Tam

Cách sử dụng của INTERSECT trong MysSQL

5/5 - (1 bình chọn)

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:

  1. Thứ tự và số cột trong danh sách truy vấn được chọn phải giống nhau.
  2. 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  UNIONINTERSECT 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  DISTINCTINNER 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:

  1. Mệnh đề INNER JOIN trả về các hàng từ cả hai bảng bên trái và bên phải.
  2. 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:

  1. Truy vấn con trả về tập kết quả đầu tiên.
  2. 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:

Exit mobile version