© zaozaa19/Shutterstock.com

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

ในบทความนี้ เราจะกล่าวถึงการดำเนินการ JOIN ประเภทต่างๆ ใน ​​SQL – INNER, LEFT, RIGHT และ FULL – พร้อมทั้งให้ตัวอย่างของแต่ละประเภทโดยใช้ตัวอย่างตาราง SQL มาเริ่มกันเลย!

อะไร การรวมใน SQL ถูกต้องหรือไม่

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

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

ประเภทของการรวมใน SQL

ตามที่กล่าวไว้ก่อนหน้านี้ มีสี่ประเภทหลักของการรวมใน SQL: 

INNER JOIN, LEFT JOIN (หรือ LEFT OUTER JOIN), RIGHT เข้าร่วมหรือ (เข้าร่วมภายนอกขวา) และเข้าร่วมแบบเต็ม (หรือเข้าร่วมภายนอกทั้งหมด)

แต่ละประเภททำงานแตกต่างกันไป ขึ้นอยู่กับประเภทของความสัมพันธ์ระหว่างตารางที่เข้าร่วม มาดูรายละเอียดแต่ละรายการ

เข้าร่วมภายใน

SQL แนะนำแนวคิดของการเข้าถึงระเบียนจำนวนมากด้วยคำสั่งเดียว โดยไม่จำเป็นต้องระบุวิธีการเข้าถึง

©TippaPatt/Shutterstock.com

INNER JOIN คือประเภทการรวมที่ใช้บ่อยที่สุดใน SQL บางครั้งเรียกว่า”การรวมอย่างง่าย”และการใช้ JOIN แทน INNER JOIN ในแบบสอบถามนั้นถูกต้องตามหลักวากยสัมพันธ์ การรวมอย่างง่ายใช้เพื่อรวมแถวจากสองตารางขึ้นไปตามคอลัมน์ทั่วไป

การดำเนินการ INNER JOIN จะส่งคืนเฉพาะแถวที่มีการจับคู่ระหว่างคอลัมน์ที่เกี่ยวข้องกันในทั้งสองตาราง ซึ่งหมายความว่าหากไม่มีการจับคู่ในตารางใดตารางหนึ่ง แถวนั้นจะไม่ถูกส่งคืน

เพื่อแสดงแนวคิดนี้เพิ่มเติม ลองพิจารณาตาราง SQL สองตาราง ได้แก่ ลูกค้าและคำสั่งซื้อ

ตารางลูกค้า

CustomerIDCustomerNameContactName1JohnJohn Smith2MariaMaria Garcia3PeterPeter Johnson

ตารางคำสั่งซื้อ

OrderIDCustomerIDOrderDate112022-03-15222022-04-10312022-04-20

เราสามารถใช้ INNER JOIN เพื่อรับคำสั่งซื้อจากลูกค้าแต่ละราย เช่น:

เลือก Orders.OrderID, Clients.CustomerName, Orders.OrderDate

FROM Orders

INNER JOIN ลูกค้า

ON Orders.CustomerID=ลูกค้า.CustomerID;

ในแบบสอบถามตัวอย่างด้านบน เราใช้ INNER JOIN เพื่อรวมตารางคำสั่งซื้อและลูกค้าตามคอลัมน์รหัสลูกค้า

ผลลัพธ์การค้นหาจะเป็น:

OrderIDCustomerNameOrderDate1John2022-03-152Maria2022-04-103John2022-04-20

LEFT JOIN

การรวมด้านซ้าย (หรือการรวมด้านซ้ายด้านนอก) ใช้เพื่อรวมแถวจากสองตารางขึ้นไปตามคอลัมน์ทั่วไป แต่ยังส่งกลับแถวทั้งหมดจากตารางด้านซ้าย (หรือตารางแรกในการรวม)

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

การใช้ตารางจากตัวอย่างก่อนหน้านี้ เราสามารถใช้ LEFT JOIN เพื่อรวมตารางลูกค้าและคำสั่งซื้อ (ตามรหัสลูกค้า) เพื่อรับคำสั่งซื้อจากลูกค้าทั้งหมด แม้กระทั่ง หากไม่มีคำสั่งซื้อสำหรับลูกค้ารายใดรายหนึ่ง: 

เลือกชื่อลูกค้า ชื่อลูกค้า วันสั่งซื้อ

จากลูกค้า

ซ้ายเข้าร่วมคำสั่งซื้อ

ON Customer.CustomerID=Orders.CustomerID;

ผลลัพธ์ของการสืบค้นจะเป็น:

CustomerNameOrderDateJohn2022-03-15Maria2022-04-10John2022-04-20PeterNULL

ตามที่คาดไว้ เนื่องจาก Peter ไม่มีคำสั่งซื้อ คอลัมน์ OrderDate สำหรับ Peter จึงมีค่า NULL

RIGHT JOIN

เดิมที SQL ใช้พีชคณิตเชิงสัมพันธ์และแคลคูลัสเชิงสัมพันธ์ tuple

©Miha Creative/Shutterstock.com

