แบบสอบถามย่อยของ SQL เข้าร่วมกับแบบสอบถามภายนอก

Baebsxbtham Yxy Khxng Sql Khea Rwm Kab Baebsxbtham Phaynxk



เมื่อพูดถึงการทำงานกับฐานข้อมูลเชิงสัมพันธ์ คุณต้องเชี่ยวชาญวิธีจัดการและรวมการสืบค้นเพื่อดำเนินการตามที่คุณต้องการ นั่นคือสาเหตุที่เอ็นจิ้นฐานข้อมูลเชิงสัมพันธ์แต่ละอันใช้ภาษา SQL ในแบบของตนโดยพยายามนำเสนอคุณสมบัติพิเศษ ประสิทธิภาพ และความง่ายในการใช้งานสำหรับผู้ใช้

หนึ่งในคุณสมบัติที่ทรงพลังที่สุดของ SQL คือเคียวรีย่อย ข้อความค้นหาย่อยคือชุดของข้อความค้นหาที่ซ้อนกันภายในข้อความค้นหาที่ใหญ่กว่าและซับซ้อนกว่า ข้อความค้นหาย่อยช่วยให้คุณสามารถดึงข้อมูลหรือดำเนินการที่ซับซ้อนมากขึ้นเป็นเอนทิตีเดียว







เราสามารถใช้คิวรีย่อยเพื่อทำการกรองข้อมูล การเรียงลำดับ การรวมข้อมูลในหลายตาราง และอื่นๆ



อย่างไรก็ตาม คุณลักษณะอื่นที่ซ่อนอยู่ภายใต้แบบสอบถามย่อยของ SQL เรียกว่าการรวมแบบสอบถามย่อย สิ่งเหล่านี้คล้ายกับข้อความค้นหาย่อย แต่จะรวมเข้าด้วยกันซึ่งอนุญาตให้คุณใช้แบบสอบถามย่อยภายในแบบสอบถามภายนอกเพื่อรวมตารางเข้าด้วยกัน



หากคุณรู้สึกเวียนหัว ไม่ต้องกังวล เพราะการรวมข้อความค้นหาย่อยอาจเป็นเรื่องยากที่จะเชี่ยวชาญ โดยเฉพาะในตอนเริ่มต้น อย่างไรก็ตาม บทช่วยสอนนี้พยายามแยกการสืบค้นย่อยที่เข้าร่วมในขั้นตอนเบื้องต้นโดยไม่ปล่อยให้โอกาสมากเกินไป





โปรดทราบว่าเราถือว่าคุณไม่ได้ใหม่สำหรับ SQL, SQL Joins, SQL Subqueries หรืออื่นๆ อย่างไรก็ตาม หากคุณเป็นเช่นนั้น ให้ตรวจสอบบทช่วยสอนของเราในหัวข้อต่างๆ เพื่อค้นพบเพิ่มเติม

เชี่ยวชาญการรวมภายนอกของ SQL

หากคุณต้องการเข้าใจวิธีการทำงานกับการรวมแบบสอบถามย่อย การเรียนรู้วิธีการทำงานกับการรวมภายนอกเป็นปัจจัยสำคัญ



หากคุณไม่คุ้นเคย การรวมภายนอกของ SQL จะช่วยให้คุณดึงข้อมูลแถวทั้งหมดจากตารางหนึ่งและแถวที่ตรงกันจากตารางที่สอง มันซับซ้อนกว่านั้นเล็กน้อย รวมถึงการรวมภายนอกด้านซ้าย การรวมภายนอกด้านขวา การรวมภายนอกแบบเต็ม ฯลฯ

ในการรวมภายนอกด้านซ้ายของ SQL คิวรีจะส่งกลับแถวทั้งหมดจากตารางด้านซ้ายและแถวที่ตรงกันจากตารางด้านขวา ข้อความค้นหามีค่า NULL ในคอลัมน์ผลลัพธ์ หากไม่มีแถวที่ตรงกันในตารางที่ถูกต้อง

ในกรณีของการรวมภายนอกด้านขวา คิวรีจะส่งกลับแถวทั้งหมดจากตารางด้านขวา แต่เฉพาะแถวที่ตรงกันจากตารางด้านซ้าย ในทำนองเดียวกัน แบบสอบถามจะรวมค่า NULL หากไม่มีแถวที่ตรงกันจากตารางด้านซ้าย

ในที่สุดเราก็มีการรวมภายนอกแบบเต็ม การรวมนี้ส่งคืนแถวทั้งหมดจากตารางด้านขวาและด้านซ้าย และค่า NULL สำหรับระเบียนที่ไม่ตรงกัน

รวมแบบสอบถามย่อย SQL

ตอนนี้เราเข้าใจเกี่ยวกับเคียวรีย่อยของ SQL แล้ว เรามาพูดถึงการรวมเคียวรีย่อยกัน การรวมแบบสอบถามย่อยช่วยให้เราสามารถใช้แบบสอบถามย่อยภายในแบบสอบถามภายนอกเพื่อรวมตาราง

ถ้าถามว่าไหวไหม? ใช่ นั่นคือทั้งหมดที่แบบสอบถามย่อยเข้าร่วมทำ

