Câu trả lời nhanh: Cách dùng SQL MINUS
Toán tử SQL MINUS trừ một tập kết quả khỏi tập khác, chỉ trả về các hàng duy nhất từ tập thứ nhất mà không xuất hiện trong tập thứ hai.
Giả sử chúng ta có hai bảng nhân viên, một của năm 2023 và một của năm 2024. Ta muốn tìm xem những nhân viên nào có trong Employees2023 nhưng không có trong Employees2024. Ta có thể dùng câu lệnh SQL MINUS để có câu trả lời.
SELECT EmployeeID, Name, Department
FROM Employees2023
MINUS
SELECT EmployeeID, Name, Department
FROM Employees2024;
Employees2023:
| EmployeeID | Name | Department |
|------------|---------|------------|
| 1 | Alice | HR |
| 2 | Bob | IT |
| 3 | Charlie | Sales |
| 4 | David | IT |
Employees2024:
| EmployeeID | Name | Department |
|------------|---------|------------|
| 2 | Bob | IT |
| 3 | Charlie | Sales |
| 4 | David | IT |
| 5 | Eve | Marketing |
Expected Output:
| EmployeeID | Name | Department |
|------------|-------|------------|
| 1 | Alice | HR |
SQL MINUS là gì?
Toán tử SQL MINUS so sánh hai câu lệnh SELECT và trả về các hàng từ câu lệnh SELECT thứ nhất không xuất hiện trong câu lệnh thứ hai. Cụ thể, nó thực hiện phép hiệu tập hợp, rất quan trọng cho nhiều tác vụ phân tích dữ liệu. Điều này đặc biệt hữu ích cho công việc làm sạch, kiểm chứng và hợp nhất dữ liệu, nơi chúng ta cần chỉ ra các sai khác giữa các tập dữ liệu.
Cú pháp của toán tử SQL MINUS
Cú pháp cơ bản của toán tử MINUS như sau:
SELECT column1, column2, ...
FROM table1
MINUS
SELECT column1, column2, ...
FROM table2;
Các thành phần của truy vấn gồm:
- Câu lệnh SELECT: Câu lệnh
SELECTchỉ định các cột mong muốn và bảng cần truy xuất. - Toán tử MINUS: Toán tử
MINUStrừ tập kết quả thứ hai khỏi tập thứ nhất. - Các thành phần tùy chọn như mệnh đề
WHEREcó thể được thêm để lọc dữ liệu.
SELECT column1, column2, ...
FROM table1
WHERE condition
MINUS
SELECT column1, column2, ...
FROM table2
WHERE condition;
Những điểm quan trọng cần nhớ
Để dùng toán tử MINUS đúng cách, hãy lưu ý các điểm then chốt sau:
- Cả hai câu lệnh
SELECTphải có cùng số lượng cột. - Kiểu dữ liệu của các cột tương ứng phải giống nhau.
- Mặc dù tên cột không bắt buộc phải giống hệt nhau, nhưng kiểu dữ liệu phải tương thích.
MINUSloại bỏ các hàng trùng lặp khỏi tập kết quả cuối cùng, chỉ trả về các hàng phân biệt.
Ví dụ thực tiễn
Giờ hãy cùng xem một số ví dụ thực tế để củng cố hiểu biết của chúng ta.
Ví dụ với một biểu thức duy nhất
Chúng ta dùng truy vấn sau để tìm các phòng ban duy nhất năm 2019 không xuất hiện trong năm 2020:
SELECT Department
FROM Employees2019
MINUS
SELECT Department
FROM Employees2020;
Ví dụ với mệnh đề ORDER BY
Chúng ta dùng truy vấn sau để lấy danh sách nhân viên duy nhất năm 2019, sắp xếp theo tên:
SELECT EmployeeName
FROM Employees2019
MINUS
SELECT EmployeeName
FROM Employees2020
ORDER BY EmployeeName;
Các trường hợp sử dụng phổ biến của toán tử MINUS
Toán tử SQL MINUS là một công cụ linh hoạt có thể áp dụng trong nhiều bối cảnh để cải thiện phân tích và quản trị dữ liệu. Dưới đây là một số trường hợp sử dụng thường gặp nơi MINUS đặc biệt hữu ích.
Kiểm chứng dữ liệu trong quy trình ETL
Đảm bảo tính nhất quán và chính xác của dữ liệu trong các quy trình ETL (Extract, Transform, Load). Toán tử MINUS có thể kiểm chứng dữ liệu bằng cách so sánh tập nguồn và tập đích.
Hãy xem một ví dụ. Để xác thực rằng mọi bản ghi từ bảng tạm đã được nạp vào bảng cuối, chúng ta có thể dùng truy vấn sau:
SELECT *
FROM StagingTable
MINUS
SELECT *
FROM FinalTable;
Xác định dữ liệu thiếu giữa hai tập dữ liệu
Khi hợp nhất dữ liệu từ nhiều nguồn, cần xác định mọi bản ghi còn thiếu để đảm bảo tính đầy đủ:
SELECT CustomerID
FROM SourceA
MINUS
SELECT CustomerID
FROM SourceB;
Hạn chế và các lựa chọn thay thế
Mặc dù toán tử SQL MINUS là công cụ mạnh để so sánh các tập dữ liệu, nó có một số hạn chế và không phải lúc nào cũng là lựa chọn tốt nhất cho mọi tình huống. Hiểu rõ các hạn chế này và biết các lựa chọn thay thế sẽ giúp chúng ta đưa ra quyết định tốt hơn khi làm việc với truy vấn SQL.
- Không được mọi hệ quản trị hỗ trợ: Toán tử
MINUSkhông được hỗ trợ phổ quát trên tất cả các hệ quản trị cơ sở dữ liệu SQL. Trong khi Oracle hỗ trợ, SQL Server không hỗ trợ và dùng toán tửEXCEPT. - Yêu cầu về cột và kiểu dữ liệu: Cả hai câu lệnh
SELECTdùng vớiMINUSphải có cùng số cột, và các cột tương ứng phải có kiểu dữ liệu tương thích. Điều này có thể hạn chế khi làm việc với các truy vấn phức tạp liên quan nhiều tập dữ liệu khác nhau. - Phân biệt chữ hoa/thường: Toán tử
MINUScó phân biệt chữ hoa/thường. Ví dụ, 'Apple' và 'apple' được coi là hai giá trị khác nhau. Nếu không tính đến yếu tố này, có thể dẫn đến kết quả ngoài ý muốn. - Không sắp xếp: Tập kết quả trả về bởi
MINUSkhông được sắp xếp. Nếu cần thứ tự cụ thể, phải dùng thêm mệnh đềORDER BY. - Vấn đề hiệu năng: Toán tử
MINUScó thể chậm khi xử lý các tập dữ liệu lớn, vì phải so sánh toàn bộ giữa hai tập kết quả. Điều này có thể gây nút thắt hiệu năng trong các ứng dụng quy mô lớn.
Một lựa chọn thay thế cho MINUS là toán tử EXCEPT, có chức năng tương tự và được hỗ trợ rộng rãi trên nhiều cơ sở dữ liệu SQL.
- MINUS: Chuẩn trong Oracle và một số cơ sở dữ liệu khác.
- EXCEPT: Chuẩn trong SQL Server, PostgreSQL và các cơ sở dữ liệu khác.
Kết luận
Hiểu toán tử SQL MINUS là điều quan trọng để truy vấn và thao tác dữ liệu hiệu quả. Toán tử này giúp chúng ta xác định các hàng duy nhất giữa hai tập dữ liệu, rất hữu ích cho các tác vụ kiểm chứng, làm sạch và hợp nhất dữ liệu. Hãy luyện tập với nhiều tập dữ liệu khác nhau để thành thạo MINUS và nâng cao kỹ năng SQL của bạn.
Nếu bạn thực sự muốn cải thiện kỹ năng SQL, hãy học một khóa của DataCamp như Introduction to SQL. Khóa học này cung cấp nền tảng vững chắc cho các chủ đề nâng cao hơn. Nếu bạn thấy mình đã nắm tốt những kiến thức cơ bản, hãy thử khóa Intermediate SQL, khóa học đào sâu hơn vào các phức tạp của SQL, bao gồm các phép toán tập hợp như MINUS.

