ตัวดำเนินการ EXCEPT ใน SQL Server ใช้เพื่อส่งคืนแถวในคำสั่ง SELECT แรกซึ่งจะไม่ส่งคืนในคำสั่ง SELECT ที่สอง แต่ละคำสั่ง SELECT จะมีชุดข้อมูล ยกเว้นโอเปอเรเตอร์จะบันทึกจากชุดที่ 1 และนำผลลัพธ์ออกจากชุดที่ 2
ยกเว้นข้อความค้นหา
ยกเว้นภาพประกอบข้อความค้นหา
คำอธิบาย: ยกเว้นข้อความค้นหาส่งคืนระเบียนในพื้นที่สีน้ำเงิน เฉพาะในชุดข้อมูล 1 และไม่ใช่ในชุดข้อมูล 2
คำสั่ง SELECT แต่ละรายการในการสืบค้นข้อมูลยกเว้นจะต้องมีจำนวนฟิลด์เท่ากันในชุดผลลัพธ์ที่มีประเภทข้อมูลเดียวกัน
ยกเว้นไวยากรณ์โอเปอเรเตอร์
SELECT bieu_thuc1thuc1, bieu_thuc2, … bieu_thucn
FROM bang
[WHERE dieu_kien]
EXCEPT
SELECT bieu_thuc1, bieu_thuc2, … bieu_thucn
FROM bang
[WHERE dieu_kie
n];
ชื่อตัวแปรหรือค่าตัวแปร
bieu_thuc
คอลัมน์หรือค่าที่คุณต้องการเปรียบเทียบระหว่างคำสั่ง SELECT ไม่จำเป็นต้องอยู่ในฟิลด์ข้อมูลเดียวกันในแต่ละคำสั่ง SELECT แต่คอลัมน์ที่เกี่ยวข้องจะต้องมีข้อมูลเดียวกัน
ระบุ
Table ต้องการรับระเบียนจากที่นั่น ต้องมีอย่างน้อย 1 ตารางในส่วนคำสั่ง FROM
WHERE dieu_kien
ตัวเลือก ต้องเป็นไปตามเงื่อนไขสำหรับบันทึกที่เลือก
หมายเหตุ:
- คำสั่ง SELECT สองรายการต้องมีจำนวนนิพจน์เท่ากัน
- คอลัมน์ที่เกี่ยวข้องในแต่ละคำสั่ง SELECT ต้องมีประเภทข้อมูลเหมือนกัน
- ตัวดำเนินการ EXCEPT จะคืนค่าระเบียนทั้งหมดจากคำสั่ง SELECT แรก และไม่ใช่ในคำสั่ง SELECT ที่สอง
- ตัวดำเนินการ EXCEPT ใน SQL Server เทียบเท่ากับตัวดำเนินการ MINUS ใน Oracle
ตัวอย่างเช่น - มี 1 นิพจน์
SELECTsanpham_id
FROM sanpham
EXCEPT
SELECT sanpham_id
FROM hang
tonkho;
ในตัวอย่างที่มีโอเปอเรเตอร์ EXCEPT นี้ ผลลัพธ์จะคืนค่า sanpham_id ทั้งหมดในตารางตัวแปร ไม่ใช่ในตาราง hangtonkho ซึ่งหมายความว่าหากค่า sanpham_id ใช้ได้ทั้งสองตาราง ค่าจะไม่ถูกส่งกลับ
ตัวอย่างเช่น - มีหลายนิพจน์
SELECT danhba_id, ho, ten
FROM danhba
WHERE ho = 'Anderson'
EXCEPT
SELECT nhanvien_id, ho, ten
FROM nhanvien
;
ในตัวอย่างนี้ แบบสอบถามจะส่งกลับระเบียนในตาราง namba ที่มี ID ผู้ติดต่อ ชื่อและนามสกุลไม่ตรงกับ ID ของพนักงาน นามสกุล และชื่อใน ตาราง
ตัวอย่างเช่น ใช้คำสั่ง 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;
ในตัวอย่างนี้ เนื่องจากชื่อคอลัมน์ในคำสั่ง SELECT สองคำสั่งต่างกัน จึงง่ายกว่าที่จะอ้างอิงคอลัมน์โดยใช้คำสั่งย่อย ORDER BY ผ่านตำแหน่งในชุดผลลัพธ์ ในตัวอย่างข้างต้น เรากรองผลลัพธ์ nhacung_ten / congty_ten ตามลำดับจากน้อยไปมากโดยใช้วลี ORDER BY 2
เนื่องจาก nhacung_ten / congty_ten เป็นที่ 2 ในชุดผลลัพธ์