0Pricing
SQL Academy · บทเรียน

กลไกของ INNER JOIN

ทำความเข้าใจ INNER JOIN ในฐานะผลคูณคาร์ทีเซียนที่ผ่านการกรอง เขียนเงื่อนไขการเชื่อมตาราง และอ่านเอาต์พุต EXPLAIN สำหรับการเชื่อมตาราง

กลไกของ INNER JOIN เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

การ INNER JOIN

INNER JOIN จะคืนค่าเฉพาะแถวที่มีคู่ตรงกันในตารางทั้งสอง (BOTH) โดยอิงตามเงื่อนไข ON

INNER JOIN พื้นฐาน

ดึงคำสั่งซื้อแต่ละรายการพร้อมผู้ใช้ของรายการนั้น:

SELECT o.id, o.total, u.email
FROM orders o
INNER JOIN users u ON u.id = o.user_id;

-- INNER is the default — you can also write:
SELECT o.id, o.total, u.email
FROM orders o
JOIN users u ON u.id = o.user_id;

เงื่อนไขหลายรายการใน ON

ส่วน ON เป็นนิพจน์บูลีนทั่วไป:

SELECT *
FROM events e
JOIN sessions s
  ON s.user_id = e.user_id
 AND e.created_at BETWEEN s.start_at AND s.end_at;

ชื่อแทน

ชื่อแทนช่วยทำให้คำสั่งสอบถามสั้นลงและหลีกเลี่ยงการอ้างอิงคอลัมน์ที่กำกวม:

SELECT o.id, u.email
FROM orders AS o          -- AS is optional
JOIN users  AS u ON u.id = o.user_id;

การเชื่อมตารางสามตารางขึ้นไป

เชื่อมตารางต่อกันโดยเขียนส่วน JOIN ซ้ำ:

SELECT o.id, u.email, p.name AS product
FROM orders   o
JOIN users    u ON u.id = o.user_id
JOIN products p ON p.id = o.product_id;

USING (column)

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

SELECT o.id, total, email
FROM orders
JOIN users USING (user_id);   -- requires both tables to have user_id

NATURAL JOIN

เชื่อมตารางโดยใช้ทุกคอลัมน์ที่มีชื่อเดียวกัน โปรดระวัง เพราะวิธีนี้เปราะบางเมื่อมีการเพิ่มคอลัมน์

-- Avoid in production code:
SELECT * FROM orders NATURAL JOIN users;

เงื่อนไข JOIN เทียบกับ WHERE

สำหรับ INNER JOIN เงื่อนไขใน ON มีความหมายเชิงตรรกะเทียบเท่ากับเงื่อนไขใน WHERE แนวปฏิบัติคือให้เงื่อนไขที่กำหนดความสัมพันธ์ของ JOIN อยู่ใน ON และให้ตัวกรองแถวอยู่ใน WHERE

SELECT * FROM orders o
JOIN users u ON u.id = o.user_id   -- join condition
WHERE u.country = 'US';            -- row filter

การเพิ่มจำนวนแถวในผลลัพธ์

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

ตัวอย่างการเชื่อมตารางกับตัวเอง

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

SELECT e.full_name AS employee, m.full_name AS manager
FROM employees e
JOIN employees m ON m.id = e.manager_id;

ประสิทธิภาพของ INNER JOIN

การเชื่อมแบบ inner จะทำงานได้รวดเร็วเมื่อ:

  • คอลัมน์ที่ใช้เชื่อมมีดัชนี โดยเฉพาะฝั่ง FK
  • ตารางหนึ่งมีขนาดเล็ก ซึ่งเหมาะกับการเชื่อมแบบแฮช หรือตารางทั้งสองถูกเรียงลำดับแล้ว ซึ่งเหมาะกับการเชื่อมแบบผสาน
  • กรองข้อมูลตั้งแต่เนิ่น ๆ เพื่อลดจำนวนแถวระหว่างการประมวลผล

สรุป

INNER JOIN จะเก็บเฉพาะคู่ที่ตรงกัน

  • JOIN = INNER JOIN โดยค่าเริ่มต้น
  • ON ใช้แสดงเงื่อนไขการเชื่อม
  • ชื่อแทนช่วยให้คำสั่งสอบถามสั้นลง
  • คอลัมน์ที่ใช้เชื่อมควรมีดัชนี

ตรวจสอบความเข้าใจ

orders INNER JOIN users ON users.id = orders.user_id จะคืนค่าอะไรเมื่อคำสั่งซื้อไม่มีผู้ใช้ที่ตรงกัน หรือเป็นคำสั่งซื้อกำพร้า

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

บทเรียน “กลไกของ INNER JOIN” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “กลไกของ INNER JOIN” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “กลไกของ INNER JOIN”

ทำความเข้าใจ INNER JOIN ในฐานะผลคูณคาร์ทีเซียนที่ผ่านการกรอง เขียนเงื่อนไขการเชื่อมตาราง และอ่านเอาต์พุต EXPLAIN สำหรับการเชื่อมตาราง คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่

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

บทเรียน “กลไกของ INNER JOIN” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม

ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เหตุใดจึงต้องใช้การเชื่อมตาราง (ทบทวนโมเดลเชิงสัมพันธ์)
  2. กลไกของ INNER JOIN
  3. LEFT/RIGHT JOIN และการเชื่อมตาราง OUTER
  4. การเชื่อมตารางเข้ากับตัวเองและชื่อแทน
← กลับไปที่ SQL Academy