Nhà viết nội dung về công nghệ, chuyên về AI, ML và khoa học dữ liệu, giúp làm rõ và phổ biến những ý tưởng phức tạp.
Câu hỏi thường gặp
Toán tử SQL MINUS được dùng để làm gì?
Toán tử SQL MINUS được dùng để trừ một tập kết quả khỏi tập khác, chỉ trả về các hàng duy nhất từ tập thứ nhất không xuất hiện trong tập thứ hai.
Yêu cầu cú pháp khi dùng toán tử SQL MINUS là gì?
Cả hai câu lệnh SELECT trong phép MINUS phải có cùng số cột, và kiểu dữ liệu của các cột tương ứng phải giống nhau.
Toán tử SQL MINUS có thể dùng trong mọi cơ sở dữ liệu SQL không?
Không, toán tử MINUS không được hỗ trợ trong tất cả các cơ sở dữ liệu SQL. Ví dụ, MySQL không hỗ trợ nhưng Oracle có.
Một số trường hợp sử dụng phổ biến của toán tử SQL MINUS là gì?
Các trường hợp phổ biến gồm kiểm chứng dữ liệu trong quy trình ETL, xác định dữ liệu thiếu giữa hai tập dữ liệu, và làm sạch cũng như hợp nhất dữ liệu từ nhiều nguồn.
Sự khác nhau giữa toán tử SQL MINUS và EXCEPT là gì?
Toán tử MINUS chủ yếu được dùng trong Oracle và một số CSDL khác, còn EXCEPT có chức năng tương tự và được dùng trong SQL Server, PostgreSQL và các CSDL khác. Cả hai đều trả về các hàng duy nhất từ câu lệnh SELECT thứ nhất không có trong câu lệnh thứ hai.
Toán tử SQL MINUS khác gì so với anti join?
Toán tử MINUS trong SQL được dùng để trả về tất cả các hàng trong truy vấn thứ nhất không xuất hiện trong truy vấn thứ hai. Đây là một phép toán tập hợp so sánh kết quả của hai truy vấn và trả về phần chênh lệch. Trong khi đó, anti join là một kiểu join trả về các hàng từ bảng thứ nhất khi không tồn tại hàng khớp trong bảng thứ hai. Điều này có thể được triển khai bằng cách dùng LEFT JOIN kết hợp với mệnh đề WHERE để lọc ra các hàng không thỏa điều kiện join.
Trong SQL, toán tử
MINUSlà một công cụ mạnh để trừ một tập kết quả khỏi tập khác. Toán tử này rất cần thiết trong các tình huống khi chúng ta phải xác định các hàng duy nhất có trong một tập dữ liệu nhưng không có trong tập khác.Trong bài viết này, chúng ta sẽ tìm hiểu mục đích, cú pháp và các ứng dụng thực tiễn của toán tử SQL
MINUS, từ đó nắm vững cách truy vấn và thao tác dữ liệu hiệu quả.