RIGHT JOIN (หรือ RIGHT OUTER JOIN) ทำงานในลักษณะเดียวกับ LEFT JOIN ยกเว้นว่า ส่งคืนแถวทั้งหมดจากตารางด้านขวา (หรือตารางที่สองในการรวม) กล่าวอีกนัยหนึ่ง การดำเนินการ RIGHT JOIN จะส่งคืนแถวทั้งหมดจากตารางด้านขวาและเฉพาะแถวที่ตรงกันจากตารางด้านซ้าย

หากไม่มีแถวที่ตรงกันในตารางด้านซ้าย ผลลัพธ์จะมีค่า NULL ในคอลัมน์จากตารางด้านซ้าย จากตัวอย่างก่อนหน้านี้ เราสามารถใช้ RIGHT JOIN เพื่อรับ คำสั่งซื้อทั้งหมด ที่ส่งโดยลูกค้า ดังนี้:

เลือกลูกค้า ชื่อลูกค้า, วันที่สั่งซื้อ

จากลูกค้า

สิทธิ์เข้าร่วมคำสั่งซื้อ

ON Customer.CustomerID=Orders.CustomerID;

ข้อความค้นหาด้านบนจะให้ผลลัพธ์ต่อไปนี้แก่เรา:

CustomerNameOrderDateJohn2022-03-15Maria2022-04-10John2022-04-20

ตามที่เราคาดไว้ Peter ไม่ได้รวมอยู่ในผลการสืบค้นเพราะเขายังไม่ได้ทำคำสั่งซื้อใดๆ ในขณะที่ John มี 2 รายการ

FULL JOIN

การดำเนินการ FULL JOIN จะส่งคืนแถวทั้งหมดจากทั้งสองตาราง รวมถึงแถวที่ไม่ตรงกัน หากไม่มีการจับคู่ในตารางใดตารางหนึ่ง ผลลัพธ์จะมีค่า NULL ในคอลัมน์จากตารางที่ไม่ตรงกัน

การเข้าร่วมแบบเต็มจึงรวมชุดผลลัพธ์ของทั้งการเข้าร่วมทางซ้ายและการเข้าร่วมทางขวา ส่งคืนแถวทั้งหมดจากทั้งสองตาราง แม้ว่าจะไม่มีแถวที่ตรงกันในอีกตารางหนึ่งก็ตาม

โดยใช้ตารางเดิม เราสามารถใช้ FULL JOIN เพื่อรับคำสั่งซื้อและลูกค้าทั้งหมด แม้ว่าจะไม่มีคำสั่งซื้อสำหรับลูกค้ารายใดรายหนึ่ง หรือหากไม่มีลูกค้าที่สั่งซื้อ เช่น ดังนั้น:

เลือกชื่อลูกค้า ชื่อลูกค้า วันที่สั่งซื้อ

จากลูกค้า

คำสั่งซื้อทั้งหมดเข้าร่วม

เมื่อลูกค้า ลูกค้ารหัส=คำสั่งซื้อ CustomerID;

ซึ่งให้ผลลัพธ์ต่อไปนี้แก่เรา:

CustomerNameOrderDateJohn2022-03-15Maria2022-04-10John2022-04-20PeterNULL

Peter รวมอยู่ในแบบสอบถามแล้ว แม้ว่าเขาจะยังไม่ได้ทำการสั่งซื้อใดๆ และคอลัมน์ OrderDate สำหรับ Peter มี NULL

FULL OUTER JOIN เทียบเท่ากับ FULL JOIN และคุณสามารถใช้แทนกันได้

มีทางเลือกอื่นนอกเหนือจากการรวมทั่วไปใน SQL หรือไม่

แม้ว่าการรวมเป็นเครื่องมือที่จำเป็นสำหรับการรวมข้อมูลจากหลายตารางใน SQL แต่ก็มีวิธีการอื่นที่สามารถให้ผลลัพธ์ที่คล้ายกันได้ วิธีการเหล่านี้รวมถึงข้อความค้นหาย่อย UNION และ UNION ALL ลองสำรวจทางเลือกเหล่านี้โดยสังเขปเพื่อดูว่าพวกเขาเปรียบเทียบกับการใช้ JOINS อย่างไร

SQL Subqueries

Subqueries คือ Query ที่ซ้อนกันซึ่งสามารถใช้เพื่อดึงข้อมูลจากตารางตั้งแต่หนึ่งตารางขึ้นไป. สามารถใช้เพื่อกรอง เรียงลำดับ หรือรวมข้อมูล และสามารถซ้อนภายในแบบสอบถามอื่น ๆ กรณีการใช้งานทั่วไปอย่างหนึ่งสำหรับแบบสอบถามย่อยคือการดึงข้อมูลจากตารางหนึ่งตามข้อมูลจากตารางอื่น

ตัวอย่างเช่น แทนที่จะใช้การรวมเพื่อรวมข้อมูลจากตารางคำสั่งซื้อและลูกค้า คุณสามารถใช้แบบสอบถามย่อย เพื่อดึงข้อมูลจากตารางลูกค้าตามข้อมูลจากตารางคำสั่งซื้อ:

