แบบสอบถามย่อยของ SQL คือแบบสอบถามภายในแบบสอบถามอื่น ใช้ในส่วนคำสั่ง WHERE หรือ HAVING ของคำสั่ง SQL แบบสอบถามย่อยช่วยให้คุณระบุผลลัพธ์ของแบบสอบถามหนึ่งเป็นอาร์กิวเมนต์ในแบบสอบถามอื่น
เมื่อคุณกำลังเขียน SQL แบบสอบถาม คุณอาจต้องการระบุพารามิเตอร์ตามผลลัพธ์ของแบบสอบถามอื่น ตัวอย่างเช่น สมมติว่าคุณมีรายชื่อลูกค้า คุณอาจต้องการรับรายชื่อลูกค้าที่สั่งซื้อที่มีมูลค่าเกินจำนวนที่กำหนด ข้อมูลคำสั่งซื้อและข้อมูลลูกค้าถูกเก็บไว้ในตารางอื่น
นั่นคือสิ่งที่ SQL subquery การดำเนินการเข้ามา แบบสอบถามย่อย หรือที่เรียกว่าการสืบค้นข้อมูลที่ซ้อนกันคือ SELECT ข้อความค้นหาภายใน WHERE ประโยคของ SQL อื่น แบบสอบถาม SQLหลัก แบบสอบถามจากนั้นใช้ผลลัพธ์ของแบบสอบถามย่อย
ในบทช่วยสอนนี้ เราจะพูดถึงวิธีใช้คิวรีย่อยใน SQL โดยอ้างอิงจากตัวอย่างบางส่วน
แบบสอบถามย่อย SQL:คำแนะนำ
แบบสอบถามย่อยของ SQL เป็นแบบสอบถามภายในแบบสอบถามอื่น ใช้เพื่อเรียกใช้แบบสอบถามที่ขึ้นอยู่กับผลลัพธ์ของแบบสอบถามอื่น แบบสอบถามย่อยช่วยให้คุณทำสิ่งนี้ได้โดยไม่ต้องเขียนแบบสอบถามแยกกันสองคำและคัดลอกและวางผลลัพธ์ แบบสอบถามย่อยปรากฏในส่วนคำสั่ง WHERE หรือ HAVING
นี่คือไวยากรณ์สำหรับแบบสอบถามย่อยในคำสั่ง SQL SELECT:
SELECT name FROM products WHERE supplier_id IN (SELECT id FROM suppliers WHERE local = True);
แบบสอบถามนี้เลือกชื่อของผลิตภัณฑ์ทั้งหมดที่จัดหาโดยบริษัทในพื้นที่ เราใช้แบบสอบถามย่อยเป็นอินพุตของคำสั่ง SQL IN คำสั่ง SQL IN จะคืนค่าเร็กคอร์ดทั้งหมดจากตาราง “products” โดยที่ supplier_id อยู่ในผลลัพธ์ของการค้นหาย่อยของเรา
เราสามารถใช้การสืบค้นข้อมูลย่อยในคำสั่ง INSERT, UPDATE และ DELETE
81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้
ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก
แบบสอบถามย่อยต้องปรากฏในวงเล็บ ซึ่งจะแยกความแตกต่างภายในของแบบสอบถามย่อยกับแบบสอบถามย่อยอื่น
คุณควรตรวจสอบให้แน่ใจว่าคุณได้เลือกข้อมูลที่เกี่ยวข้องในแบบสอบถามย่อยของคุณ ในแบบสอบถามย่อยของเราด้านบน เราเลือก id จาก ซัพพลายเออร์ โต๊ะ. ถ้าเราเลือกคอลัมน์อื่น แบบสอบถามของเราจะไม่ทำงาน เนื่องจากคำถามหลักของเราขึ้นอยู่กับรหัสซัพพลายเออร์
ตัวอย่างข้อความค้นหาย่อย SQL:SELECT
สมมติว่าคุณต้องการรับรายชื่อนักเรียนที่ได้รับเกียรติบัตร คุณสามารถใช้แบบสอบถามย่อย . นี่ถือว่าข้อมูลการยกย่องอยู่ในตารางอื่น
ลองใช้ตัวอย่างเพื่อแสดงให้เห็นว่า SQL subqueries งาน. ข้อความค้นหาต่อไปนี้จะส่งคืนรายชื่อลูกค้าทั้งหมดที่สั่งซื้อมูลค่ามากกว่า $200:
SELECT * FROM customers WHERE id IN (SELECT DISTINCT customer_id FROM orders WHERE cost > 200);
แบบสอบถามย่อยของเรา คืนค่าต่อไปนี้:
ชื่อ | อีเมล | ที่อยู่ | loyalty_plan | id |
เคธี่ | [email protected] | เมาน์เทนวิว แคลิฟอร์เนีย | ไม่มี | 4 |
จอห์น | [email protected] | บอสตัน แมสซาชูเซตส์ | ไม่มี | 1 |
(2 แถว)
ในบรรทัดแรก เราเลือกทุกคอลัมน์จาก ลูกค้า โต๊ะ. จากนั้น เราระบุว่าเราต้องการรับเฉพาะลูกค้าที่มีรหัสลูกค้าอยู่ใน แบบสอบถามย่อย . แบบสอบถามย่อยของเรา เลือกรหัสลูกค้าที่ไม่ซ้ำทั้งหมดจาก คำสั่งซื้อ . ของเรา ตารางที่สินค้ามีราคามากกว่า $200 บันทึกที่ตรงกับเงื่อนไขเหล่านี้รวมถึงลูกค้าเหล่านั้นในผลลัพธ์ด้วย
แบบสอบถามย่อย SQL:INSERT
เราต้องการแทรกบันทึกทั้งหมดของลูกค้าที่ทำการซื้อที่มีมูลค่ามากกว่า $200 ลงในตารางที่เรียกว่า high_value_customers ในการดำเนินการดังกล่าว เราสามารถใช้คำสั่งย่อย SQL และคำสั่ง SQL INSERT:
INSERT INTO high_value_customers SELECT * FROM customers WHERE id IN (SELECT DISTINCT customer_id FROM orders WHERE cost > 200);
หากเราสอบถาม ลูกค้าที่มีมูลค่าสูง เราสามารถเห็นลูกค้าที่มีมูลค่าสูงทั้งหมดของเราในตารางเดียว:
ชื่อ | อีเมล | ที่อยู่ | loyalty_plan | id |
เคธี่ | [email protected] | เมาน์เทนวิว แคลิฟอร์เนีย | ทองคำ | 4 |
จอห์น | [email protected] | บอสตัน แมสซาชูเซตส์ | ไม่มี | 1 |
(2 แถว)
SQL Subquery:อัปเดต
เราสามารถใช้ แบบสอบถามย่อย เพื่ออัพเดทข้อมูลภายในตาราง ตัวอย่างเช่น สมมติว่าเราต้องการอัปเดตแผนความภักดีของลูกค้าทั้งหมดที่ซื้อของที่มีมูลค่าสูงเป็น Bronze . เราสามารถใช้แบบสอบถามต่อไปนี้เพื่อดำเนินการดังกล่าว:
UPDATE customers SET loyalty_plan = 'High Value' WHERE id IN (SELECT DISTINCT customer_id FROM orders WHERE cost > 200);
เมื่อเราสอบถาม ลูกค้า . ของเรา ตารางเราจะเห็นว่าแผนความภักดีสำหรับทั้งสอง มูลค่าสูง ลูกค้าได้รับการปรับปรุง:
ชื่อ | อีเมล | ที่อยู่ | loyalty_plan | id |
เคธี่ | [email protected] | เมาน์เทนวิว แคลิฟอร์เนีย | มูลค่าสูง | 4 |
จอห์น | [email protected] | บอสตัน แมสซาชูเซตส์ | มูลค่าสูง | 1 |
(2 แถว)
แบบสอบถามย่อย SQL:ลบ
คุณสามารถใช้ แบบสอบถามย่อย ด้วยคำสั่ง SQL DELETE เพื่อลบแต่ละแถวหรือหลายแถวในตาราง
มาเขียนคำสั่งลบคำสั่งซื้อของลูกค้าที่มีมูลค่าสูง ซึ่งเราย้ายไปยังตารางใหม่ในฐานข้อมูล ในการดำเนินการนี้ เราจะต้องอาศัยแบบสอบถามย่อย:
DELETE FROM orders WHERE customer_id IN (SELECT id FROM customers WHERE loyalty_plan = 'High Value');
เราสามารถเห็นคำสั่งซื้อทั้งหมดจากลูกค้าที่มีมูลค่าสูงของเราถูกลบไปแล้ว แบบสอบถามย่อยที่ซ้อนกันของเราส่งคืน:
id | item_name | ค่าใช้จ่าย | รหัสลูกค้า |
5 | เก้าอี้ไม้โอ๊ค | 100 | 3 |
(1 แถว)
บทสรุป
แบบสอบถามย่อยของ SQL เป็นแบบสอบถามภายในแบบสอบถามอื่น แบบสอบถามย่อยช่วยให้คุณขึ้นอยู่กับผลลัพธ์ของแบบสอบถามหนึ่งในอีก เคียวรีย่อยถูกระบุไว้ในส่วนคำสั่ง HAVING หรือ WHERE ของคำสั่ง SQL
แบบสอบถามย่อย ทำให้ง่ายต่อการเรียกใช้แบบสอบถามที่ขึ้นอยู่กับผลลัพธ์ของแบบสอบถามอื่น ในคู่มือนี้ เราได้พูดถึงวิธีการเขียน แบบสอบถามย่อย บน SQL เซิร์ฟเวอร์ นอกจากนี้เรายังได้พูดคุยเกี่ยวกับวิธีใช้แบบสอบถามย่อยใน SELECT , INSERT , อัปเดต และ ลบ SQL แถลงการณ์
คุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการเข้ารหัสใน SQL หรือไม่? ดูคู่มือวิธีการเรียนรู้ SQL ของเรา คู่มือนี้มีคำแนะนำจากผู้เชี่ยวชาญในการเรียนรู้ SQL คุณยังจะได้พบกับรายชื่อหลักสูตรชั้นนำที่จะช่วยให้คุณเรียนรู้ต่อไปได้