跳到主要内容

เนื้อหาภาษาไทย / 泰语内容

系统指南 内容已审核

การ JOIN ตารางคืออะไร?

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

การ JOIN ตารางคืออะไร?

ในบทเรียนก่อนหน้า เราได้เรียนรู้เกี่ยวกับการจัดกลุ่มข้อมูลด้วย GROUP BY และการกรองกลุ่มข้อมูลด้วย HAVING ในบทนี้ เราจะมาเรียนรู้เกี่ยวกับการ JOIN ตาราง ซึ่งเป็นวิธีการรวมข้อมูลจากหลายตารางเข้าด้วยกัน เพื่อให้เราสามารถดึงข้อมูลที่เกี่ยวข้องกันจากหลายตารางได้ในคราวเดียว

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

  • ตาราง customers ที่เก็บข้อมูลลูกค้า เช่น รหัสลูกค้า ชื่อ และที่อยู่
  • ตาราง orders ที่เก็บข้อมูลการสั่งซื้อ เช่น รหัสการสั่งซื้อ รหัสลูกค้า และวันที่สั่งซื้อ

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

ทำไมต้องใช้ JOIN?

การใช้ JOIN ช่วยให้เรา:

  • ลดความซ้ำซ้อนของข้อมูล: แทนที่จะเก็บข้อมูลลูกค้าทั้งหมดไว้ในตาราง orders เราเพียงแค่เก็บรหัสลูกค้าไว้เท่านั้น
  • ปรับปรุงโครงสร้างฐานข้อมูล: แยกข้อมูลออกเป็นตารางต่างๆ ทำให้ฐานข้อมูลมีความเป็นระเบียบและง่ายต่อการจัดการ
  • ดึงข้อมูลที่เกี่ยวข้องกันได้อย่างมีประสิทธิภาพ: สามารถดึงข้อมูลจากหลายตารางที่เกี่ยวข้องกันได้ใน query เดียว

ประเภทของ JOIN

MySQL มี JOIN หลายประเภท แต่ในบทเรียนนี้ เราจะเน้นที่ 3 ประเภทหลักๆ คือ:

  • INNER JOIN
  • LEFT JOIN
  • RIGHT JOIN

เราจะมาดูรายละเอียดของแต่ละประเภทกัน

INNER JOIN

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

ตัวอย่าง:

สมมติว่าเรามีตาราง customers:

CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    customer_name VARCHAR(255)
);

INSERT INTO customers (customer_id, customer_name) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie');

และตาราง orders:

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    order_date DATE
);

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'),
(104, 4, '2023-10-29');

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

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

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

+---------------+----------+------------+
| customer_name | order_id | order_date |
+---------------+----------+------------+
| Alice         |      101 | 2023-10-26 |
| Bob           |      102 | 2023-10-27 |
| Alice         |      103 | 2023-10-28 |
+---------------+----------+------------+

จะเห็นว่ามีเพียงลูกค้าที่มีคำสั่งซื้อเท่านั้นที่ปรากฏในผลลัพธ์ ลูกค้าที่มี customer_id เป็น 4 ไม่มีอยู่ในตาราง customers จึงไม่ปรากฏในผลลัพธ์

ข้อควรระวัง: อย่าลืมระบุเงื่อนไข ON เพื่อบอก MySQL ว่าจะรวมตารางด้วยเงื่อนไขอะไร หากลืมระบุหรือระบุผิดพลาด อาจทำให้ได้ผลลัพธ์ที่ไม่ถูกต้อง

LEFT JOIN

LEFT JOIN (หรือ LEFT OUTER JOIN) จะเลือกแถวทั้งหมดจากตารางทางซ้าย (ในตัวอย่างนี้คือตาราง customers) และแถวที่ตรงกันจากตารางทางขวา (ตาราง orders) หากไม่มีแถวที่ตรงกันในตารางทางขวา คอลัมน์จากตารางทางขวาจะเป็น NULL

ตัวอย่าง:

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

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

+---------------+----------+------------+
| customer_name | order_id | order_date |
+---------------+----------+------------+
| Alice         |      101 | 2023-10-26 |
| Alice         |      103 | 2023-10-28 |
| Bob           |      102 | 2023-10-27 |
| Charlie       |     NULL | NULL       |
+---------------+----------+------------+

จะเห็นว่าลูกค้า Charlie ปรากฏในผลลัพธ์ แม้ว่าจะไม่มีคำสั่งซื้อ เนื่องจากเราใช้ LEFT JOIN ซึ่งจะเลือกแถวทั้งหมดจากตาราง customers คอลัมน์ order_id และ order_date เป็น NULL เนื่องจากไม่มีคำสั่งซื้อที่ตรงกับ customer_id ของ Charlie

กรณีใช้งานจริง: LEFT JOIN มักใช้เมื่อต้องการแสดงข้อมูลทั้งหมดจากตารางหลัก (ตารางทางซ้าย) ไม่ว่าจะมีข้อมูลที่เกี่ยวข้องในตารางอื่นหรือไม่ก็ตาม

RIGHT JOIN

RIGHT JOIN (หรือ RIGHT OUTER JOIN) จะทำงานคล้ายกับ LEFT JOIN แต่สลับด้านกัน จะเลือกแถวทั้งหมดจากตารางทางขวา (ในตัวอย่างนี้คือตาราง orders) และแถวที่ตรงกันจากตารางทางซ้าย (ตาราง customers) หากไม่มีแถวที่ตรงกันในตารางทางซ้าย คอลัมน์จากตารางทางซ้ายจะเป็น NULL

ตัวอย่าง:

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

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

+---------------+----------+------------+
| customer_name | order_id | order_date |
+---------------+----------+------------+
| Alice         |      101 | 2023-10-26 |
| Bob           |      102 | 2023-10-27 |
| Alice         |      103 | 2023-10-28 |
| NULL          |      104 | 2023-10-29 |
+---------------+----------+------------+

จะเห็นว่าคำสั่งซื้อที่มี order_id เป็น 104 ปรากฏในผลลัพธ์ แม้ว่าจะไม่มีลูกค้าที่มี customer_id เป็น 4 ในตาราง customers คอลัมน์ customer_name เป็น NULL เนื่องจากไม่มีลูกค้าที่ตรงกับ customer_id นี้

กรณีใช้งานจริง: RIGHT JOIN มักใช้เมื่อต้องการแสดงข้อมูลทั้งหมดจากตารางรอง (ตารางทางขวา) ไม่ว่าจะมีข้อมูลที่เกี่ยวข้องในตารางหลักหรือไม่ก็ตาม

ข้อสังเกต: RIGHT JOIN สามารถเขียนใหม่เป็น LEFT JOIN ได้โดยสลับลำดับของตาราง

สรุป

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

ในบทเรียนถัดไป เราจะเจาะลึกถึง INNER JOIN มากยิ่งขึ้น

Office.in.th Custom Service

想基于此结构开发或定制系统?

Office.in.th 承接企业级 Web Application、API Integration 以及政府/企业管理系统的设计与开发,并提供长期支持。

查看软件开发服务