Skip to content

Lập trình/ Code

Intersect là gì? Hướng dẫn toàn tập về toán tử INTERSECT trong SQL và Lập trình

Trong thế giới dữ liệu và lập trình, việc tìm ra điểm chung giữa các tập hợp là một nhu cầu thiết yếu. Dù bạn là một Data Analyst đang truy vấn cơ sở dữ liệu hay một Software Engineer đang xử lý mảng (array), bạn sẽ thường xuyên đối mặt với câu hỏi: “Làm […]

Văn Tân
Văn Tân Tác giả
8 phút đọc 1,458 từ 289 lượt xem
Intersect là gì? Hướng dẫn toàn tập về toán tử INTERSECT trong SQL và Lập trình
Mục lục bài viết (12 mục)

Trong thế giới dữ liệu và lập trình, việc tìm ra điểm chung giữa các tập hợp là một nhu cầu thiết yếu. Dù bạn là một Data Analyst đang truy vấn cơ sở dữ liệu hay một Software Engineer đang xử lý mảng (array), bạn sẽ thường xuyên đối mặt với câu hỏi: “Làm thế nào để lấy ra các phần tử xuất hiện ở cả hai nơi?”. Câu trả lời chính là Intersect.

Vậy Intersect là gì? Cách sử dụng nó trong SQL và các ngôn ngữ lập trình hiện đại như thế nào? Hãy cùng tìm hiểu chi tiết trong bài viết này.

1. Intersect là gì?

Về mặt ngữ nghĩa, Intersect có nghĩa là “giao nhau” hoặc “cắt nhau”.

Trong toán học và khoa học máy tính, Intersect (Phép giao) là một toán tử tập hợp dùng để trả về các phần tử chung duy nhất xuất hiện trong cả hai (hoặc nhiều) tập hợp dữ liệu.

Intersect là gì
Intersect là gì
    • Nếu tập hợp A là {1, 2, 3}

    • Và tập hợp B là {2, 3, 4}

    • Thì A Intersect B sẽ là {2, 3}.

INTERSECT trong SQL (Structured Query Language)

Ứng dụng phổ biến nhất của từ khóa này nằm trong SQL. INTERSECT là một toán tử tập hợp (set operator) được sử dụng để kết hợp hai câu lệnh SELECT và trả về các dòng dữ liệu xuất hiện trong cả hai kết quả truy vấn.

Cú pháp cơ bản

SQL
SELECT column1, column2, ...
FROM table_name1
INTERSECT
SELECT column1, column2, ...
FROM table_name2;

Nguyên tắc hoạt động và điều kiện bắt buộc

Để sử dụng INTERSECT thành công, bạn phải tuân thủ 3 nguyên tắc vàng:

  1. Số lượng cột: Số lượng cột trong các câu lệnh SELECT phải bằng nhau.

  2. Kiểu dữ liệu: Kiểu dữ liệu của các cột tương ứng phải tương đồng hoặc có thể chuyển đổi ngầm định (compatible).

  3. Thứ tự: Thứ tự các cột phải giống nhau trong cả hai câu lệnh.

Ví dụ thực tế

Giả sử bạn có hai bảng danh sách khách hàng:

  • KhachHang_2023: Danh sách khách mua hàng năm 2023.

  • KhachHang_2024: Danh sách khách mua hàng năm 2024.

Bạn muốn tìm ra những khách hàng trung thành (đã mua hàng ở cả 2 năm).

SQL
-- Lấy ID và Tên khách hàng mua cả 2 năm
SELECT CustomerID, CustomerName
FROM KhachHang_2023
INTERSECT
SELECT CustomerID, CustomerName
FROM KhachHang_2024;

Kết quả: Hệ thống sẽ chỉ trả về danh sách những người có mặt trong cả 2 bảng trên.

Lưu ý quan trọng: INTERSECT mặc định sẽ loại bỏ các dòng trùng lặp (duplicate rows) trong kết quả trả về.

So sánh INTERSECT và INNER JOIN

Đây là câu hỏi phỏng vấn kinh điển: “Sự khác biệt giữa Intersect và Inner Join là gì?”. Cả hai đều dùng để tìm điểm chung, nhưng cách hoạt động lại khác nhau.

So sánh INTERSECT và INNER JOIN
So sánh INTERSECT và INNER JOIN
Tiêu chí INTERSECT INNER JOIN
Cơ chế So sánh trọn vẹn dòng dữ liệu (Row-based comparison). So sánh dựa trên điều kiện ghép nối (thường là khóa ngoại/khóa chính).
Xử lý trùng lặp Tự động loại bỏ các dòng trùng lặp. Giữ nguyên các dòng trùng lặp nếu có nhiều kết quả khớp (trừ khi dùng DISTINCT).
Xử lý NULL Coi hai giá trị NULL là bằng nhau. Thường bỏ qua NULL vì NULL = NULL trả về False (hoặc Unknown).

