Computer >> Máy Tính >  >> Lập trình >> SQL Server

Toán tử INTERSECT trong SQL Server

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

Toán tử INTERSECT trong SQL Server
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 b ieu_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 ý:

  1. Hai câu lệnh SELECT phải có cùng số lượng biểu thức.
  2. Cột tương ứng trong mỗi câu lệnh SELECT phải có cùng kiểu dữ liệu.
  3. 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 sa npham_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 sanph am_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

  SE LECT 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 nhacun g_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.

nhacung_ten / congty_ten là thứ 2 trong tập kết quả.