Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> SQL Server

ยกเว้นตัวดำเนินการใน SQL Server

ตัวดำเนินการ EXCEPT ใน SQL Server ใช้เพื่อส่งคืนแถวในคำสั่ง SELECT แรกซึ่งจะไม่ส่งคืนในคำสั่ง SELECT ที่สอง แต่ละคำสั่ง SELECT จะมีชุดข้อมูล ยกเว้นโอเปอเรเตอร์จะบันทึกจากชุดที่ 1 และนำผลลัพธ์ออกจากชุดที่ 2

ยกเว้นข้อความค้นหา

ยกเว้นตัวดำเนินการใน SQL Server
ยกเว้นภาพประกอบข้อความค้นหา

คำอธิบาย: ยกเว้นข้อความค้นหาส่งคืนระเบียนในพื้นที่สีน้ำเงิน เฉพาะในชุดข้อมูล 1 และไม่ใช่ในชุดข้อมูล 2

คำสั่ง SELECT แต่ละรายการในการสืบค้นข้อมูลยกเว้นจะต้องมีจำนวนฟิลด์เท่ากันในชุดผลลัพธ์ที่มีประเภทข้อมูลเดียวกัน

ยกเว้นไวยากรณ์โอเปอเรเตอร์

  SELECT bieu_thuc1 thuc1, 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

ตัวเลือก ต้องเป็นไปตามเงื่อนไขสำหรับบันทึกที่เลือก

หมายเหตุ:

  1. คำสั่ง SELECT สองรายการต้องมีจำนวนนิพจน์เท่ากัน
  2. คอลัมน์ที่เกี่ยวข้องในแต่ละคำสั่ง SELECT ต้องมีประเภทข้อมูลเหมือนกัน
  3. ตัวดำเนินการ EXCEPT จะคืนค่าระเบียนทั้งหมดจากคำสั่ง SELECT แรก และไม่ใช่ในคำสั่ง SELECT ที่สอง
  4. ตัวดำเนินการ EXCEPT ใน SQL Server เทียบเท่ากับตัวดำเนินการ MINUS ใน Oracle

ตัวอย่างเช่น - มี 1 นิพจน์

  SELECT  sanpham_id 
FROM sanpham
EXCEPT
SELECT sanpham_id
FROM hang tonkho;

ในตัวอย่างที่มีโอเปอเรเตอร์ EXCEPT นี้ ผลลัพธ์จะคืนค่า sanpham_id ทั้งหมดในตารางตัวแปร ไม่ใช่ในตาราง hangtonkho ซึ่งหมายความว่าหากค่า sanpham_id ใช้ได้ทั้งสองตาราง ค่าจะไม่ถูกส่งกลับ

ตัวอย่างเช่น - มีหลายนิพจน์

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

ในตัวอย่างนี้ แบบสอบถามจะส่งกลับระเบียนในตาราง namba ที่มี ID ผู้ติดต่อ ชื่อและนามสกุลไม่ตรงกับ ID ของพนักงาน นามสกุล และชื่อใน ตาราง

ตัวอย่างเช่น ใช้คำสั่ง ORDER BY

  SELECT nh acung_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 ในชุดผลลัพธ์