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

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

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

คิวรี่ INTERSECT

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

คำอธิบาย: คิวรี่ INTERSECT จะคืนค่าระเบียนที่อยู่ในพื้นที่สีฟ้า ระเบียนเหล่านี้มีอยู่ในทั้ง database1 และ database2

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

ไวยากรณ์ตัวดำเนินการ INTERSECT

SELECT bieu_thuc1, bieu_thuc2, ... bieu_thucn
FROM bang
[WHERE dieu_kien]
INTERSECT
SELECT bieu_thuc1, bieu_thuc2, ... bieu_thucn
FROM bang
[WHERE dieu_kien];

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

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

bang: ตารางที่ต้องการดึงระเบียน ต้องมีอย่างน้อย 1 ตารางในคำสั่ง FROM

WHERE dieu_kien: ทางเลือก เงื่อนไขที่ต้องเป็นไปตามสำหรับระเบียนที่เลือก

หมายเหตุ:

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

ตัวอย่าง - กับ 1 นิพจน์

SELECT sanpham_id
FROM sanpham
INTERSECT
SELECT sanpham_id
FROM hangtonkho;

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

ตอนนี้เพิ่มเงื่อนไข WHERE เข้าไปในคิวรี่นี้

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

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

ตัวอย่าง - กับหลายนิพจน์

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

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

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

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

SELECT nhacungcap_id, nhacungcap_ten
FROM nhacungcap
WHERE nhacungcap_id > 500
INTERSECT
SELECT congty_id, congty_ten
FROM congty
WHERE congty_ten IN ('Apple', 'Microsoft', 'SQL Server')
ORDER BY 2;

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

เนื่องจาก nhacungcap_ten/congty_ten เป็นตัวที่ 2 ในชุดผลลัพธ์