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

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

ตัวดำเนินการ EXCEPT ใน SQL Server คืออะไร?

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

การทำงานของ EXCEPT

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

ภาพประกอบ: EXCEPT ส่งคืนเฉพาะข้อมูลในพื้นที่สีฟ้า (อยู่ในชุดข้อมูล 1 แต่ไม่อยู่ในชุดข้อมูล 2)

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

รูปแบบคำสั่ง (Syntax)

SELECT expression1, expression2, ... expression_n
FROM table_name
[WHERE condition]
EXCEPT
SELECT expression1, expression2, ... expression_n
FROM table_name
[WHERE condition];

คำอธิบายพารามิเตอร์

  • expression: คอลัมน์หรือค่าที่ต้องการเปรียบเทียบระหว่างคำสั่ง SELECT ไม่จำเป็นต้องเป็นฟิลด์เดียวกัน แต่คอลัมน์ที่ตรงกันต้องมีชนิดข้อมูลเหมือนกัน
  • table_name: ตารางที่ต้องการดึงข้อมูล ต้องมีอย่างน้อย 1 ตารางในคำสั่ง FROM
  • WHERE condition: เงื่อนไขเลือกแถว (ไม่บังคับ)

ข้อสังเกต

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

ตัวอย่างการใช้งาน

1. ใช้กับ Expression เดียว

SELECT sanpham_id
FROM sanpham
EXCEPT
SELECT sanpham_id
FROM hangtonkho;

ผลลัพธ์จะคืนค่า sanpham_id ที่มีในตาราง sanpham แต่ไม่มีใน hangtonkho หากค่าใดมีในทั้งสองตาราง จะไม่ถูกส่งคืน

2. ใช้กับหลาย Expressions

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

คืนแถวจากตาราง danhba ที่มี ID, นามสกุล, ชื่อ ไม่ตรงกับแถวใดๆ ในตาราง nhanvien

3. ใช้ร่วมกับ 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 ต่างกัน จึงใช้ตำแหน่งในชุดผลลัพธ์แทน (2 = คอลัมน์ที่สอง คือ nhacung_ten/congty_ten) เพื่อจัดเรียงลำดับ