メインコンテンツへ移動

เนื้อหาภาษาไทย / タイ語のコンテンツ

システムガイド 内容確認済み

INNER JOIN คืออะไร?

INNER JOIN คืออะไร? รวมข้อมูลเฉพาะที่มีค่าตรงกัน

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

INNER JOIN คือการรวมข้อมูลจากสองตารางขึ้นไป โดยจะเลือกเฉพาะแถวที่มีค่าในคอลัมน์ที่ใช้เชื่อมโยง (JOIN condition) ตรงกันเท่านั้น ถ้าไม่มีค่าที่ตรงกันในตารางใดตารางหนึ่ง แถวนั้นจะไม่ถูกรวมอยู่ในผลลัพธ์

เชื่อมโยงข้อมูลที่มีค่าตรงกัน: หลักการทำงานของ INNER JOIN

ลองนึกภาพว่าเรามีสองตาราง:

  • customers: เก็บข้อมูลลูกค้า (customer_id, customer_name, email)
  • orders: เก็บข้อมูลการสั่งซื้อ (order_id, customer_id, order_date)

ทั้งสองตารางมีความสัมพันธ์กันผ่าน customer_id ในตาราง customers เป็น Primary Key และในตาราง orders เป็น Foreign Key

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

รูปแบบคำสั่ง INNER JOIN

รูปแบบคำสั่ง SQL สำหรับ INNER JOIN คือ:

SELECT column1, column2, ...
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
  • SELECT column1, column2, ...: ระบุคอลัมน์ที่เราต้องการดึงข้อมูล
  • FROM table1: ระบุตารางแรก
  • INNER JOIN table2: ระบุตารางที่สองที่เราต้องการ JOIN ด้วย
  • ON table1.column_name = table2.column_name: ระบุเงื่อนไขการ JOIN โดย column_name คือคอลัมน์ที่ใช้เชื่อมโยงระหว่างสองตาราง

ตัวอย่างการใช้งาน INNER JOIN

สมมติว่าเรามีข้อมูลในตาราง customers ดังนี้:

INSERT INTO customers (customer_id, customer_name, email) VALUES
(1, 'Alice Smith', 'alice.smith@example.com'),
(2, 'Bob Johnson', 'bob.johnson@example.com'),
(3, 'Charlie Brown', 'charlie.brown@example.com');

และข้อมูลในตาราง orders ดังนี้:

INSERT INTO orders (order_id, customer_id, order_date) VALUES
(101, 1, '2023-10-26'),
(102, 2, '2023-10-27'),
(103, 1, '2023-10-28');

เราสามารถใช้คำสั่ง INNER JOIN เพื่อดึงข้อมูลชื่อลูกค้าและวันที่สั่งซื้อของลูกค้าแต่ละคนได้ดังนี้:

SELECT customers.customer_name, orders.order_date
FROM customers
INNER JOIN orders
ON customers.customer_id = orders.customer_id;

ผลลัพธ์ที่ได้คือ:

+---------------+------------+
| customer_name | order_date |
+---------------+------------+
| Alice Smith   | 2023-10-26 |
| Bob Johnson   | 2023-10-27 |
| Alice Smith   | 2023-10-28 |
+---------------+------------+

จะเห็นว่าเราได้ข้อมูลชื่อลูกค้าและวันที่สั่งซื้อ เฉพาะลูกค้าที่มีข้อมูลการสั่งซื้อในตาราง orders เท่านั้น ลูกค้า Charlie Brown ถึงแม้จะมีอยู่ในตาราง customers แต่ไม่มีข้อมูลการสั่งซื้อในตาราง orders จึงไม่ปรากฏในผลลัพธ์

ความสัมพันธ์ของ Primary Key และ Foreign Key

INNER JOIN มักจะใช้ร่วมกับความสัมพันธ์ระหว่าง Primary Key และ Foreign Key เพื่อเชื่อมโยงข้อมูลจากตารางที่เกี่ยวข้องกัน

  • Primary Key: เป็นคอลัมน์หรือกลุ่มของคอลัมน์ที่ใช้ระบุแต่ละแถวในตารางได้อย่างไม่ซ้ำกัน (Unique)
  • Foreign Key: เป็นคอลัมน์ในตารางหนึ่งที่อ้างอิงไปยัง Primary Key ในอีกตารางหนึ่ง สร้างความสัมพันธ์ระหว่างสองตาราง

