กลไกของ 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_idNATURAL 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุใดจึงต้องใช้การเชื่อมตาราง (ทบทวนโมเดลเชิงสัมพันธ์)
- กลไกของ INNER JOIN
- LEFT/RIGHT JOIN และการเชื่อมตาราง OUTER
- การเชื่อมตารางเข้ากับตัวเองและชื่อแทน