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.

Nếu tập hợp A là
{1, 2, 3}Và tập hợp B là
{2, 3, 4}Thì
A Intersect Bsẽ 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
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:
Số lượng cột: Số lượng cột trong các câu lệnh
SELECTphải bằng nhau.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).
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).
-- 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:
INTERSECTmặ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.

| 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:
- Param là gì? Cho ví dụ về Param
- EJS là gì? Giải mã Embedded JavaScript Template Engine cho Node.js
Lưu ý về khả năng hỗ trợ (MySQL, PostgreSQL, SQL Server)

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ử
INTERSECTtrự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:
-- 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).

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.
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.
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.
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:
Viết câu truy vấn SQL ngắn gọn, hiệu quả hơn để lọc dữ liệu chung.
Hiểu sâu về lý thuyết tập hợp (Set theory).
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.

Công nghệ tương lai Lập trình/ Code
Portainer Là Gì? Toàn Tập Về Công Cụ Quản Trị Container Hàng Đầu (Hướng Dẫn Chi Tiết)
Sự bùng nổ của công nghệ Container hóa (Containerization) với đầu tàu là Docker
Xem thêmTh3
Công nghệ tương lai Công cụ và hướng dẫn Lập trình/ Code
Helper Là Gì? Bí Quyết Viết Code “Sạch” Và Tối Ưu Trong Lập Trình
Trong thế giới lập trình và phát triển phần mềm, việc phải lặp đi
Xem thêmTh3
Digital Maketing Đồ Họa và Video Xu hướng
Des là gì? Giải mã ý nghĩa của Des trong Thiết kế, SEO, IT & Logistics
Bạn đang lướt mạng xã hội và thấy ai đó bình luận: “Dân Des
Xem thêmTh3