Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> SQL Server

Toán tử EXCEPT trong SQL Server

Toán tử EXCEPT trong SQL Server được sử dụng để trả về các dòng trong câu lệnh SELECT đầu tiên mà không xuất hiện trong câu lệnh SELECT thứ hai. Mỗi câu SELECT tạo ra một tập dữ liệu riêng biệt; EXCEPT lấy các bản ghi từ tập 1 và loại bỏ những bản ghi trùng khớp với tập 2.

Minh họa truy vấn EXCEPT

Toán tử EXCEPT trong SQL Server
Minh họa truy vấn EXCEPT

Giải thích: Truy vấn EXCEPT trả về các bản ghi ở vùng màu xanh – chỉ có trong tập dữ liệu 1 và không có trong tập dữ liệu 2.

Mỗi câu SELECT trong truy vấn EXCEPT phải có cùng số lượng trường trong tập kết quả và các trường tương ứng phải có cùng kiểu dữ liệu.

Cú pháp toán tử EXCEPT

SELECT bieu_thuc1, bieu_thuc2, … bieu_thucn
FROM bang
[WHERE dieu_kien]
EXCEPT
SELECT bieu_thuc1, bieu_thuc2, … bieu_thucn
FROM bang
[WHERE dieu_kien];

Tham số

bieu_thuc

Cột hoặc giá trị bạn muốn so sánh giữa các câu SELECT. Chúng không cần nằm ở cùng một trường thông tin trong từng câu SELECT, nhưng các cột tương ứng phải chứa cùng loại dữ liệu.

bang

Bảng muốn lấy bản ghi. Phải có ít nhất 1 bảng trong mệnh đề FROM.

WHERE dieu_kien

Tùy chọn. Điều kiện phải thỏa mãn để bản ghi được chọn.

Lưu ý:

  1. Hai câu SELECT phải có cùng số lượng biểu thức.
  2. Cột tương ứng trong mỗi câu SELECT phải có cùng kiểu dữ liệu.
  3. Toán tử EXCEPT trả về tất cả bản ghi từ câu SELECT đầu tiên và không có trong câu SELECT thứ hai.
  4. Toán tử EXCEPT trong SQL Server tương đương với toán tử MINUS trong Oracle.

Ví dụ – với 1 biểu thức

SELECT sanpham_id
FROM sanpham
EXCEPT
SELECT sanpham_id
FROM hangtonkho;

Trong ví dụ này, kết quả trả về tất cả giá trị sanpham_id trong bảng sanpham và không có trong bảng hangtonkho. Điều này có nghĩa là nếu giá trị sanpham_id xuất hiện ở cả hai bảng, nó sẽ không được trả về.

Ví dụ – với nhiều biểu thức

SELECT danhba_id, ho, ten
FROM danhba
WHERE ho = 'Anderson'
EXCEPT
SELECT nhanvien_id, ho, ten
FROM nhanvien;

Truy vấn này trả về các bản ghi trong bảng danhba với ID liên hệ, họ và tên không khớp với ID nhân viên, họ và tên trong bảng nhanvien.

Ví dụ – sử dụng mệnh đề ORDER BY

SELECT nhacung_id, nhacung_ten
FROM nhacung
WHERE bang = 'Florida'
EXCEPT
SELECT congty_id, congty_ten
FROM congty
WHERE congty_id <= 400
ORDER BY 2;

Trong ví dụ này, vì tên cột trong hai câu SELECT khác nhau, dễ dàng hơn khi tham chiếu cột trong mệnh đề ORDER BY thông qua vị trí trong tập kết quả. Ở ví dụ trên, chúng ta sắp xếp kết quả theo nhacung_ten / congty_ten theo thứ tự tăng dần bằng cụm từ ORDER BY 2 vì cột này nằm ở vị trí thứ 2 trong tập kết quả.