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

SQL Subquery: คู่มือฉบับสมบูรณ์

SQL subquery คือคิวรี่ภายในคิวรี่อีกคิวรี่หนึ่ง ใช้ใน clause WHERE หรือ HAVING ของคำสั่ง SQL Subqueries ให้คุณระบุผลลัพธ์ของคิวรี่หนึ่งเป็นอาร์กิวเมนต์ในอีกคิวรี่หนึ่ง

เมื่อเขียนคิวรี่ SQL คุณอาจต้องการกำหนดพารามิเตอร์จากผลลัพธ์ของคิวรี่อื่น เช่น มีรายชื่อลูกค้า ต้องการลูกค้าที่สั่งซื้อมูลค่าเกินจำนวนหนึ่ง ข้อมูลออเดอร์และลูกค้าอยู่ในตารางต่างกัน

นี่คือที่มาของ SQL subquery Subqueries (หรือ nested queries) คือคำสั่ง SELECT ภายใน clause WHERE ของคิวรี่ SQL อีกคำสั่ง คิวรี่หลักจะใช้ผลลัพธ์ของ subquery

ในบทช่วยสอนนี้ เราจะอธิบายวิธีใช้ subqueries ใน SQL พร้อมตัวอย่าง

SQL Subquery: คู่มือ

SQL subquery คือคิวรี่ภายในคิวรี่อีกคิวรี่ ใช้เมื่อต้องการรันคิวรี่ที่ขึ้นอยู่กับผลลัพธ์ของอีกคิวรี่ Subqueries ช่วยทำได้โดยไม่ต้องเขียน 2 คิวรี่แยกกันและ copy-paste ผลลัพธ์ Subqueries ปรากฏใน clause WHERE หรือ HAVING

ไวยากรณ์ subquery ในคำสั่ง SQL SELECT:

SELECT name FROM products WHERE supplier_id IN (SELECT id FROM suppliers WHERE local = True);

คิวรี่นี้เลือกชื่อสินค้าทั้งหมดที่จัดส่งโดยบริษัทท้องถิ่น เราใช้ subquery เป็น input ของคำสั่ง SQL IN คำสั่ง IN คืนเรคอร์ดทั้งหมดจากตาราง "products" ที่ supplier_id อยู่ในผลลัพธ์ของ subquery

เราสามารถใช้ subqueries ในคำสั่ง INSERT, UPDATE, และ DELETE ได้

Subquery ต้องอยู่ในวงเล็บ เพื่อแยกจาก subquery อื่นๆ (nested)

ต้องแน่ใจว่า subquery เลือกข้อมูลที่เกี่ยวข้อง ในตัวอย่างเราเลือก id จากตาราง suppliers หากเลือกคอลัมน์อื่น คิวรี่จะไม่ทำงาน เพราะคิวรี่หลักขึ้นอยู่กับ supplier ID

ตัวอย่าง SQL Subquery: SELECT

สมมติต้องการรายชื่อนักเรียนที่ได้เกียรตินิยม (honor roll) โดยข้อมูลเกียรตินิยมอยู่ในตารางอื่น ใช้ subquery ได้

ตัวอย่าง: คิวรี่ดึงลูกค้าทุกคนที่สั่งซื้อมูลค่าเกิน $200:

SELECT * FROM customers WHERE id IN (SELECT DISTINCT customer_id FROM orders WHERE cost > 200);

Subquery คืนผลลัพธ์:

nameemailaddressloyalty_planid
Katykaty.l@gmail.comMountain View, CANone4
Johnjohn.p@outlook.comBoston, MANone1

(2 แถว)

บรรทัดแรกเลือกทุกคอลัมน์จากตาราง customers จากนั้นระบุว่าต้องการลูกค้าที่ customer ID อยู่ใน subquery Subquery เลือก customer IDs ที่ไม่ซ้ำจากตาราง orders ที่มูลค่าเกิน $200 เรคอร์ดที่ตรงเงื่อนไขจะถูกรวมในผลลัพธ์

SQL Subquery: INSERT

เราต้องการเพิ่มเรคอร์ดลูกค้าที่ซื้อมูลค่าเกิน $200 ลงในตาราง high_value_customers ใช้ subquery ร่วมกับ SQL INSERT:

INSERT INTO high_value_customers SELECT * FROM customers WHERE id IN (SELECT DISTINCT customer_id FROM orders WHERE cost > 200);

ถ้าสืบค้นตาราง high_value_customers จะเห็นลูกค้าที่มีมูลค่าสูงทั้งหมดในตารางเดียว:

nameemailaddressloyalty_planid
Katykaty.l@gmail.comMountain View, CAGold4
Johnjohn.p@outlook.comBoston, MANone1

(2 แถว)

SQL Subquery: UPDATE

เราสามารถใช้ subquery อัปเดตข้อมูลในตารางได้ เช่น ต้องการอัปเดตแผนความภักดี (loyalty plan) ของลูกค้าที่ซื้อมูลค่าสูงเป็น Bronze ใช้คิวรี่:

UPDATE customers SET loyalty_plan = 'High Value' WHERE id IN (SELECT DISTINCT customer_id FROM orders WHERE cost > 200);

เมื่อสืบค้นตาราง customers จะเห็นแผนความภักดีของลูกค้ามูลค่าสูง 2 คน ถูกอัปเดตแล้ว:

nameemailaddressloyalty_planid
Katykaty.l@gmail.comMountain View, CAHigh Value4
Johnjohn.p@outlook.comBoston, MAHigh Value1

(2 แถว)

SQL Subquery: DELETE

สามารถใช้ subqueries ร่วมกับคำสั่ง SQL DELETE เพื่อลบแถวเดี่ยวหรือหลายแถวในตาราง

เขียนคำสั่งลบออเดอร์ของลูกค้ามูลค่าสูง ซึ่งเราย้ายไปตารางใหม่ในฐานข้อมูล ต้องใช้ subquery:

DELETE FROM orders WHERE customer_id IN (SELECT id FROM customers WHERE loyalty_plan = 'High Value');

ออเดอร์จากลูกค้ามูลค่าสูงถูกลบทั้งหมด Nested subquery คืนผลลัพธ์:

iditem_namecostcustomer_id
5Oak Chair1003

(1 แถว)

สรุป

SQL subquery คือคิวรี่ภายในคิวรี่อีกคิวรี่ Subqueries ให้คุณขึ้นอยู่กับผลลัพธ์ของคิวรี่หนึ่งในอีกคิวรี่หนึ่ง Subqueries ระบุใน clause HAVING หรือ WHERE ของคำสั่ง SQL

Subqueries ทำให้ง่ายต่อการรันคิวรี่ที่ขึ้นอยู่กับผลลัพธ์ของอีกคิวรี่ ในคู่มือนี้ เราอธิบายวิธีเขียน subquery บน SQL server และการใช้ subqueries ในคำสั่ง SELECT, INSERT, UPDATE, และ DELETE SQL

อยากเรียนรู้การเขียนโค้ด SQL เพิ่มเติม? ดูคู่มือ How to Learn SQL ของเรา มีคำแนะนำจากผู้เชี่ยวชาญและรายการหลักสูตรชั้นนำ