PostgreSQL ประเภทการต่อกระดูก: ต่อด้านใน ต่อด้านนอก ต่อด้านซ้าย ต่อด้านขวา

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

PostgreSQL การเชื่อมตาราง (Join) ดึงและรวมแถวจากสองตารางขึ้นไปโดยใช้คีย์ร่วมกัน ซึ่งรวมถึงการเชื่อมตารางภายใน เช่น theta, EQUI และ natural รวมถึงการเชื่อมตารางภายนอกที่ครอบคลุมผลลัพธ์ด้านซ้าย ด้านขวา และผลลัพธ์ทั้งหมด

  • 🔗 รวมกัน: การเชื่อมตาราง (Join) จะรวมคอลัมน์จากหลายตารางโดยใช้คีย์ร่วมกัน
  • 🎯 เข้าร่วมภายใน: การเชื่อมแบบ Inner Join จะส่งคืนเฉพาะแถวที่ตรงตามเงื่อนไขการเชื่อมเท่านั้น
  • ⬅️ เข้าร่วมซ้าย: LEFT OUTER JOIN จะเก็บทุกแถวจากตารางด้านซ้าย และเพิ่มค่า NULL สำหรับแถวด้านขวาที่ไม่ตรงกัน
  • ➡️ เข้าร่วมทางขวา: RIGHT OUTER JOIN จะเก็บทุกแถวจากตารางด้านขวา และเพิ่มค่า NULL สำหรับแถวด้านซ้ายที่ไม่ตรงกัน
  • 🔵 เข้าร่วมแบบเต็ม: คำสั่ง FULL OUTER JOIN จะส่งคืนทุกแถวจากทั้งสองตาราง โดยรวมถึงค่า NULL ในกรณีที่ไม่มีการจับคู่เกิดขึ้น
  • 🤖 ความช่วยเหลือจาก AI: ผู้ช่วย AI จะเลือกประเภทการเชื่อมต่อที่ถูกต้องและเขียนเงื่อนไข ON ลงไป

PostgreSQL เข้าร่วมประเภท

เข้าร่วมคืออะไร PostgreSQL?

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

PostgreSQL เข้าร่วมประเภท

การเข้าร่วมมีสองประเภท PostgreSQL:

  • รวมภายใน
  • การรวมภายนอก

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

Inner Joins มี 3 ประเภท PostgreSQL:

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

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

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

Theta join เป็นประเภทพื้นฐานที่สุดของ JOIN มันจะส่งคืนแถวทั้งหมดจากตารางที่ตรงตามเงื่อนไข JOIN

ไวยากรณ์:

SELECT columns
FROM table-1
INNER JOIN table-2
ON table-1.column = table-2.column;

พิจารณาตารางฐานข้อมูลสาธิตต่อไปนี้:

หนังสือ:

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

ราคา:

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

เราต้องการดูชื่อหนังสือแต่ละเล่มและราคาที่เกี่ยวข้อง เราสามารถรันคำสั่งต่อไปนี้:

SELECT Book.name, Price.price
FROM Book
INNER JOIN Price
ON Book.id = Price.id;

สิ่งนี้จะส่งคืนสิ่งต่อไปนี้:

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

มีเพียง 3 แถวเท่านั้นที่ตรงตามเงื่อนไขการเข้าร่วม

EQUI เข้าร่วม

การเข้าร่วม EQUI ช่วยให้เราสามารถรวมสองตารางเข้าด้วยกันโดยอิงตามความสัมพันธ์ของคีย์หลัก/คีย์ต่างประเทศ ตัวอย่างเช่น:

SELECT *
FROM Book
JOIN Price ON Book.id = Price.id;

สิ่งนี้จะส่งคืนสิ่งต่อไปนี้:

PostgreSQL EQUI เข้าร่วม

มีการส่งคืนเรกคอร์ดจากทั้งสองตารางโดยยึดตามคอลัมน์ทั่วไป นั่นคือคอลัมน์ id

เข้าร่วมตามธรรมชาติ

การเข้าร่วมประเภทนี้ทำให้เรามีวิธีอื่นในการเขียนการเข้าร่วม EQUI เราสามารถปรับปรุงตัวอย่างก่อนหน้าของเราได้โดยเพิ่มคีย์เวิร์ด NATURAL ดังที่แสดงด้านล่าง:

SELECT *
FROM Book
NATURAL JOIN Price;

สิ่งนี้จะส่งคืนสิ่งต่อไปนี้:

PostgreSQL เข้าร่วมตามธรรมชาติ

