การใช้คำสั่ง FULL OUTER JOIN ใน SQL เป็นการรวมข้อมูลจากสองตารางโดยดึงข้อมูลที่ตรงกันจากทั้งสองตารางพร้อมกับข้อมูลที่ไม่มีคู่ตรงกันจากทั้งสองตารางด้วย ในกรณีที่ไม่มีคู่ข้อมูลในอีกตารางหนึ่ง ค่าจะแสดงเป็น NULL
รูปแบบคำสั่ง
SELECT columns
FROM table1
FULL OUTER JOIN table2
ON table1.column = table2.column;
สร้างตารางตัวอย่าง
สมมติว่าเรามีตาราง 2 ตารางดังนี้
ตาราง Employees
SQL
CREATE TABLE Employees (
emp_id INT PRIMARY KEY,
emp_name VARCHAR(100)
);SQL
INSERT INTO Employees (emp_id, emp_name)
VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie');
ตาราง Projects
SQL
CREATE TABLE Projects (
proj_id INT PRIMARY KEY,
emp_id INT,
proj_name VARCHAR(100),
FOREIGN KEY (emp_id) REFERENCES Employees(emp_id)
);SQL
INSERT INTO Projects (proj_id, emp_id, proj_name)
VALUES
(101, 1, 'Project A'),
(102, 2, 'Project B'),
(103, 3, 'Project C');
จากตารางนี้ เรามีข้อมูลของพนักงาน (Employees) และโครงการ (Projects) ที่พนักงานทำงานอยู่ สังเกตว่า emp_id ของพนักงาน 3 (Charlie) ไม่มีในตาราง Projects และ emp_id ของพนักงาน 4 (จาก Projects) ไม่มีในตาราง Employees
การใช้ FULL OUTER JOIN
SQL
SELECT e.emp_id, e.emp_name, p.proj_id, p.proj_name
FROM Employees e
FULL OUTER JOIN Projects p
ON e.emp_id = p.emp_id;ผลลัพธ์

- แถวที่ 1: พนักงาน
Alice(emp_id 1) ทำงานในProject A(proj_id 101) - แถวที่ 2: พนักงาน
Bob(emp_id 2) ทำงานในProject B(proj_id 102) - แถวที่ 3:
Charlie(emp_id 3) ไม่มีโปรเจคใด ๆ ดังนั้นค่าproj_idและproj_nameเป็นNULL - แถวที่ 4:
Project C(proj_id 103) ไม่มีพนักงานที่ทำงานในโปรเจคนี้ (emp_id ของพนักงานใน Project C ไม่มีอยู่ในตาราง Employees)
การประยุกต์ใช้งาน FULL OUTER JOIN รูปแบบต่าง ๆ
การนับจำนวนข้อมูลที่มีคู่ตรงกันและไม่มีคู่ตรงกัน FULL OUTER JOIN ช่วยให้เราสามารถดูความสัมพันธ์ระหว่างสองตารางได้ เช่น
SQL
SELECT
COUNT(CASE WHEN e.emp_id IS NOT NULL AND p.proj_id IS NOT NULL THEN 1 END) AS matched,
COUNT(CASE WHEN e.emp_id IS NOT NULL AND p.proj_id IS NULL THEN 1 END) AS unmatched_employees,
COUNT(CASE WHEN e.emp_id IS NULL AND p.proj_id IS NOT NULL THEN 1 END) AS unmatched_projects
FROM Employees e
FULL OUTER JOIN Projects p
ON e.emp_id = p.emp_id;ผลลัพธ์

matched: จำนวนข้อมูลที่มีคู่ตรงกันในทั้งสองตาราง (Alice, Bob)unmatched_employees: จำนวนพนักงานที่ไม่มีโปรเจค (Charlie)unmatched_projects: จำนวนโปรเจคที่ไม่มีพนักงาน (Project C)
การจัดการข้อมูล NULL ในกรณีที่ต้องการแทนที่ค่า NULL ด้วยค่าอื่น ๆ เพื่อให้ง่ายต่อการอ่าน เช่นการใช้ COALESCE
SQL
SELECT
COALESCE(e.emp_id, 'No Employee') AS emp_id,
COALESCE(e.emp_name, 'No Name') AS emp_name,
COALESCE(p.proj_id, 'No Project') AS proj_id,
COALESCE(p.proj_name, 'No Project Name') AS proj_name
FROM Employees e
FULL OUTER JOIN Projects p
ON e.emp_id = p.emp_id;ผลลัพธ์

สรุป
- FULL OUTER JOIN ช่วยให้สามารถรวมข้อมูลจากสองตารางและแสดงข้อมูลที่มีในทั้งสองตารางรวมถึงข้อมูลที่ไม่มีคู่ตรงกันจากตารางใดตารางหนึ่ง
- การใช้งาน FULL OUTER JOIN เหมาะสำหรับการวิเคราะห์ข้อมูลในระบบที่ต้องการดูข้อมูลทั้งหมดไม่ว่าจะมีความสัมพันธ์ระหว่างตารางหรือไม่
