SQL การใช้งาน UNION

การใช้งาน UNION ใน SQL เป็นวิธีการรวมผลลัพธ์จากหลายคิวรี (queries) ให้อยู่ในชุดข้อมูลเดียว โดยข้อมูลจะต้องมีคอลัมน์และประเภทข้อมูลที่ตรงกัน คิวรีที่ใช้งาน UNION จะคืนค่าทั้งหมดจากคิวรีทั้งสอง โดยที่ UNION จะลบแถวที่ซ้ำออก (หากต้องการให้แสดงแถวที่ซ้ำด้วย ให้ใช้ UNION ALL)

รูปแบบพื้นฐานของ UNION

SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2;

UNION ALL จะรวมผลลัพธ์ทั้งหมดจากหลายคิวรีโดยไม่ลบข้อมูลซ้ำ

SELECT column1, column2 FROM table1
UNION ALL
SELECT column1, column2 FROM table2;

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

สมมุติว่าเรามี 2 ตารางคือ employees และ managers

ตาราง employees

SQL
CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    name VARCHAR(50),
    department VARCHAR(50)
);

INSERT INTO employees (employee_id, name, department) VALUES
(1, 'John', 'Sales'),
(2, 'Alice', 'Marketing'),
(3, 'Bob', 'Sales');

ตาราง managers

SQL
CREATE TABLE managers (
    manager_id INT PRIMARY KEY,
    name VARCHAR(50),
    department VARCHAR(50)
);

INSERT INTO managers (manager_id, name, department) VALUES
(1, 'Sarah', 'Sales'),
(2, 'James', 'Marketing'),
(3, 'Maria', 'HR');

การใช้ UNION เพื่อรวมข้อมูลไม่ซ้ำ

เราต้องการรวมข้อมูลจากทั้งสองตารางให้ได้รายชื่อพนักงานและผู้จัดการทั้งหมด โดยไม่ต้องการข้อมูลที่ซ้ำกัน

SQL
SELECT name, department FROM employees
UNION
SELECT name, department FROM managers;

ในตัวอย่างนี้ เราจะได้รายชื่อบุคคลจากทั้งสองตารางโดยไม่มีข้อมูลซ้ำกัน เช่น ไม่มีการแสดงแถวของ “Sarah” ซ้ำ

การใช้ UNION ALL เพื่อรวมข้อมูลรวมถึงข้อมูลซ้ำ

หากต้องการให้แสดงข้อมูลทั้งหมดรวมถึงข้อมูลที่ซ้ำกัน ใช้ UNION ALL ดังนี้

SQL
SELECT name, department FROM employees
UNION ALL
SELECT name, department FROM managers;

ในตัวอย่างนี้ “Sarah” และ “James” จะถูกแสดงซ้ำ เนื่องจากมีทั้งในตาราง employees และ managers

การใช้ UNION กับการกรองข้อมูล

เราสามารถกรองข้อมูลจากแต่ละตารางก่อนที่จะใช้ UNION เช่น ต้องการรวมเฉพาะผู้ที่อยู่ในแผนก “Sales” จากทั้งสองตาราง

SQL
SELECT name, department FROM employees WHERE department = 'Sales'
UNION
SELECT name, department FROM managers WHERE department = 'Sales';

ในตัวอย่างนี้จะแสดงเฉพาะบุคคลที่อยู่ในแผนก Sales จากทั้งสองตาราง

ข้อสังเกตในการใช้งาน UNION

  1. จำนวนคอลัมน์ในแต่ละคิวรีต้องเท่ากัน
  2. ประเภทข้อมูลของคอลัมน์ต้องตรงกัน เช่น ถ้าคอลัมน์แรกของคิวรีแรกเป็น VARCHAR คอลัมน์แรกของคิวรีถัดไปก็ต้องเป็น VARCHAR เช่นกัน
  3. ชื่อคอลัมน์ของผลลัพธ์จะถูกดึงมาจากคิวรีแรก

สรุป

การใช้ UNION และ UNION ALL เป็นวิธีที่มีประสิทธิภาพในการรวมผลลัพธ์จากหลายคิวรีเข้าด้วยกัน โดยที่ UNION จะลบข้อมูลที่ซ้ำกันออก ในขณะที่ UNION ALL จะเก็บข้อมูลทั้งหมดรวมถึงข้อมูลที่ซ้ำ

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