การเชื่อมต่อฐานข้อมูล (DBMS Joins): ประเภทของการเชื่อมต่อแบบ THETA, Inner, Outer, Equi

⚡ สรุปอย่างชาญฉลาด

การเชื่อมต่อ (Join) ในระบบจัดการฐานข้อมูล (DBMS) เป็นการดำเนินการแบบไบนารีที่รวมแถวจากสองตารางขึ้นไปโดยใช้คีย์หลักและคีย์รอง การเชื่อมต่อแบ่งออกเป็น การเชื่อมต่อภายใน (inner join) ซึ่งจะส่งคืนเฉพาะแถวที่ตรงกัน และการเชื่อมต่อภายนอก (outer join) ซึ่งจะเก็บแถวที่ไม่ตรงกันและเติมช่องว่างด้วยค่าว่าง (null)

  • 🔗 วัตถุประสงค์หลัก: การเชื่อมต่อ (Join) จะรวมตารางที่เกี่ยวข้องเข้าด้วยกันเป็นชุดผลลัพธ์เดียวโดยอิงตามเงื่อนไขการเชื่อมต่อ
  • 🎯 เข้าร่วมภายใน: ส่งคืนเฉพาะแถวที่ตรงตามเงื่อนไขในทั้งสองตาราง ซึ่งเป็นประเภทการเชื่อมต่อเริ่มต้น
  • 📐 Theta และ EQUI: การเชื่อมต่อแบบ theta join ใช้ตัวดำเนินการเปรียบเทียบใดก็ได้ ในขณะที่การเชื่อมต่อแบบ EQUI join ใช้ได้เฉพาะตัวดำเนินการเท่ากับเท่านั้น
  • 🔄 การเชื่อมต่อแบบธรรมชาติ: ค้นหาโดยใช้แอตทริบิวต์ที่มีชื่อเหมือนกัน และลบคอลัมน์ที่ซ้ำกันออก
  • ⬅️ เข้าร่วมด้านนอกซ้าย: เก็บทุกแถวจากตารางด้านซ้าย และเติมค่าว่างในส่วนที่ตารางด้านขวาไม่มีข้อมูลที่ตรงกัน
  • ➡️ ข้อต่อด้านนอกขวา: เก็บทุกแถวจากตารางด้านขวา และเติมค่าว่างในส่วนที่ตารางด้านซ้ายไม่มีข้อมูลที่ตรงกัน
  • 🌐 การเชื่อมต่อภายนอกแบบเต็ม: เก็บทุกแถวจากทั้งสองตารางโดยไม่คำนึงถึงการจับคู่

การเชื่อมต่อใน DBMS ซ้ายขวา

Join ใน DBMS คืออะไร?

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

ประเภทของการเข้าร่วม

การรวมใน DBMS มีสองประเภทหลัก:

  1. รวมภายใน: Theta, Natural, EQUI
  2. ข้อต่อภายนอก: ซ้าย, ขวา, เต็ม

ตารางด้านล่างแสดงตัวอย่างประเภทการเชื่อมต่อทั้งหมด ก่อนที่จะอธิบายแต่ละประเภทด้วยตัวอย่าง

ร่วมเป็นผู้ขายกับเราที่ คืนสินค้า แถวที่ไม่ตรงกัน
อินเนอร์ (Theta / EQUI / เนเชอรัล) แถวที่ตรงตามเงื่อนไขในทั้งสองตาราง ปรับตัวลดลง
ด้านนอกซ้าย แถวซ้ายทั้งหมดรวมถึงคู่ที่ตรงกัน เก็บจากด้านซ้าย ว่างเปล่าทางด้านขวา
ขวานอก แถวขวาทั้งหมดบวกกับการจับคู่ เก็บจากทางขวา เว้นว่างทางซ้าย
ด้านนอกทั้งหมด ทุกแถวจากทั้งสองตาราง เก็บจากทั้งสองอย่าง เว้นว่างไว้เมื่อขาดหายไป

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

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

การเชื่อมแบบ Inner Join หรือ Equijoin คือการเชื่อมข้อมูลโดยใช้ตัวเปรียบเทียบ โดยใช้การเปรียบเทียบความเท่าเทียมกันในเงื่อนไขการเชื่อม อย่างไรก็ตาม หากคุณใช้ตัวดำเนินการเปรียบเทียบอื่นๆ เช่น “>” จะไม่เรียกว่า Equijoin อีกต่อไป Inner Join ยังแบ่งออกเป็นสามประเภทย่อย:

  • ธีต้าเข้าร่วม
  • เข้าร่วมอย่างเป็นธรรมชาติ
  • EQUI เข้าร่วม

ธีต้าเข้าร่วม

ธีต้าเข้าร่วม ช่วยให้คุณสามารถรวมสองตารางเข้าด้วยกันโดยใช้เงื่อนไขที่แสดงด้วยค่าเธต้า การรวมแบบเธต้าใช้ได้กับตัวดำเนินการเปรียบเทียบทั้งหมด โดยใช้สัญลักษณ์ แทน θกรณีทั่วไปของการดำเนินการ JOIN เรียกว่า theta join