ในตัวอย่างข้างต้น customer_id ในตาราง customers เป็น Primary Key และ customer_id ในตาราง orders เป็น Foreign Key ที่อ้างอิงไปยัง customer_id ในตาราง customers

การใช้ INNER JOIN ร่วมกับ Primary Key และ Foreign Key ช่วยให้เราสามารถดึงข้อมูลที่เกี่ยวข้องจากหลายตารางได้อย่างมีประสิทธิภาพและถูกต้อง

การ Alias ตารางเพื่อความสะดวก

เมื่อเรา JOIN หลายตาราง อาจทำให้คำสั่ง SQL ยาวและอ่านยาก เราสามารถใช้ Alias เพื่อกำหนดชื่อย่อให้กับตารางได้

ตัวอย่าง:

SELECT c.customer_name, o.order_date
FROM customers AS c
INNER JOIN orders AS o
ON c.customer_id = o.customer_id;

ในตัวอย่างนี้ เรากำหนด Alias c ให้กับตาราง customers และ Alias o ให้กับตาราง orders ทำให้เราสามารถอ้างอิงถึงคอลัมน์ในแต่ละตารางได้ง่ายขึ้น เช่น c.customer_name แทนที่จะต้องเขียน customers.customer_name

กรณีใช้งานจริงและข้อผิดพลาดที่พบบ่อย

กรณีใช้งานจริง:

สมมติว่าเรามีตาราง products เก็บข้อมูลสินค้า (product_id, product_name, price) และตาราง order_items เก็บข้อมูลรายการสินค้าในแต่ละการสั่งซื้อ (order_id, product_id, quantity)

เราสามารถใช้ INNER JOIN เพื่อดึงข้อมูลรายการสินค้าในแต่ละการสั่งซื้อ พร้อมทั้งชื่อสินค้าและราคาได้ดังนี้:

SELECT o.order_id, p.product_name, p.price, oi.quantity
FROM order_items AS oi
INNER JOIN products AS p
ON oi.product_id = p.product_id
INNER JOIN orders AS o
ON oi.order_id = o.order_id;

ในตัวอย่างนี้ เรา JOIN สามตารางเข้าด้วยกัน (order_items, products, และ orders) เพื่อดึงข้อมูลที่เกี่ยวข้องทั้งหมด

ข้อผิดพลาดที่พบบ่อย:

  • ลืมระบุเงื่อนไขการ JOIN (ON clause): การลืมระบุเงื่อนไขการ JOIN จะทำให้เกิด Cartesian Product ซึ่งเป็นการรวมทุกแถวจากตารางแรกเข้ากับทุกแถวจากตารางที่สอง ทำให้ได้ผลลัพธ์จำนวนมากเกินความจำเป็นและอาจทำให้ระบบทำงานช้า
  • ใช้ชื่อคอลัมน์ซ้ำกัน: หากสองตารางมีคอลัมน์ชื่อเดียวกัน ควรระบุชื่อตารางก่อนชื่อคอลัมน์เสมอ เพื่อหลีกเลี่ยงความสับสน เช่น customers.customer_id และ orders.customer_id
  • เงื่อนไขการ JOIN ไม่ถูกต้อง: การใช้เงื่อนไขการ JOIN ที่ไม่ถูกต้อง จะทำให้ได้ผลลัพธ์ที่ไม่ถูกต้องหรือไม่ตรงตามที่ต้องการ

สรุป

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

ในบทต่อไป เราจะเรียนรู้เกี่ยวกับ LEFT JOIN ซึ่งเป็นอีกประเภทการ JOIN ที่สำคัญและมีประโยชน์ในการดึงข้อมูลจากตารางหนึ่ง แม้ว่าจะไม่มีข้อมูลที่ตรงกันในอีกตารางหนึ่งก็ตาม

Office.in.th Custom Service

この構成をもとにシステムを開発・カスタマイズしたいですか?

Office.in.th は、エンタープライズ Web アプリケーション、API 連携、官民の業務管理システムの設計・開発を承り、長期的なサポートも提供します。

ソフトウェア開発サービスを見る