ส่งคืนคอลัมน์ ID เพียงคอลัมน์เดียวเท่านั้น NATURAL JOIN สามารถสังเกตได้ว่าคอลัมน์ id เป็นเรื่องธรรมดาในทั้งสองตาราง มีเพียงคนเดียวเท่านั้นที่ได้คืน

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

Outer Joins มี 3 ประเภท PostgreSQL:

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

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

LEFT OUTER JOIN จะส่งกลับแถวทั้งหมดในตารางทางด้านซ้ายมือและเฉพาะแถวในตารางด้านขวามือที่ตรงตามเงื่อนไขการรวมแล้ว

ไวยากรณ์:

SELECT columns
FROM table-1
LEFT OUTER JOIN table-2
ON table-1.column = table-2.column;

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

SELECT Book.name, Price.price
FROM Book
LEFT JOIN Price
ON Book.id = Price.id;

สิ่งนี้ส่งคืนสิ่งต่อไปนี้:

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

ส่งคืนทั้ง 4 แถวในตาราง Book แล้ว มีเพียง 3 แถวจากตารางราคาที่ตรงตามเงื่อนไขการรวม ดังนั้นพวกเขาจึงถูกส่งคืน หนังสือเล่มสุดท้ายไม่มีมูลค่าราคาที่สอดคล้องกัน

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

RIGHT OUTER JOIN ส่งคืนแถวทั้งหมดในตารางทางด้านขวาและแถวในตารางทางด้านซ้ายมือตรงตามเงื่อนไขการรวม

ไวยากรณ์:

SELECT columns
FROM table-1
RIGHT OUTER JOIN table-2
ON table-1.column = table-2.column;

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

SELECT Book.name, Price.price
FROM Book
RIGHT JOIN Price
ON Book.id = Price.id;

สิ่งนี้ส่งคืนสิ่งต่อไปนี้:

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

ข้อมูลทุกแถวในตาราง Price ได้ถูกส่งคืนแล้ว ส่วนข้อมูลในตาราง Book ที่ตรงตามเงื่อนไขการเชื่อมต่อเท่านั้นที่ถูกส่งคืน แถวที่ 3 ไม่มีค่าสำหรับชื่อ เนื่องจากไม่พบข้อมูลที่ตรงกัน

เข้าร่วมด้านนอกแบบเต็ม PostgreSQL

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

ไวยากรณ์:

SELECT columns
FROM table-1
FULL OUTER JOIN table-2
ON table-1.column = table-2.column;

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

SELECT Book.name, Price.price
FROM Book
FULL OUTER JOIN Price
ON Book.id = Price.id;

สิ่งนี้ส่งคืนสิ่งต่อไปนี้:

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

แถวทั้งหมดจากตารางทั้งหมดถูกส่งกลับแล้ว โดยมีค่าว่างซึ่งไม่พบรายการที่ตรงกัน

การใช้งาน pgAdmin

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

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

ขั้นตอนด้านล่างแสดงวิธีการเรียกใช้การเชื่อมต่อแบบ Inner Join แต่ละแบบใน pgAdmin

วิธีใช้ Theta เข้าร่วม PostgreSQL โดยใช้ pgAdmin

ด้านล่างนี้คือขั้นตอนการใช้งาน Theta Join PostgreSQL ใช้ pgAdmin:

ขั้นตอนที่ 1) เข้าสู่ระบบบัญชี pgAdmin ของคุณ

เปิด pgAdmin และเข้าสู่ระบบโดยใช้ข้อมูลประจำตัวของคุณ

ขั้นตอนที่ 2) สร้างฐานข้อมูลสาธิต

  • จากแถบนำทางทางด้านซ้ายให้คลิกฐานข้อมูล
  • คลิกสาธิต

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

ขั้นตอนที่ 3) พิมพ์แบบสอบถาม

พิมพ์แบบสอบถามด้านล่างในตัวแก้ไขแบบสอบถาม:

SELECT Book.name, Price.price
FROM Book
INNER JOIN Price
ON Book.id = Price.id;

ขั้นตอนที่ 4) ดำเนินการแบบสอบถาม

คลิกปุ่มดำเนินการ

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

ควรส่งคืนสิ่งต่อไปนี้:

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

EQUI เข้าร่วม

ขั้นตอน 1) เข้าสู่ระบบบัญชี pgAdmin ของคุณ

ขั้นตอน 2)

  • จากแถบนำทางทางด้านซ้ายให้คลิกฐานข้อมูล
  • คลิกสาธิต

pgAdmin EQUI เข้าร่วม

ขั้นตอน 3) พิมพ์แบบสอบถามในตัวแก้ไขแบบสอบถาม:

