เมื่อพูดถึงการทำงานกับฐานข้อมูลเชิงสัมพันธ์ คุณต้องเชี่ยวชาญวิธีจัดการและรวมการสืบค้นเพื่อดำเนินการตามที่คุณต้องการ นั่นคือสาเหตุที่เอ็นจิ้นฐานข้อมูลเชิงสัมพันธ์แต่ละอันใช้ภาษา 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 ในตอนท้ายของบทช่วยสอนนี้ ตอนนี้คุณเข้าใจวิธีการทำงานกับการรวมแบบสอบถามย่อย เหตุใดคุณจึงต้องใช้การรวม และตัวอย่างเชิงปฏิบัติของวิธีที่พวกเขาสามารถช่วยคุณในเวิร์กโฟลว์ของคุณ