เลือกชื่อลูกค้า, เมือง

จากลูกค้า

รหัสลูกค้าเข้าที่ใด (เลือกรหัสลูกค้าจากคำสั่งซื้อ );

ข้อความค้นหานี้จะส่งคืนลูกค้าทั้งหมดที่ได้ทำการสั่งซื้อพร้อมกับเมืองของพวกเขา

คำสั่ง UNION

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

ตัวอย่างเช่น คุณสามารถใช้ UNION เพื่อรวมข้อมูลจากลูกค้าและคำสั่งซื้อ ตารางที่มีคอลัมน์เดียวกัน:

เลือกชื่อลูกค้า ชื่อผู้ติดต่อ เมืองจากลูกค้า

สหภาพ

เลือกชื่อลูกค้า ชื่อผู้ติดต่อ เมืองจากคำสั่งซื้อ

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

คำสั่ง UNION ALL

คำสั่ง UNION ALL คล้ายกับคำสั่ง UNION คำสั่ง แต่จะไม่ลบรายการที่ซ้ำกันออกจากชุดผลลัพธ์ ซึ่งหมายความว่าจะรวมแถวทั้งหมดจากทั้งสองตาราง แม้ว่าจะมีรายการที่ซ้ำกันก็ตาม

ตัวอย่างเช่น

เลือกชื่อลูกค้า เมืองจากลูกค้า

UNION ALL

เลือกชื่อลูกค้า ShipCity จากคำสั่งซื้อ

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

p>

การใช้การรวมใน SQL มีประโยชน์อย่างไรเมื่อเทียบกับทางเลือกอื่น

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

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

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

แน่นอนว่าอาจมีบางสถานการณ์ที่การสืบค้นย่อยหรือการดำเนินการของ UNION เหมาะสมกว่าการรวม การดำเนินการขึ้นอยู่กับข้อกำหนดเฉพาะของแบบสอบถาม โดยทั่วไปแล้ว การรวมเป็นวิธีที่ง่ายกว่า มีประสิทธิภาพมากกว่า และมีประสิทธิภาพในการรวมข้อมูลจากหลายตารางใน SQL เมื่อเทียบกับวิธีอื่นๆ

สรุป

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

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

การรวมใน SQL คืออะไร (Inner, Left, ถูกต้องและครบถ้วน) – พร้อมตัวอย่าง FAQs (คำถามที่พบบ่อย) 

JOINS มีความสำคัญอย่างไรในการสืบค้น SQL

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

ความแตกต่างระหว่างการรวมซ้ายและการรวมขวาคืออะไร ?

การรวมด้านซ้าย (หรือการรวมภายนอกด้านซ้าย) จะรวมแถวจากสองตารางขึ้นไปตามคอลัมน์ทั่วไป แต่จะส่งคืนแถวทั้งหมดจากตารางด้านซ้ายด้วย RIGHT JOIN (หรือ RIGHT OUTER JOIN) เหมือนกับการเข้าร่วมทางซ้าย ยกเว้นว่าจะส่งคืนแถวทั้งหมดจากตารางด้านขวา

วัตถุประสงค์ของการรวมแบบเต็มใน SQL คืออะไร

การดำเนินการ FULL JOIN จะส่งคืนแถวทั้งหมดจากทั้งสองตาราง รวมทั้งแถวที่ไม่ตรงกัน หากไม่มีการจับคู่ในตารางใดตารางหนึ่ง ผลลัพธ์จะมีค่า NULL ในคอลัมน์จากตารางที่ไม่ตรงกัน

แนวทางปฏิบัติที่ดีที่สุดเมื่อใช้การดำเนินการ JOIN ใน SQL มีอะไรบ้าง

แนวทางปฏิบัติที่ดีที่สุดเมื่อใช้การรวมใน SQL รวมถึงการใช้ประเภทการรวมที่ถูกต้องตามข้อมูลและประเภทของผลลัพธ์ที่คุณต้องการได้รับ การใช้นามแฝงเพื่อทำให้การสอบถามของคุณอ่านง่ายขึ้น และ/หรือ ใช้ส่วนคำสั่ง WHERE เพื่อปรับแต่งผลลัพธ์ของคิวรี

คุณสามารถใช้มากกว่าสองตารางในการดำเนินการ SQL JOIN ได้หรือไม่

ใช่ คุณสามารถใช้มากกว่านี้ มากกว่าสองตารางในการดำเนินการรวม SQL คุณสามารถรวมหลายตารางได้โดยระบุเงื่อนไขการรวมในส่วนคำสั่ง ON ของแบบสอบถาม ส่วนคำสั่ง ON สามารถมีเงื่อนไขการรวมได้หลายเงื่อนไข โดยคั่นด้วยตัวดำเนินการ AND หรือ OR

By Henry Taylor

ฉันทำงานเป็นนักพัฒนาส่วนหลัง พวกคุณบางคนอาจเคยเห็นฉันที่การประชุมนักพัฒนาซอฟต์แวร์ เมื่อเร็ว ๆ นี้ฉันได้ทำงานในโครงการโอเพ่นซอร์ส