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

ค้นหา SUBQUERY ลูกใน SQL Server

บทความต่อไปนี้จะแสดงวิธีใช้แบบสอบถามย่อยใน SQL Server พร้อมกับไวยากรณ์และตัวอย่าง

คิวรีย่อยใน SQL คืออะไร (เคียวรีย่อย)

ใน SQL Server คิวรีย่อยคือคิวรีที่อยู่ในคิวรีอื่น คุณสามารถสร้างแบบสอบถามในคำสั่ง SQL แบบสอบถามย่อยเหล่านี้อยู่ในส่วนคำสั่ง WHERE, FROM หรือ SELECT

หมายเหตุ:

  1. แบบสอบถามย่อยเรียกอีกอย่างว่า INNER QUERY หรือ INNER SELECT
  2. แบบสอบถามหลักที่มีแบบสอบถามย่อยเรียกว่า OUTER QUERY หรือ OUTER SELECT

ส่วนคำสั่งไหน

โดยปกติแบบสอบถามย่อยจะอยู่ในส่วนคำสั่ง WHERE แบบสอบถามย่อยเหล่านี้เรียกว่าการสืบค้นข้อมูลที่ซ้อนกันหรือแบบสอบถามย่อย

  SELECT s.sanph am_id, s.sanpham_ten 
FROM sanpham s
WHERE s.sanpham_id IN
(SELECT htk.sanpham_id
FROM hangtonkho htk
WHERE htk.soluong > 10);

นี่คือส่วนข้อความค้นหาย่อยในคำสั่ง SELECT ด้านบน:

  (SELECT htk.sanp ham_id 
FROM hangtonkho htk
WHERE htk.soluong > 10);

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

แบบสอบถามย่อยสามารถเขียนเป็น INNER JOIN ดังที่แสดงด้านล่าง

  SELECT s.sanpham_id, s. sanpham_ten 
FROM sanpham s
INNER JOIN hangtonkho htk
ON s.sanpham_id = htk.sanpham_id
WHERE htk.soluong > 10;

INNER JOIN จะแสดงผลอย่างมีประสิทธิภาพมากกว่าการสืบค้นย่อยเดิม โปรดทราบด้วยว่า JOIN จะไม่มีการสืบค้นใดๆ ใหม่

ส่วนคำสั่ง FROM

  SELECT nhacu ng.nhacung_ten, truyvancon1.tong_sl 
FROM nhacung,
(SELECT nhacung_id, SUM(donhang.soluong) AS tong_sl
FROM donhang
GROUP BY nhacung_id) truyvancon1
WHERE truyvanco n1.nhacung_id = nhacung.nhacung_id;

ในตัวอย่างนี้ เราได้สร้างแบบสอบถามย่อยในส่วนคำสั่ง FROM ดังนี้:

  (SELECT nhacung _id, SUM(donhang.soluong) AS tong_sl 
FROM donhang
GROUP BY nhacung _id) truyvancon1

แบบสอบถามย่อยนี้เชื่อมโยงกับนามแฝง truyvancon1 ด้วย นี่จะเป็นชื่อที่ใช้เพื่ออ้างถึงข้อความค้นหาย่อยนี้หรือฟิลด์ข้อมูลใดๆ

ส่วนคำสั่ง SELECT

โดยปกติเคียวรีย่อยจะถูกตั้งค่าในส่วนคำสั่ง SELECT เพื่อคำนวณโดยฟังก์ชันผลรวม เช่น SUM, COUNT, MIN หรือ MAX แต่ไม่ต้องการนับในการสืบค้นหลัก

พี>
  SELECT n1.ho, n1 .ten, 
(SELECT MAX(luong)
FROM nhanvien n2
WHERE n1.nhanvien_id = n2.nhanvien_id) truyvancon2
FROM nhanvien n1 ;

ด้านล่างคือข้อความค้นหาย่อยที่สร้างขึ้นในตัวอย่างด้านบน

  (SELECT MAX ong) 
FROM nhanvien n2
WHERE n1.nhanvie n_id = n2.nhanvien_id) truyvancon2

แบบสอบถามย่อยนี้เชื่อมโยงกับนามแฝง truyvancon2 ด้วย นี่จะเป็นชื่อที่ใช้เพื่ออ้างถึงข้อความค้นหาย่อยนี้หรือฟิลด์ข้อมูลใดๆ

เคล็ดลับในการวางเคียวรีย่อยในส่วนคำสั่ง SELECT ถูกใช้เพราะว่าเคียวรีย่อยคืนค่าเพียงค่าเดียว นั่นเป็นสาเหตุที่ฟังก์ชันผลรวมเช่น SUM, COUNT, MIN หรือ MAX มักใช้ในแบบสอบถามย่อย