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

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

ใน SQL Server (Transact-SQL) ตัวดำเนินการ INTERSECT จะใช้เพื่อส่งกลับระเบียนในทั้งชุดข้อมูลหรือคำสั่ง SELECT ถ้าระเบียนมีอยู่ในแบบสอบถามเดียวเท่านั้น ระเบียนนั้นจะถูกลบออกจากชุดผลลัพธ์ของ INTERSECT

แบบสอบถาม INTERSECT

ตัวดำเนินการ INTERSECT ใน SQL Server
แสดงภาพประกอบผลลัพธ์จากการสืบค้น INTERSECT

คำอธิบาย: แบบสอบถาม INTERSECT จะส่งกลับระเบียนที่อยู่ในพื้นที่เติมสีน้ำเงิน ระเบียนเหล่านี้อยู่ในทั้งฐานข้อมูล1 และฐานข้อมูล2

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

ไวยากรณ์ตัวดำเนินการ 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];

ชื่อตัวแปรหรือค่าตัวแปร

bieu_thuc

คอลัมน์หรือค่าที่คุณต้องการเปรียบเทียบระหว่างคำสั่ง SELECT ไม่จำเป็นต้องอยู่ในฟิลด์ข้อมูลเดียวกันในแต่ละคำสั่ง SELECT แต่คอลัมน์ที่เกี่ยวข้องจะต้องมีข้อมูลเดียวกัน

ระบุ

Table ต้องการรับระเบียนจากที่นั่น ต้องมีอย่างน้อย 1 ตารางในส่วนคำสั่ง FROM

WHERE dieu_kien

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

หมายเหตุ:

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

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

  SELECT sa npham_id 
FROM sanpham
INTERSECT
SELECT sanpham_id
FROM hangtonk ho;

ในตัวอย่างนี้ ถ้า sanpham_id ปรากฏบนทั้งตาราง sanpham และ hangtonkho จะอยู่ในชุดผลลัพธ์ของ INTERSECT

เพิ่มเงื่อนไข WHERE ให้กับข้อความค้นหานี้

  SELECT sanph am_id 
FROM sanpham
WHERE sanpham_id >= 50
INTERSECT
SELECT sanpham_id
FROM hangtonkho
WHERE soluong > 0;

ชุดข้อมูลแรกจะกรองและส่งคืนระเบียนในแดชบอร์ดและ sanpham_id มากกว่าหรือเท่ากับ 50 ชุดข้อมูลที่สองจะกรองจาก hangtonkho ตารางถ้าตัวเลขมากกว่า 0

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

  SE LECT danhba_id, ho, ten 
FROM danhba
WHERE ho = 'Anderson'
INTERSECT
SELECT nhanvien_id, ho, ten
FROM nh anvien;

ในตัวอย่างนี้ เคียวรีส่งคืนผลลัพธ์ของการตัดกันของคำสั่ง SELECT สองคำสั่ง หากมีบันทึกอยู่ในรายการ danhba นั้น danhba_id , ho , ten danhba danhba_id ชื่อของแบบสอบถาม INTERSECT จะส่งคืนระเบียนเหล่านั้น

ตัวอย่างเช่น - ใช้ ORDER BY

ใช้คำสั่งย่อย ORDER BY กับคำสั่ง INTERSECT เพื่อจัดเรียงผลลัพธ์

  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;

เนื่องจากชื่อคอลัมน์ในคำสั่ง SELECT สองคำสั่งต่างกัน การอ้างอิงคอลัมน์ในส่วนคำสั่ง ORDER BY จะง่ายกว่าตามตำแหน่งในชุดผลลัพธ์ ในตัวอย่างข้างต้น เรากรองผลลัพธ์ nhacung_ten / congty_ten เรียงจากน้อยไปมากโดยใช้วลี ORDER BY 2

เพราะว่า nhacung_ten / congty_ten เป็นที่ 2 ในชุดผลลัพธ์