ไวยากรณ์:

A ⋈θ B

การเชื่อมต่อแบบเธต้า (theta join) สามารถใช้เงื่อนไขใดก็ได้ในเกณฑ์การเลือก

พิจารณาตารางต่อไปนี้

ตาราง A ตาราง B
คอลัมน์ 1 คอลัมน์ 2 คอลัมน์ 1 คอลัมน์ 2
1 1 1 1
1 2 1 3

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

A ⋈ A.column 2 > B.column 2 (B)
A ⋈ A.คอลัมน์ 2 > B.คอลัมน์ 2 (B)
คอลัมน์ 1 คอลัมน์ 2
1 2

EQUI เข้าร่วม

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

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

A ⋈ A.column 2 = B.column 2 (B)
A ⋈ A.คอลัมน์ 2 = B.คอลัมน์ 2 (B)
คอลัมน์ 1 คอลัมน์ 2
1 1

การรวมแบบธรรมชาติ (⋈)

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

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

ตัวอย่าง: พิจารณาตารางสองตารางต่อไปนี้

C
หนุ่ม สี่เหลี่ยมด้านเท่า
2 4
3 9
D
หนุ่ม ลูกบาศก์
2 8
3 18
C ⋈ D
ค ⋈ ดี
หนุ่ม สี่เหลี่ยมด้านเท่า ลูกบาศก์
2 4 8
3 9 18

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

An การเข้าร่วมภายนอก การเชื่อมตารางแบบนี้ไม่จำเป็นต้องมีข้อมูลที่ตรงกันในทุกระเบียนของตารางทั้งสองที่เชื่อมกัน ในการเชื่อมตารางแบบนี้ ตารางจะเก็บรักษาระเบียนแต่ละรายการไว้แม้ว่าจะไม่มีระเบียนอื่นที่ตรงกันก็ตาม การเชื่อมตารางแบบภายนอก (Outer Join) มี 3 ประเภท ได้แก่:

  • เข้าร่วมด้านนอกซ้าย
  • เข้าร่วมด้านนอกขวา
  • เข้าร่วมภายนอกเต็มรูปแบบ

เข้าร่วมด้านนอกซ้าย (A ⟕ B)

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

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

พิจารณาตารางสองตารางต่อไปนี้

A
หนุ่ม สี่เหลี่ยมด้านเท่า
2 4
3 9
4 16
B
หนุ่ม ลูกบาศก์
2 8
3 18
5 75
A Left Outer Join B
เอ ⟕ บี
หนุ่ม สี่เหลี่ยมด้านเท่า ลูกบาศก์
2 4 8
3 9 18
4 16 -

การเชื่อมแบบ Right Outer Join (A ⟖ B)

เข้าร่วมด้านนอกขวา การเชื่อมตารางด้านขวา (Right Outer Join) จะส่งคืนคอลัมน์ทั้งหมดจากตารางด้านขวา แม้ว่าจะไม่พบแถวที่ตรงกันในตารางด้านซ้ายก็ตาม หากไม่พบแถวที่ตรงกันในตารางด้านซ้าย จะส่งคืนค่าว่าง (null) การเชื่อมตารางด้านขวาเป็นสิ่งที่ตรงกันข้ามกับการเชื่อมตารางด้านซ้าย (Left Join)

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

A Right Outer Join B
เอ ⟖ บี
หนุ่ม ลูกบาศก์ สี่เหลี่ยมด้านเท่า
2 8 4
3 18 9
5 75 -

การเชื่อมต่อภายนอกแบบเต็ม (A ⟗ B)

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

ตัวอย่าง:

A Full Outer Join B
เอ ⟗ บี
หนุ่ม สี่เหลี่ยมด้านเท่า ลูกบาศก์
2 4 8
3 9 18
4 16 -
5 - 75

คำถามที่พบบ่อย

การเชื่อมตารางแบบ Inner Join จะคืนค่าเฉพาะแถวที่ตรงกันในทั้งสองตารางเท่านั้น ส่วนการเชื่อมตารางแบบ Outer Join จะเก็บแถวที่ไม่ตรงกันจากตารางใดตารางหนึ่งหรือทั้งสองตารางไว้ด้วย โดยจะเติมค่าว่าง (null) ลงในส่วนที่ขาดหายไป

การเชื่อมต่อแบบ Theta Join สามารถใช้ตัวดำเนินการเปรียบเทียบใดก็ได้ เช่น มากกว่า หรือ น้อยกว่า ส่วนการเชื่อมต่อแบบ EQUI Join คือการเชื่อมต่อแบบ Theta Join ที่จำกัดให้ใช้เฉพาะตัวดำเนินการเท่ากับเท่านั้น ดังนั้นจึงจับคู่เฉพาะค่าที่เท่ากันเท่านั้น

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

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

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

สรุปโพสต์นี้ด้วย: