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

แบบสอบถามย่อย SQL:คู่มือฉบับสมบูรณ์

แบบสอบถามย่อยของ 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 คุณยังจะได้พบกับรายชื่อหลักสูตรชั้นนำที่จะช่วยให้คุณเรียนรู้ต่อไปได้