EXCEPT trong SQL Server
Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng EXCEPT
trong SQL Server để loại trừ tập kết quả của một truy vấn ra khỏi tập kết quả của một truy vấn khác.
Giới thiệu về EXCEPT trong SQL Server
Toán tử EXCEPT
trong SQL Server so sánh tập hợp kết quả của hai truy vấn và trả về các bản ghi của truy vấn thứ nhất không xuất hiện trong các bản ghi của truy vấn thứ hai.
Nói cách khác, hàm EXCEPT
loại trừ tập kết quả của một truy vấn từ một truy vấn khác.
Sau đây là cú pháp của EXCEPT
trong SQL Server:
query_1
EXCEPT
query_2
Sau đây là các quy tắc để kết hợp tập kết quả của hai truy vấn theo cú pháp trên:
- Số lượng và thứ tự của các cột phải giống nhau trong cả hai truy vấn.
- Các kiểu dữ liệu của các cột tương ứng phải giống nhau hoặc tương thích.
Hình sau cho thấy cách EXCEPT
xử lý hai tập kết quả T1 và T2:
Trong hình minh họa này:
- Tập kết quả T1 bao gồm 1, 2, 3.
- Bộ kết quả T2 bao gồm 2, 3, 4.
except
của T1 và T2 trả về 1, là bản ghi khác biệt với tập kết quả T1 không xuất hiện trong tập kết quả T2.
Ví dụ về toán tử EXCEPT trong SQL Server
Xem bảng products
và order_items
trong cơ sở dữ liệu mẫu BikeStores.
Ví dụ toán tử EXCEPT
đơn giản
Ví dụ sau sử dụng toán tử EXCEPT
để tìm các sản phẩm không có doanh số:
SELECT
product_id
FROM
production.products
EXCEPT
SELECT
product_id
FROM
sales.order_items;
Trong ví dụ này, truy vấn đầu tiên trả về tất cả các sản phẩm. Truy vấn thứ hai trả về các sản phẩm có doanh số bán hàng. Do đó, tập hợp kết quả chỉ bao gồm các sản phẩm không có doanh số.
Ví dụ toán tử EXCEPT
với mệnh đề ORDER BY
trong SQL Server
Để sắp xếp tập hợp kết quả được tạo bởi toán tử EXCEPT
, bạn thêm mệnh đề ORDER BY
trong truy vấn cuối cùng. Ví dụ: ví dụ sau tìm các sản phẩm không có doanh số bán hàng và sắp xếp các sản phẩm theo thứ tự tăng dần theo id của chúng:
SELECT
product_id
FROM
production.products
EXCEPT
SELECT
product_id
FROM
sales.order_items
ORDER BY
product_id;
Trong hướng dẫn này, bạn đã tìm hiểu cách sử dụng toán tử EXCEPT
trong SQL Server để loại trừ tập kết quả của một truy vấn ra khỏi tập kết quả của một truy vấn khác.