SELECT *
FROM Book
JOIN Price ON Book.id = Price.id;

ขั้นตอน 4) คลิกปุ่มดำเนินการ

pgAdmin EQUI เข้าร่วม

ควรส่งคืนสิ่งต่อไปนี้:

pgAdmin EQUI เข้าร่วม

เข้าร่วมตามธรรมชาติ

ขั้นตอน 1) เข้าสู่ระบบบัญชี pgAdmin ของคุณ

ขั้นตอน 2)

  • จากแถบนำทางทางด้านซ้ายให้คลิกฐานข้อมูล
  • คลิกสาธิต

pgAdmin เข้าร่วมโดยธรรมชาติ

ขั้นตอน 3) พิมพ์แบบสอบถามในตัวแก้ไขแบบสอบถาม:

SELECT *
FROM Book
NATURAL JOIN Price;

ขั้นตอน 4) คลิกปุ่มดำเนินการ

pgAdmin เข้าร่วมโดยธรรมชาติ

ควรส่งคืนสิ่งต่อไปนี้:

pgAdmin เข้าร่วมโดยธรรมชาติ

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

ขั้นตอน 1) เข้าสู่ระบบบัญชี pgAdmin ของคุณ

ขั้นตอน 2)

  • จากแถบนำทางทางด้านซ้ายให้คลิกฐานข้อมูล
  • คลิกสาธิต

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

ขั้นตอน 3) พิมพ์แบบสอบถามในตัวแก้ไขแบบสอบถาม:

SELECT Book.name, Price.price
FROM Book
INNER JOIN Price
ON Book.id = Price.id;

ขั้นตอน 4) คลิกปุ่มดำเนินการ

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

ควรส่งคืนสิ่งต่อไปนี้:

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

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

ถัดไป ให้รันคำสั่ง outer join ทั้งสามแบบใน pgAdmin โดยทำตามขั้นตอนด้านล่าง

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

ขั้นตอน 1) เข้าสู่ระบบบัญชี pgAdmin ของคุณ

ขั้นตอน 2)

  • จากแถบนำทางทางด้านซ้ายให้คลิกฐานข้อมูล
  • คลิกสาธิต

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

ขั้นตอน 3) พิมพ์แบบสอบถามในตัวแก้ไขแบบสอบถาม:

SELECT Book.name, Price.price
FROM Book
LEFT JOIN Price
ON Book.id = Price.id;

ขั้นตอน 4) คลิกปุ่มดำเนินการ

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

ควรส่งคืนสิ่งต่อไปนี้:

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

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

ขั้นตอน 1) เข้าสู่ระบบบัญชี pgAdmin ของคุณ

ขั้นตอน 2)

  • จากแถบนำทางทางด้านซ้ายให้คลิกฐานข้อมูล
  • คลิกสาธิต

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

ขั้นตอน 3) พิมพ์แบบสอบถามในตัวแก้ไขแบบสอบถาม:

SELECT Book.name, Price.price
FROM Book
RIGHT JOIN Price
ON Book.id = Price.id;

ขั้นตอน 4) คลิกปุ่มดำเนินการ

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

ควรส่งคืนสิ่งต่อไปนี้:

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

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

ขั้นตอน 1) เข้าสู่ระบบบัญชี pgAdmin ของคุณ

ขั้นตอน 2)

  • จากแถบนำทางทางด้านซ้ายให้คลิกฐานข้อมูล
  • คลิกสาธิต

pgAdmin เข้าร่วมภายนอกแบบเต็ม

ขั้นตอน 3) พิมพ์แบบสอบถามในตัวแก้ไขแบบสอบถาม:

SELECT Book.name, Price.price
FROM Book
FULL OUTER JOIN Price
ON Book.id = Price.id;

ขั้นตอน 4) คลิกปุ่มดำเนินการ

pgAdmin เข้าร่วมภายนอกแบบเต็ม

ควรส่งคืนสิ่งต่อไปนี้:

pgAdmin เข้าร่วมภายนอกแบบเต็ม

ดาวน์โหลดฐานข้อมูลที่ใช้ในบทช่วยสอนนี้

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

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

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

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

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

ใช่ คุณสามารถเชื่อมโยงคำสั่ง JOIN หลายๆ คำสั่งเข้าด้วยกันในคิวรีเดียว โดยเพิ่มตารางเพิ่มเติมแต่ละตารางด้วยคำสั่ง JOIN และเงื่อนไข ON อีกชุดหนึ่ง PostgreSQL ประเมินผลเหล่านั้นเพื่อสร้างชุดผลลัพธ์รวมชุดเดียว

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

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

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

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