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

คำสั่งย่อย (Subquery) ใน SQL Server

Subquery ใน SQL Server คืออะไร?

ใน SQL Server Subquery (คำสั่งย่อย) คือคำสั่ง SELECT ที่ซ้อนอยู่ภายในคำสั่ง SQL อื่น สามารถวางได้ในส่วน WHERE, FROM หรือ SELECT

คำศัพท์:

  • Subquery เรียกอีกอย่างว่า INNER QUERY หรือ INNER SELECT
  • คำสั่งหลักที่ครอบ Subquery เรียกว่า OUTER QUERY หรือ OUTER SELECT

1. Subquery ในส่วน WHERE

รูปแบบทั่วไปที่สุด เรียกว่า Nested Query

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

ส่วน Subquery (อยู่ในวงเล็บ) จะหา 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;

2. Subquery ในส่วน FROM (Derived Table)

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

Subquery ใน FROM ต้องมี alias (ที่นี่คือ truyvancon1) เพื่ออ้างอิงคอลัมน์ภายหลัง

3. Subquery ในส่วน SELECT (Scalar Subquery)

ใช้เมื่อต้องการคำนวณแบบรวม (SUM, COUNT, MIN, MAX) โดยไม่รวมใน GROUP BY ของคำสั่งหลัก

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

Subquery นี้ต้องคืนค่า เพียงค่าเดียว (single value) จึงมักใช้ฟังก์ชันรวม

สรุป

  • Subquery ใน WHERE: กรองข้อมูล
  • Subquery ใน FROM: สร้างตารางชั่วคราว (ต้องมี alias)
  • Subquery ใน SELECT: คำนวณค่าเดี่ยวต่อแถว (ต้องคืนค่า unique)
  • มักเขียนแทนด้วย JOIN ได้ และ JOIN มักมีประสิทธิภาพดีกว่า