Khi nào dùng cái nào?

  • Dùng INTERSECT khi bạn muốn so sánh nhanh sự tồn tại của trọn vẹn một dòng dữ liệu giữa hai bảng có cấu trúc giống nhau.

  • Dùng INNER JOIN khi bạn muốn lấy dữ liệu từ các bảng có cấu trúc khác nhau nhưng liên kết qua một khóa (Key), hoặc khi bạn cần lấy cột từ cả hai bảng.

Xem thêm:

Lưu ý về khả năng hỗ trợ (MySQL, PostgreSQL, SQL Server)

Lưu ý về khả năng hỗ trợ
Lưu ý về khả năng hỗ trợ

Không phải hệ quản trị cơ sở dữ liệu (DBMS) nào cũng hỗ trợ INTERSECT giống nhau:

  • SQL Server (T-SQL), PostgreSQL, Oracle: Hỗ trợ đầy đủ INTERSECT.

  • MySQL: Rất tiếc, MySQL không hỗ trợ toán tử INTERSECT trực tiếp.

Giải pháp thay thế cho MySQL:

Nếu bạn dùng MySQL, bạn phải dùng INNER JOIN hoặc IN để mô phỏng:

SQL
-- Mô phỏng Intersect trong MySQL
SELECT DISTINCT t1.col1
FROM table1 t1
INNER JOIN table2 t2 ON t1.col1 = t2.col1;

Intersect trong các ngôn ngữ lập trình khác

Không chỉ SQL, khái niệm Intersect tồn tại trong hầu hết các ngôn ngữ lập trình hiện đại để xử lý mảng hoặc tập hợp (Set).

Intersect trong các ngôn ngữ lập trình khác
Intersect trong các ngôn ngữ lập trình khác

Python (Set Intersection)

Python xử lý việc này cực kỳ đơn giản và mạnh mẽ với kiểu dữ liệu set.

Python
set_a = {1, 2, 3, 4}
set_b = {3, 4, 5, 6}

# Cách 1: Dùng phương thức intersection
result = set_a.intersection(set_b)
# Cách 2: Dùng toán tử &
result_2 = set_a & set_b

print(result) # Kết quả: {3, 4}

C# (LINQ)

Trong .NET, thư viện LINQ cung cấp phương thức Intersect() rất tiện lợi.

C#
int[] list1 = { 1, 2, 3, 4 };
int[] list2 = { 3, 4, 5, 6 };

var common = list1.Intersect(list2);

foreach (var item in common)
{
    Console.WriteLine(item); // Output: 3, 4
}

JavaScript (ES6+)

JavaScript hiện đại có thể mô phỏng intersect bằng filter và includes hoặc dùng Set.

JavaScript
const arr1 = [1, 2, 3, 4];
const arr2 = [3, 4, 5, 6];

// Cách dùng Filter
const intersection = arr1.filter(value => arr2.includes(value));

console.log(intersection); // [3, 4]

Kết luận

Intersect là gì? Intersect là một khái niệm nền tảng trong tư duy lập trình và xử lý dữ liệu. Hiểu rõ Intersect là gì giúp bạn:

  1. Viết câu truy vấn SQL ngắn gọn, hiệu quả hơn để lọc dữ liệu chung.

  2. Hiểu sâu về lý thuyết tập hợp (Set theory).

  3. Lựa chọn giải pháp tối ưu khi so sánh dữ liệu (biết khi nào dùng Intersect, khi nào dùng Join).

Nếu bạn đang làm việc với dữ liệu lớn và cần tìm các bản ghi trùng khớp giữa các tập dữ liệu, hãy nhớ ngay đến Intersect.

Chia sẻ:
Văn Tân
Về Tác Giả ✓ Verified

Văn Tân

Chào bạn, mình là Văn Tân hay còn gọi là Tân Digi - Người sáng lập ra TaSDigital, Tân rất đam mê về công nghệ và thích viết…

Tất cả bài viết

Bình luận (0)

Viết bình luận của bạn

Đánh dấu * là bắt buộc

Báo cáo vi phạm

Báo cáo nội dung

Nếu bạn phát hiện nội dung sai lệch, vi phạm bản quyền hoặc cần cập nhật, vui lòng gửi thông báo cho chúng tôi.

Trợ lý AI TAS Digital
Câu hỏi không được lưu trữ — Chính sách bảo mật

Trợ lý AI TAS Digital — trả lời tức thì 24/7