SQL การใช้งาน LEFT JOIN

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

การใช้งาน LEFT JOIN

การใช้งาน LEFT JOIN สามารถนำไปใช้ในกรณีต่างๆ เช่น การรวมข้อมูลจากหลายๆ ตาราง การหาข้อมูลที่มีหรือไม่มีการเชื่อมต่อกัน และอื่นๆ

ตารางตัวอย่าง

ให้เราสร้างฐานข้อมูลตัวอย่างสองตารางคือ employees และ departments เพื่ออธิบายการใช้ LEFT JOIN ดังนี้

สร้างตาราง employees

SQL
CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    department_id INT
);

แทรกข้อมูลเข้าในตาราง

SQL
INSERT INTO employees (employee_id, first_name, last_name, department_id)
VALUES 
(1, 'John', 'Doe', 101),
(2, 'Jane', 'Smith', 102),
(3, 'Michael', 'Johnson', NULL),
(4, 'Emily', 'Davis', 101);

สร้างตาราง departments

SQL
CREATE TABLE departments (
    department_id INT PRIMARY KEY,
    department_name VARCHAR(100)
);

แทรกข้อมูลเข้าในตาราง

SQL
INSERT INTO departments (department_id, department_name)
VALUES 
(101, 'Human Resources'),
(102, 'IT'),
(103, 'Sales');

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

ตัวอย่างที่ 1: ใช้ LEFT JOIN เพื่อรวมข้อมูลจากตาราง employees กับ departments

SQL
SELECT 
    employees.employee_id, 
    employees.first_name, 
    employees.last_name, 
    departments.department_name
FROM 
    employees
LEFT JOIN 
    departments
ON 
    employees.department_id = departments.department_id;

ในตัวอย่างนี้ เรากำลังเลือกข้อมูลพนักงานจากตาราง employees และเชื่อมต่อกับตาราง departments โดยใช้ฟิลด์ department_id ที่เป็นค่ากำหนดในการเชื่อมต่อ ตารางด้านซ้ายคือ employees และตารางด้านขวาคือ departments ในกรณีที่ไม่มีข้อมูลตรงกับตารางด้านขวา ค่า department_name จะแสดงเป็น NULL เช่นกรณีของ Michael Johnson ที่ไม่มี department_id

ผลลัพธ์

ตัวอย่างที่ 2: ใช้ LEFT JOIN กับเงื่อนไขเพิ่มเติม (ใช้ WHERE)

SQL
SELECT 
    employees.employee_id, 
    employees.first_name, 
    employees.last_name, 
    departments.department_name
FROM 
    employees
LEFT JOIN 
    departments
ON 
    employees.department_id = departments.department_id
WHERE 
    departments.department_name IS NULL;

การใช้เงื่อนไขใน WHERE เพื่อกรองข้อมูลที่มีค่า department_name เป็น NULL นั้นมีประโยชน์เมื่อต้องการหาพนักงานที่ไม่มีการกำหนดแผนก (department) ในตาราง employees

ผลลัพธ์

ตัวอย่างที่ 3: ใช้ LEFT JOIN กับหลายตาราง

สมมติว่าเรามีอีกตารางหนึ่งคือ salaries ที่เก็บข้อมูลเงินเดือนของพนักงาน

สร้างตาราง

SQL
CREATE TABLE salaries (
    employee_id INT PRIMARY KEY,
    salary DECIMAL(10, 2)
);

แทรกข้อมูลเข้าในตาราง

SQL
INSERT INTO salaries (employee_id, salary)
VALUES 
(1, 50000.00),
(2, 60000.00),
(4, 55000.00);

ตัวอย่างข้อมูลในตาราง

โค้ดตัวอย่างการเชื่อมต่อทั้งสามตาราง

SQL
SELECT 
    employees.employee_id, 
    employees.first_name, 
    employees.last_name, 
    departments.department_name,
    salaries.salary
FROM 
    employees
LEFT JOIN 
    departments
ON 
    employees.department_id = departments.department_id
LEFT JOIN 
    salaries
ON 
    employees.employee_id = salaries.employee_id;

ในตัวอย่างนี้เราใช้ LEFT JOIN กับตาราง salaries เพิ่มเติม เพื่อดึงข้อมูลเงินเดือนของพนักงานที่มีในตารางนั้น อย่างไรก็ตาม หากพนักงานไม่มีข้อมูลเงินเดือน เช่น Michael Johnson (employee_id 3) ค่า salary จะแสดงเป็น NULL

ผลลัพธ์

สรุป

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

แชร์เรื่องนี้