SQL ภายนอกเข้าร่วม

Sql Phaynxk Khea Rwm



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

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







OUTER JOIN ใน SQL จะดึงแถวที่ตรงกันทั้งหมดจากตารางที่เกี่ยวข้อง รวมถึงแถวที่ไม่ตรงกันจากตารางหนึ่งหรือทั้งสองตาราง มันมีประโยชน์เมื่อคุณจัดการกับตารางที่มีค่า NULL หรือชุดที่ขาดหายไป



ให้เราสำรวจเพิ่มเติมว่าการรวมเหล่านี้ทำอะไร ทำงานอย่างไร และเราจะนำไปใช้ในฐานข้อมูล SQL ได้อย่างไร



ความต้องการ:

สำหรับบทช่วยสอนนี้ เราจะทำงานกับ MySQL 8.0 และใช้ฐานข้อมูลตัวอย่าง Sakila อย่างไรก็ตาม คุณสามารถใช้ชุดข้อมูลอื่นๆ ที่คุณเห็นว่าเกี่ยวข้องได้ตามสบาย





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

OUTER JOINS ใน SQL มีสามประเภทหลัก OUTER JOINS ประเภทเหล่านี้ได้แก่:

  1. ซ้ายเข้าร่วมด้านนอก

  2. ในกรณีของ LEFT OUTER JOINS การรวมจะดึงแถวทั้งหมดจากตารางด้านซ้าย และเฉพาะแถวที่ตรงกันจากตารางด้านขวาเท่านั้น หากไม่มีแถวที่ตรงกันจากตารางด้านขวา การรวมจะส่งกลับค่า NULL สำหรับคอลัมน์ในตารางด้านขวา



  3. เข้าร่วมด้านนอกขวา

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

  5. เข้าร่วมด้านนอกเต็มรูปแบบ

  6. สุดท้ายนี้ เรามี FULL OUTER JOINS การรวมประเภทนี้จะรวมการรวมภายนอกทั้ง RIGHT และ LEFT ด้วยเหตุนี้ การรวมจะดึงข้อมูลแถวทั้งหมดเมื่อมีรายการที่ตรงกันในตารางด้านซ้ายหรือด้านขวา หากไม่มีค่าที่ตรงกัน การรวมจะส่งกลับค่า NULL สำหรับคอลัมน์จากตารางที่ไม่มีค่าที่ตรงกัน

ไวยากรณ์ของ SQL OUTER JOIN

ข้อมูลต่อไปนี้เป็นการแสดงออกถึงไวยากรณ์ของ SQL OUTER JOIN อย่างไรก็ตาม โปรดทราบว่าไวยากรณ์อาจแตกต่างกันเล็กน้อยขึ้นอยู่กับกลไกฐานข้อมูลเป้าหมาย

ต่อไปนี้เป็นโครงสร้างทั่วไป:

เลือกคอลัมน์
จากตารางที่ 1
[ซ้าย | ขวา | เต็ม] เข้าร่วมภายนอก table2
บน table1.column_name = table2.column_name;

ไวยากรณ์ของ OUTER JOIN ใน SQL ค่อนข้างอธิบายได้ในตัว

ตัวอย่าง:

ให้เราดูตัวอย่างการใช้งานว่าเราสามารถใช้ OUTER JOINS ประเภทต่างๆ ใน ​​SQL ได้อย่างไร

ดังที่ได้กล่าวไปแล้วเราจะใช้ฐานข้อมูลตัวอย่างสากิลาในการสาธิต ในกรณีนี้ เราใช้ตาราง 'ลูกค้า' และ 'การชำระเงิน'

ตัวอย่างที่ 1: เข้าร่วมด้านนอกซ้าย

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

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

หากลูกค้าไม่ได้ชำระเงิน การรวมจะแสดงค่า NULL สำหรับคอลัมน์ที่เกี่ยวข้องกับการชำระเงิน

ตัวอย่างมีดังนี้:

เลือก
c.ลูกค้า_id,
ค.first_name,
ค.last_name,
ต่อปี
p.Payment_date
จาก
ลูกค้าค
ซ้าย OUTER JOIN ชำระเงินหน้า
บน
c.customer_id = p.customer_id;

ในแบบสอบถามที่กำหนด เราจะรวมคอลัมน์ 'customer_id', 'first_name' และ 'last_name' จากตาราง 'customer' นอกจากนี้เรายังรวมจำนวนเงินและ 'วันที่ชำระเงิน' จากตาราง 'การชำระเงิน' ด้วย

จากนั้นเราจะดำเนินการ LEFT OUTER JOIN ระหว่างตาราง 'ลูกค้า' และ 'การชำระเงิน' ตาม 'customer_id'

ได้แก่ลูกค้าทั้งหมด (ไม่ว่าจะชำระเงินหรือไม่ก็ตาม) พร้อมด้วยรายละเอียดการชำระเงิน (ถ้ามี)

ตัวอย่างผลลัพธ์จะเป็นดังนี้:

ตัวอย่างที่ 2: เข้าร่วมภายนอกด้านขวา

ตอนนี้เรามาดู RIGHT OUTER JOIN กันดีกว่า สมมติว่าเราต้องการรวมข้อมูลการชำระเงินทั้งหมดและลูกค้าที่เกี่ยวข้องในกรณีนี้ ถ้ามี

ในกรณีนี้ หากลูกค้าชำระเงิน การเข้าร่วมจะแสดงรายละเอียดของลูกค้านั้น หากมีการชำระเงินโดยไม่มีลูกค้าที่เกี่ยวข้อง ก็จะแสดงค่า NULL สำหรับคอลัมน์ที่เกี่ยวข้องกับลูกค้า

เลือก
c.ลูกค้า_id,
ค.first_name,
ค.last_name,
ต่อปี
p.Payment_date
จาก
ลูกค้าค
RIGHT OUTER JOIN การชำระเงินหน้า
บน
c.customer_id = p.customer_id;

ชุดผลลัพธ์จะเป็นดังนี้:

ตัวอย่างที่ 3: เข้าร่วมภายนอกแบบเต็ม

ในทางกลับกัน Full OUTER JOIN จะดึงข้อมูลลูกค้าและการชำระเงินทั้งหมด ซึ่งรวมถึงลูกค้าทั้งหมดและการชำระเงินทั้งหมด และแสดงค่า NULL ที่ไม่มีการจับคู่ระหว่างตาราง

เลือก
c.ลูกค้า_id,
ค.first_name,
ค.last_name,
ต่อปี
p.Payment_date
จาก
ลูกค้าค
ชำระเงินเข้าร่วมภายนอกเต็มหน้า
บน
c.customer_id = p.customer_id;

โปรดจำไว้ว่า MySQL ไม่รองรับ FULL OUTER JOIN โดยกำเนิด คุณต้องทำเวทมนตร์ยิวยิตสูด้วย LEFT JOIN, UNION และ RIGHT JOIN ค่อนข้างน่ารำคาญ เราอาจเพิ่ม

บทสรุป

ในบทช่วยสอนนี้ เราได้เรียนรู้ทั้งหมดเกี่ยวกับ OUTER JOINS เราได้เรียนรู้ว่า OUTER JOIN ใน SQL คืออะไร ประเภทของ OUTER JOINS และตัวอย่างวิธีใช้ OUTER JOINS ประเภทเหล่านี้