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

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

รูปแบบ JOIN หลัก ๆ ที่ใช้ใน SQL มีดังนี้

  1. INNER JOIN
  2. LEFT JOIN
  3. RIGHT JOIN
  4. FULL OUTER JOIN
  5. CROSS JOIN
  6. SELF JOIN

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

เราจะใช้สองตารางต่อไปนี้เป็นตัวอย่าง

สร้างตาราง Customers

SQL
CREATE TABLE Customers (
    customer_id INT PRIMARY KEY,
    customer_name VARCHAR(100)
);

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

SQL
INSERT INTO Customers (customer_id, customer_name)
VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie'),
(4, 'Diana');

สร้างตาราง Orders

SQL
CREATE TABLE Orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    product_name VARCHAR(100),
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);

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

SQL
INSERT INTO Orders (order_id, customer_id, product_name)
VALUES
(101, 1, 'Laptop'),
(102, 2, 'Phone'),
(103, 1, 'Tablet'),
(104, 4, 'Monitor');

การใช้งาน INNER JOIN

INNER JOIN จะดึงข้อมูลที่มีการจับคู่กันในทั้งสองตารางตามเงื่อนไขที่กำหนด เช่น customer_id ใน Customers และ Orders ตรงกัน ข้อมูลที่ไม่ตรงกันจะถูกละทิ้ง

ตัวอย่าง

SQL
SELECT Customers.customer_name, Orders.product_name
FROM Customers
INNER JOIN Orders
ON Customers.customer_id = Orders.customer_id;

ในตัวอย่างนี้เราดึงชื่อของลูกค้าจาก Customers และชื่อสินค้าในออเดอร์จาก Orders โดยข้อมูลที่แสดงจะเป็นเฉพาะลูกค้าที่มีออเดอร์เท่านั้น

ผลลัพธ์

การใช้งาน LEFT JOIN

LEFT JOIN จะดึงข้อมูลทั้งหมดจากตารางซ้าย (ในที่นี้คือ Customers) แม้ว่าจะไม่มีการจับคู่กับข้อมูลในตารางขวา (ในที่นี้คือ Orders) ข้อมูลในตารางขวาที่ไม่สามารถจับคู่ได้จะถูกเติมค่า NULL

ตัวอย่าง

SQL
SELECT Customers.customer_name, Orders.product_name
FROM Customers
LEFT JOIN Orders
ON Customers.customer_id = Orders.customer_id;

ในตัวอย่างนี้ LEFT JOIN จะแสดงข้อมูลจาก Customers ทั้งหมด แม้ว่าบางคนจะไม่มีการสั่งสินค้า เช่น Charlie ที่ไม่มีรายการใน Orders จะถูกเติมด้วยค่า NULL สำหรับคอลัมน์ product_name

ผลลัพธ์

การใช้งาน RIGHT JOIN

RIGHT JOIN คล้ายกับ LEFT JOIN แต่จะดึงข้อมูลทั้งหมดจากตารางขวา (ในที่นี้คือ Orders) และเติมค่า NULL สำหรับข้อมูลในตารางซ้ายที่ไม่มีการจับคู่

ตัวอย่าง

SQL
SELECT Customers.customer_name, Orders.product_name
FROM Customers
RIGHT JOIN Orders
ON Customers.customer_id = Orders.customer_id;

ในตัวอย่างนี้ RIGHT JOIN จะแสดงข้อมูลจาก Orders ทั้งหมด แม้ว่าบางรายการจะไม่มีลูกค้าที่จับคู่จาก Customers ในที่นี้ทุก order_id มีการจับคู่กับ customer_id ที่ตรงกัน ทำให้ไม่มีค่า NULL

ผลลัพธ์

การใช้งาน FULL OUTER JOIN

FULL OUTER JOIN จะดึงข้อมูลจากทั้งสองตาราง หากมีการจับคู่ข้อมูล ข้อมูลนั้นจะถูกแสดง หากไม่มีการจับคู่ ข้อมูลจะถูกเติมด้วยค่า NULL

ตัวอย่าง

SQL
SELECT Customers.customer_name, Orders.product_name
FROM Customers
FULL OUTER JOIN Orders
ON Customers.customer_id = Orders.customer_id;

ในตัวอย่างนี้ ข้อมูลจากทั้งสองตารางจะแสดงทั้งหมด หากมีการจับคู่ข้อมูล จะแสดงทั้งคู่ หากไม่มีก็จะเติม NULL อย่างเช่น Charlie ที่ไม่มีการสั่งสินค้า จะถูกเติมด้วย NULL ในคอลัมน์สินค้า

ผลลัพธ์ (รันบน MS SQL Server)

หมายเหตุ: MySQL หรือ MariaDB ไม่รองรับ FULL OUTER JOIN โดยตรง

การใช้งาน CROSS JOIN

CROSS JOIN จะสร้าง Cartesian product โดยจับคู่ข้อมูลทุกแถวจากตารางซ้ายกับทุกแถวจากตารางขวา ซึ่งจะได้ผลลัพธ์เป็นจำนวนแถวเท่ากับการคูณจำนวนแถวของสองตาราง

ตัวอย่าง

SQL
SELECT Customers.customer_name, Orders.product_name
FROM Customers
CROSS JOIN Orders;

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

ผลลัพธ์

การใช้งาน SELF JOIN

SELF JOIN เป็นการทำ JOIN บนตารางเดียวกัน โดยใช้ตัวมันเองในการเชื่อมโยงข้อมูล เช่น การเชื่อมโยงข้อมูลพนักงานและหัวหน้าพนักงานในตารางเดียวกัน

ตัวอย่าง

สมมติว่ามีตาราง Employees ที่แสดงถึงพนักงานและหัวหน้า ดังนี้

SQL
-- สร้างตาราง Employees
CREATE TABLE Employees (
    employee_id INT PRIMARY KEY,
    employee_name VARCHAR(50),
    manager_id INT
);

-- แทรกข้อมูลลงในตาราง Employees
INSERT INTO Employees (employee_id, employee_name, manager_id) VALUES
(1, 'John', NULL),
(2, 'Sarah', 1),
(3, 'Mike', 1),
(4, 'Anna', 2);

ตาราง Employees

เขียนโค้ด SQL ดังนี้

SQL
SELECT e1.employee_name AS Employee, e2.employee_name AS Manager
FROM Employees e1
LEFT JOIN Employees e2
ON e1.manager_id = e2.employee_id;

ในตัวอย่างนี้ ตารางเดียวกันถูกใช้สองครั้ง (ตัวแรก e1 และตัวที่สอง e2) เพื่อดึงข้อมูลพนักงานและหัวหน้าพนักงาน โดยเชื่อมโยงผ่าน manager_id

ผลลัพธ์

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