T-SQL - แบบสอบถามย่อย
ก sub-query หรือ Inner query หรือ Nested queryเป็นแบบสอบถามภายในแบบสอบถาม SQL Server อื่นและฝังอยู่ภายในส่วนคำสั่ง WHERE แบบสอบถามย่อยใช้เพื่อส่งคืนข้อมูลที่จะใช้ในแบบสอบถามหลักเป็นเงื่อนไขในการ จำกัด ข้อมูลที่จะเรียกเพิ่มเติม
แบบสอบถามย่อยสามารถใช้กับคำสั่ง SELECT, INSERT, UPDATE และ DELETE พร้อมกับตัวดำเนินการเช่น =, <,>,> =, <=, IN, BETWEEN เป็นต้น
มีกฎสองสามข้อที่การสืบค้นย่อยต้องปฏิบัติตาม -
คุณต้องใส่เคียวรีย่อยในวงเล็บ
การสืบค้นย่อยต้องมีส่วนคำสั่ง SELECT และส่วนคำสั่ง FROM
การสืบค้นย่อยอาจรวมถึงคำสั่ง WHERE, GROUP BY และ HAVING ที่เป็นทางเลือก
แบบสอบถามย่อยไม่สามารถรวมส่วนคำสั่ง COMPUTE หรือ FOR BROWSE ได้
คุณสามารถรวมคำสั่ง ORDER BY ได้ก็ต่อเมื่อรวมคำสั่ง TOP
คุณสามารถซ้อนคิวรีย่อยได้ถึง 32 ระดับ
แบบสอบถามย่อยที่มีคำสั่ง SELECT
ไวยากรณ์
แบบสอบถามย่อยมักใช้กับคำสั่ง SELECT ต่อไปนี้เป็นไวยากรณ์พื้นฐาน
SELECT column_name [, column_name ]
FROM table1 [, table2 ]
WHERE column_name OPERATOR
(SELECT column_name [, column_name ]
FROM table1 [, table2 ]
[WHERE])
ตัวอย่าง
พิจารณาตารางลูกค้าที่มีระเบียนต่อไปนี้
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
ให้เราใช้แบบสอบถามย่อยต่อไปนี้กับคำสั่ง SELECT
SELECT *
FROM CUSTOMERS
WHERE ID IN (SELECT ID FROM CUSTOMERS WHERE SALARY > 4500)
คำสั่งดังกล่าวจะสร้างผลลัพธ์ต่อไปนี้
ID NAME AGE ADDRESS SALARY
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
7 Muffy 24 Indore 10000.00
แบบสอบถามย่อยที่มีคำสั่ง INSERT
แบบสอบถามย่อยยังสามารถใช้กับคำสั่ง INSERT คำสั่ง INSERT ใช้ข้อมูลที่ส่งกลับจากเคียวรีย่อยเพื่อแทรกลงในตารางอื่น ข้อมูลที่เลือกในแบบสอบถามย่อยสามารถแก้ไขได้ด้วยฟังก์ชันอักขระวันที่หรือตัวเลขใด ๆ
ไวยากรณ์
ต่อไปนี้เป็นไวยากรณ์พื้นฐาน
INSERT INTO table_name [ (column1 [, column2 ]) ]
SELECT [ *|column1 [, column2 ]
FROM table1 [, table2 ]
[ WHERE VALUE OPERATOR ]
ตัวอย่าง
พิจารณาตาราง CUSTOMERS_BKP ที่มีโครงสร้างคล้ายกับตาราง CUSTOMERS ต่อไปนี้เป็นไวยากรณ์ในการคัดลอกตาราง CUSTOMERS ทั้งหมดไปยัง CUSTOMERS_BKP
INSERT INTO CUSTOMERS_BKP
SELECT * FROM CUSTOMERS
WHERE ID IN (SELECT ID FROM CUSTOMERS)
แบบสอบถามย่อยพร้อมคำชี้แจง UPDATE
สามารถใช้แบบสอบถามย่อยร่วมกับคำสั่ง UPDATE สามารถอัปเดตคอลัมน์เดียวหรือหลายคอลัมน์ในตารางได้เมื่อใช้แบบสอบถามย่อยกับคำสั่ง UPDATE
ไวยากรณ์
ต่อไปนี้เป็นไวยากรณ์พื้นฐาน
UPDATE table
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
(SELECT COLUMN_NAME
FROM TABLE_NAME)
[ WHERE) ]
ตัวอย่าง
สมมติว่าเรามีตาราง CUSTOMERS_BKP ซึ่งเป็นข้อมูลสำรองของตาราง CUSTOMERS
ตัวอย่างคำสั่งต่อไปนี้จะอัปเดต SALARY 0.25 เท่าในตาราง CUSTOMERS สำหรับลูกค้าทั้งหมดที่มี AGE มากกว่าหรือเท่ากับ 27
UPDATE CUSTOMERS
SET SALARY = SALARY * 0.25
WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP WHERE AGE >= 27 )
สิ่งนี้จะส่งผลกระทบต่อสองแถวและในที่สุดตารางลูกค้าจะมีบันทึกต่อไปนี้
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 500.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 2125.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
แบบสอบถามย่อยที่มีคำสั่ง DELETE
แบบสอบถามย่อยสามารถใช้ร่วมกับคำสั่ง DELETE เช่นเดียวกับข้อความอื่น ๆ ที่กล่าวถึงข้างต้น
ไวยากรณ์
ต่อไปนี้เป็นไวยากรณ์พื้นฐาน
DELETE FROM TABLE_NAME
[ WHERE OPERATOR [ VALUE ]
(SELECT COLUMN_NAME
FROM TABLE_NAME)
[ WHERE) ]
ตัวอย่าง
สมมติว่าเรามีตาราง CUSTOMERS_BKP ซึ่งเป็นข้อมูลสำรองของตาราง CUSTOMERS
ตัวอย่างคำสั่งต่อไปนี้จะลบเร็กคอร์ดจากตาราง CUSTOMERS สำหรับลูกค้าทั้งหมดที่มี AGE มากกว่าหรือเท่ากับ 27
DELETE FROM CUSTOMERS
WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP WHERE AGE >=27 )
สิ่งนี้จะส่งผลกระทบต่อสองแถวและในที่สุดตารางลูกค้าจะมีบันทึกต่อไปนี้
ID NAME AGE ADDRESS SALARY
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00