Trong SQL Server (Transact-SQL), toán tử INTERSECT được sử dụng để trả về các bản ghi trong cả tập dữ liệu hoặc câu lệnh SELECT. Nếu bản ghi chỉ có sẵn trong một truy vấn và không có trong truy vấn khác, bản ghi đó sẽ bị xóa khỏi tập kết quả của INTERSECT.
Truy vấn INTERSECT
Minh họa kết quả trả về từ truy vấn INTERSECT
Giải thích: Truy vấn INTERSECT sẽ trả về các bản ghi nằm trong vùng tô màu xanh lam. Các bản ghi này nằm trong cả database1 và database2.
Mỗi SELECT trong INTERSECT phải có cùng số cột trong tập kết quả với cùng một kiểu dữ liệu.
Cú pháp toán tử INTERSECT
SELECT bieu_thuc1, bieu_thuc2, … bieu_thucn
FROM bang
[WHERE dieu_kien]
INTERSECT
SELECT bieu_thuc1, bieu_thuc2, … bieu_thucn
FROM bang
[WHERE dieu_kie
n];
Tên biến hoặc giá trị biến
bieu_thuc
Cột hoặc giá trị bạn muốn so sánh giữa các câu lệnh SELECT. Chúng không cần phải nằm trong cùng một trường thông tin tại mỗi câu lệnh SELECT nhưng các cột tương ứng phải có cùng dữ liệu.
trạng thái
Bảng muốn lấy các bản ghi từ đó. Phải có ít nhất 1 bảng trong mệnh đề FROM.
WHERE dieu_kien
Tùy chọn. Các điều kiện phải đáp ứng cho bản ghi đã chọn.
Lưu ý:
- Hai câu lệnh SELECT phải có cùng số lượng biểu thức.
- Cột tương ứng trong mỗi câu lệnh SELECT phải có cùng kiểu dữ liệu.
- Toán tử INTERSECT chỉ trả về bản ghi chung giữa các câu lệnh SELECT.
Ví dụ - với 1 biểu thức
SELECT sanpham_id
FROM sanpham
INTERSECT
SELECT sanpham_id
FROM hangtonk
ho;
Trong ví dụ này, nếu sanpham_id xuất hiện trên cả bảng sanpham và hangtonkho, nó sẽ nằm trong tập kết quả của INTERSECT.
Bây giờ hãy thêm điều kiện WHERE vào truy vấn này.
SELECT sanpham_id
FROM sanpham
WHERE sanpham_id >= 50
INTERSECT
SELECT sanpham_id
FROM hangtonkho
WHERE soluong >
0;
Tập dữ liệu đầu tiên sẽ lọc và trả về các bản ghi trong trang tổng quan và sanpham_id
lớn hơn hoặc bằng 50. Tập dữ liệu thứ hai sẽ lọc từ hangtonkho
bảng nếu số lớn hơn 0.
Ví dụ - với nhiều biểu thức
SELECT danhba_id, ho, ten
FROM danhba
WHERE ho = 'Anderson'
INTERSECT
SELECT nhanvien_id, ho, ten
FROM nh
anvien;
Trong ví dụ này, truy vấn trả về kết quả là giao điểm của hai câu lệnh SELECT. Nếu có một bản ghi trong danh sách danhba
danhba_id
đó , ho
, ten
danhba
danhba_id
, tên của truy vấn INTERSECT sẽ trả về các bản ghi đó.
Ví dụ:sử dụng ORDER BY
Sử dụng mệnh đề ORDER BY với truy vấn INTERSECT để sắp xếp kết quả.
SELECT nhacung_id, nhacung_ten
FROM nhacung
WHERE nhacung_id > 500
INTERSECT
SELECT congty_id, congty_ten
FROM congty
WHERE congty_ten in ('Apple', 'Microsoft', 'SQL Server')
ORDER BY 2;
Vì tên cột trong hai câu lệnh SELECT khác nhau, nên việc tham chiếu cột trong mệnh đề ORDER BY theo vị trí của chúng trong tập kết quả sẽ dễ dàng hơn. Trong ví dụ trên, chúng tôi lọc kết quả nhacung_ten
/ congty_ten
theo thứ tự tăng dần thông qua cụm từ ORDER BY 2.
Vì nhacung_ten
/ congty_ten
là thứ 2 trong tập kết quả.