メインコンテンツへ移動

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

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

LEFT JOIN คืออะไร?

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

LEFT JOIN คืออะไร?

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

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

หลักการทำงานของ LEFT JOIN

ลองจินตนาการว่าเรามีสองตาราง:

  • ตารางซ้าย (Left Table): customers (ข้อมูลลูกค้า)
  • ตารางขวา (Right Table): orders (ข้อมูลการสั่งซื้อ)

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

  1. เลือกข้อมูลทั้งหมดจากตาราง customers
  2. สำหรับแต่ละแถวใน customers, ค้นหาแถวที่ตรงกันในตาราง orders โดยใช้เงื่อนไขที่กำหนด (เช่น customer_id)
  3. ถ้ามีแถวที่ตรงกันใน orders, ให้รวมข้อมูลจากทั้งสองตารางเข้าด้วยกัน
  4. ถ้าไม่มีแถวที่ตรงกันใน orders, ให้รวมข้อมูลจาก customers เข้ากับ NULL สำหรับทุกคอลัมน์ของ orders

โครงสร้างของ LEFT JOIN

รูปแบบการใช้งาน LEFT JOIN เป็นดังนี้:

SELECT column1, column2, ...
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
  • table1 คือตารางซ้าย (Left Table)
  • table2 คือตารางขวา (Right Table)
  • ON table1.column_name = table2.column_name คือเงื่อนไขในการรวมตาราง โดยปกติจะเป็นคอลัมน์ที่ใช้เชื่อมโยงข้อมูลระหว่างสองตาราง (เช่น Foreign Key)

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

สมมติว่าเรามีตาราง customers และ orders ดังนี้:

-- ตาราง 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'),
(4, 'David');

-- ตาราง orders
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

INSERT INTO orders (order_id, customer_id, order_date) VALUES
(101, 1, '2023-01-15'),
(102, 2, '2023-02-20'),
(103, 1, '2023-03-10');

ถ้าเราต้องการแสดงรายชื่อลูกค้าทั้งหมด พร้อมกับรายการสั่งซื้อของพวกเขา (ถ้ามี) เราสามารถใช้ LEFT JOIN ได้ดังนี้:

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

ผลลัพธ์ที่ได้จะเป็นดังนี้:

customer_id | customer_name | order_id | order_date
-------------|---------------|----------|------------
1           | Alice         | 101      | 2023-01-15
1           | Alice         | 103      | 2023-03-10
2           | Bob           | 102      | 2023-02-20
3           | Charlie       | NULL     | NULL
4           | David         | NULL     | NULL

จากผลลัพธ์ จะเห็นว่า:

  • ลูกค้า Alice มี 2 รายการสั่งซื้อ
  • ลูกค้า Bob มี 1 รายการสั่งซื้อ
  • ลูกค้า Charlie และ David ไม่มีรายการสั่งซื้อ ทำให้ order_id และ order_date เป็น NULL

กรณีใช้งานจริงของ LEFT JOIN

LEFT JOIN มีประโยชน์ในหลายสถานการณ์ เช่น:

  • รายงาน: สร้างรายงานที่แสดงข้อมูลทั้งหมดจากตารางหลัก แม้ว่าข้อมูลในตารางรองจะไม่สมบูรณ์
  • การตรวจสอบความถูกต้องของข้อมูล: ตรวจสอบว่าข้อมูลในตารางหนึ่งมีความสัมพันธ์กับข้อมูลในอีกตารางหนึ่งอย่างถูกต้องหรือไม่
  • การวิเคราะห์ข้อมูล: วิเคราะห์ข้อมูลโดยรวมข้อมูลจากหลายตารางเข้าด้วยกัน เพื่อให้ได้มุมมองที่ครอบคลุมมากขึ้น

ตัวอย่างเพิ่มเติม: สมมติว่าเรามีตาราง products และ categories และเราต้องการแสดงรายชื่อสินค้าทั้งหมด พร้อมกับชื่อหมวดหมู่ของสินค้า (ถ้ามี) เราสามารถใช้ LEFT JOIN ได้

ข้อผิดพลาดที่พบบ่อยในการใช้ LEFT JOIN

ข้อผิดพลาดที่พบบ่อยในการใช้ LEFT JOIN ได้แก่:

  • ลืมระบุเงื่อนไข ON: การลืมระบุเงื่อนไข ON จะทำให้เกิด Cartesian Product ซึ่งเป็นการรวมทุกแถวจากตารางซ้ายเข้ากับทุกแถวจากตารางขวา ทำให้ผลลัพธ์มีขนาดใหญ่เกินไปและไม่ถูกต้อง
  • ใช้เงื่อนไข WHERE ที่ผิดพลาด: การใช้เงื่อนไข WHERE ที่อ้างอิงถึงคอลัมน์จากตารางขวา อาจทำให้แถวที่ไม่มีข้อมูลในตารางขวาถูกกรองออกไป ทำให้ LEFT JOIN ทำงานเหมือน INNER JOIN
  • ความสับสนระหว่าง LEFT JOIN, RIGHT JOIN และ INNER JOIN: การเลือกใช้ JOIN ที่ไม่ถูกต้อง อาจทำให้ผลลัพธ์ที่ได้ไม่ตรงกับความต้องการ

ตัวอย่างข้อผิดพลาด:

-- ตัวอย่างที่ผิด: ใช้ WHERE clause ที่ทำให้ LEFT JOIN ทำงานเหมือน INNER JOIN
SELECT
    customers.customer_id,
    customers.customer_name,
    orders.order_id
FROM
    customers
LEFT JOIN
    orders ON customers.customer_id = orders.customer_id
WHERE
    orders.order_id IS NOT NULL; -- ผิด!

ในตัวอย่างนี้, WHERE orders.order_id IS NOT NULL จะกรองเฉพาะลูกค้าที่มีรายการสั่งซื้อเท่านั้น ทำให้ LEFT JOIN ทำงานเหมือน INNER JOIN

สรุป

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

ในบทเรียนถัดไป เราจะเรียนรู้เกี่ยวกับ RIGHT JOIN ซึ่งเป็นการรวมข้อมูลในลักษณะที่คล้ายคลึงกัน แต่จะรักษาข้อมูลทั้งหมดจากตารางขวาไว้แทน

Office.in.th Custom Service

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

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

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