เพื่อแสดงสิ่งนี้ได้ดียิ่งขึ้น ให้ใช้ตัวอย่างไวยากรณ์ต่อไปนี้ซึ่งแสดงให้เห็นในสิ่งต่อไปนี้:

เลือก *
จากตารางที่ 1
เข้าร่วมด้านนอกซ้าย (
เลือกคอลัมน์ 1, คอลัมน์ 2
จากตารางที่ 2
) AS ข้อความค้นหาย่อย
บน table1.column3 = subquery.column1;


ในไวยากรณ์ก่อนหน้านี้ เราเลือกคอลัมน์ทั้งหมดจากตารางหนึ่งโดยใช้การรวมภายนอกด้านซ้ายเพื่อรวมเข้ากับเคียวรีย่อย บทบาทของเคียวรีย่อยคือการดึงคอลัมน์ที่กำหนดจากตารางที่ 2 จากนั้นเราจะรวมเข้ากับตารางที่ 1 ในเงื่อนไขของคอลัมน์ที่ 2 จากตารางที่ 1 และคอลัมน์ที่ 1 จากเคียวรีย่อย

ตัวอย่างการปฏิบัติ:

ในทางทฤษฏี ดูเหมือนว่าจะเข้าใจได้ง่ายน้อยกว่า แต่ให้เราใช้สถานการณ์จริงโดยใช้ฐานข้อมูล Sakila

สมมติว่าเราต้องการเรียกรายชื่อภาพยนตร์ทั้งหมดในฐานข้อมูลและภาษาที่เกี่ยวข้อง ภาษาของภาพยนตร์จะถูกจัดเก็บไว้ในตารางภาษา และชื่อภาพยนตร์จะถูกจัดเก็บไว้ในตารางภาพยนตร์

อย่างไรก็ตาม ตารางภาพยนตร์มีคีย์ต่างประเทศที่เรียกว่าคอลัมน์ “language_id” จากตารางภาษา ดังนั้น เราสามารถใช้การรวมแบบสอบถามย่อยด้วยการรวมภายนอกด้านซ้ายเพื่อรวมสองตารางเข้าด้วยกันตามที่แสดงในแบบสอบถามต่อไปนี้:

เลือก f.title, l.name AS ภาษา
จากภาพยนตร์เรื่อง ฉ
เข้าร่วมด้านนอกซ้าย (
เลือก language_id, ชื่อ
จากภาษา
) AS ล
เปิด f.language_id = l.language_id;


ในแบบสอบถามตัวอย่างก่อนหน้านี้ เราเลือกคอลัมน์ชื่อเรื่องจากตารางภาพยนตร์และคอลัมน์ชื่อจากตารางภาษา

จากนั้นเราจะใช้แบบสอบถามย่อยเพื่อเลือก language_id และคอลัมน์ชื่อจากตารางภาษา ขั้นตอนต่อไปคือการรวมเข้ากับตารางภาพยนตร์โดยมีเงื่อนไขว่า language_id จากตารางภาพยนตร์เท่ากับ language_id จากตารางภาษา

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

เอาต์พุตตัวอย่างเป็นดังนี้:


เราสามารถทำเช่นเดียวกันได้ด้วยการรวมภายนอกด้านขวา ไวยากรณ์เป็นดังนี้:

เลือก *
จากตารางที่ 1
เข้าร่วมภายนอกขวา (
เลือกคอลัมน์ 1, คอลัมน์ 2
จากตารางที่ 2
) AS ข้อความค้นหาย่อย
บน table1.column3 = subquery.column1;


สิ่งนี้ทำงานคล้ายกันแต่รวมเรกคอร์ดทั้งหมดในตารางที่ถูกต้อง แม้ว่าจะไม่มีเรกคอร์ดที่ตรงกันก็ตาม

สิ่งที่ควรรู้ที่เป็นประโยชน์

เป็นการดีที่จะเข้าใจว่าแม้ว่าการรวมข้อความค้นหาย่อยจะมีประโยชน์อย่างไม่น่าเชื่อและสามารถเพิ่มประสิทธิภาพเวิร์กโฟลว์ของคุณได้ แต่ควรใช้ด้วยความระมัดระวัง

ตัวอย่างเช่น หลีกเลี่ยงการใช้การรวมแบบสอบถามย่อยกับชุดข้อมูลขนาดใหญ่ นี่เป็นเพราะสามารถส่งคืนบันทึกจำนวนมากที่อาจส่งผลกระทบต่อประสิทธิภาพของฐานข้อมูล

พิจารณาใช้เครื่องมือวิเคราะห์แบบสอบถามก่อนที่จะดำเนินการรวมแบบสอบถามย่อยใดๆ

บทสรุป

บทช่วยสอนนี้สำรวจพื้นฐานของการทำงานกับเคียวรีย่อยและการรวมเคียวรีย่อยใน SQL ในตอนท้ายของบทช่วยสอนนี้ ตอนนี้คุณเข้าใจวิธีการทำงานกับการรวมแบบสอบถามย่อย เหตุใดคุณจึงต้องใช้การรวม และตัวอย่างเชิงปฏิบัติของวิธีที่พวกเขาสามารถช่วยคุณในเวิร์กโฟลว์ของคุณ