MySQL - Operator INTERSECT

Xin chào các bạn đam mê MySQL! Hôm nay, chúng ta sẽ cùng lặn sâu vào thế giới kỳ diệu của toán tử INTERSECT. Là người giáo viên máy tính gần gũi của bạn, tôi rất vui mừng được hướng dẫn các bạn trong hành trình này. Đừng lo lắng nếu bạn mới bắt đầu học lập trình; chúng ta sẽ học từ từ, và trước khi bạn nhận ra, bạn sẽ intersect dữ liệu như một chuyên gia!

MySQL - INTERSECT Operator

Toán tử INTERSECT trong MySQL

INTERSECT là gì?

Hãy tưởng tượng bạn có hai vòng tròn trong một biểu đồ Venn. Toán tử INTERSECT giống như tìm phần chồng叠 của hai vòng tròn đó. Trong MySQL, nó trả về các hàng chung giữa hai hoặc nhiều câu lệnh SELECT.

Thật không may, MySQL không có toán tử INTERSECT nội tại như một số cơ sở dữ liệu khác. Nhưng đừng lo lắng! Chúng ta có thể đạt được kết quả tương tự bằng các phương pháp khác. Hãy cùng xem cách chúng ta có thể làm điều này bằng cách sử dụng INNER JOIN hoặc câu lệnh IN.

Sử dụng INTERSECT với INNER JOIN

SELECT DISTINCT column1, column2, ...
FROM table1
INNER JOIN table2
ON table1.column1 = table2.column1 AND table1.column2 = table2.column2;

Hãy phân tích này:

  1. SELECT DISTINCT: Điều này đảm bảo rằng chúng ta không nhận được các hàng trùng lặp.
  2. INNER JOIN: Điều này kết hợp các hàng từ cả hai bảng dựa trên một cột liên quan giữa chúng.
  3. ON: Điều này xác định điều kiện để kết hợp các bảng.

Sử dụng INTERSECT với câu lệnh IN

SELECT column1, column2, ...
FROM table1
WHERE (column1, column2, ...) IN (SELECT column1, column2, ... FROM table2);

Dưới đây là những gì đang xảy ra:

  1. Chúng ta chọn từ table1.
  2. Câu lệnh WHERE ... IN kiểm tra xem các cột đã chọn có tồn tại trong table2 hay không.

Sử dụng INTERSECT với toán tử BETWEEN

Bây giờ, hãy làm cho mọi thứ thú vị hơn một chút! Chúng ta có thể kết hợp logic INTERSECT của mình với toán tử BETWEEN để tìm các hàng chung trong một phạm vi cụ thể.

SELECT employee_id, salary
FROM employees
WHERE salary BETWEEN 50000 AND 70000
AND employee_id IN (
SELECT employee_id
FROM performance
WHERE rating > 8
);

Truy vấn này tìm các nhân viên có lương từ 50,000 đến 70,000 và cũng có điểm đánh giá trên 8. Đó giống như tìm ra điểm giao giữa các nhân viên được trả lương tốt và có hiệu suất cao!

Sử dụng INTERSECT với toán tử IN

Toán tử IN có thể rất hữu ích khi kết hợp với logic INTERSECT của chúng ta. Hãy xem một ví dụ:

SELECT product_name, category
FROM products
WHERE category IN ('Electronics', 'Books', 'Toys')
AND product_id IN (
SELECT product_id
FROM sales
WHERE sale_date >= '2023-01-01'
);

Truy vấn này tìm các sản phẩm trong các danh mục cụ thể đã được bán từ đầu năm 2023. Đó giống như tạo một danh sách "bán chạy" cho các bộ phận cụ thể!

Sử dụng INTERSECT với toán tử LIKE

Toán tử LIKE cho phép chúng ta tìm kiếm một mẫu cụ thể trong một cột. Hãy xem cách chúng ta có thể sử dụng nó với logic INTERSECT:

SELECT customer_name, email
FROM customers
WHERE customer_name LIKE 'A%'
AND customer_id IN (
SELECT customer_id
FROM orders
WHERE total_amount > 1000
);

Truy vấn này tìm các khách hàng có tên bắt đầu bằng 'A' và đã đặt hàng với tổng số tiền trên 1000 đô la. Đó giống như tạo một danh sách VIP cho các khách hàng "A-list" chi tiêu lớn!

Toán tử Intersect bằng Chương trình Khách hàng

Đôi khi, chúng ta có thể cần thực hiện một thao tác INTERSECT trên phía khách hàng. Dưới đây là một đoạn mã Python đơn giản minh họa điều này:

import mysql.connector

# Kết nối đến MySQL
cnx = mysql.connector.connect(user='your_username', password='your_password',
host='127.0.0.1', database='your_database')
cursor = cnx.cursor()

# Thực hiện truy vấn đầu tiên
query1 = "SELECT column1, column2 FROM table1 WHERE condition1"
cursor.execute(query1)
result1 = set(cursor.fetchall())

# Thực hiện truy vấn thứ hai
query2 = "SELECT column1, column2 FROM table2 WHERE condition2"
cursor.execute(query2)
result2 = set(cursor.fetchall())

# Thực hiện INTERSECT
intersect_result = result1.intersection(result2)

# In kết quả
for row in intersect_result:
print(row)

# Đóng kết nối
cursor.close()
cnx.close()

Đoạn mã này:

  1. Kết nối đến MySQL.
  2. Thực hiện hai truy vấn riêng biệt.
  3. Chuyển đổi kết quả thành các tập hợp.
  4. Sử dụng phép toán giao của Python để tìm các hàng chung.
  5. In kết quả.

Nhớ rằng, mặc dù điều này hoạt động, nhưng thường hiệu quả hơn khi thực hiện các thao tác này trực tiếp trong MySQL khi có thể.

Phương pháp Mô tả Ví dụ
INNER JOIN Tìm các hàng chung dựa trên điều kiện kết hợp SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id
Câu lệnh IN Tìm các hàng trong một bảng tồn tại trong bảng khác SELECT * FROM table1 WHERE id IN (SELECT id FROM table2)
BETWEEN với IN Tìm các hàng chung trong một phạm vi SELECT * FROM table1 WHERE value BETWEEN 1 AND 10 AND id IN (SELECT id FROM table2)
LIKE với IN Tìm các hàng chung khớp với mẫu SELECT * FROM table1 WHERE name LIKE 'A%' AND id IN (SELECT id FROM table2)
Phía khách hàng Thực hiện phép toán giao trong mã ứng dụng Xem đoạn mã Python ở trên

Và thế là bạn đã có một chuyến tham quan grand tour của toán tử INTERSECT trong MySQL. Nhớ rằng, thực hành là cách tốt nhất để trở thành người thạo, vì vậy đừng ngần ngại thử nghiệm với các truy vấn này. Trước khi bạn biết, bạn sẽ intersect dữ liệu tập như một quản trị viên cơ sở dữ liệu có kinh nghiệm. Chúc bạn may mắn với việc truy vấn!

Credits: Image by storyset