SQL การใช้งาน INSERT INTO SELECT Statement

INSERT INTO SELECT statement ใน SQL เป็นคำสั่งที่ใช้เพื่อคัดลอกข้อมูลจากหนึ่งตาราง (หรือมากกว่า) ไปยังอีกตาราง โดยสามารถใช้ร่วมกับเงื่อนไขต่างๆ เพื่อเลือกเฉพาะข้อมูลที่ต้องการได้

การใช้งานหลักของ INSERT INTO SELECT statement:

  1. คัดลอกข้อมูลจากหนึ่งตารางไปยังอีกตาราง
  2. สามารถเลือกคอลัมน์บางส่วนหรือทั้งหมดได้
  3. สามารถใช้ร่วมกับเงื่อนไขต่างๆ เช่น WHERE เพื่อเลือกเฉพาะข้อมูลบางส่วน

รูปแบบการใช้งาน

INSERT INTO target_table (column1, column2, ...)
SELECT column1, column2, ...
FROM source_table
WHERE condition;

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

  1. สร้างตารางเป้าหมาย (target_table)
  2. คัดลอกข้อมูลจากตารางต้นทาง (source_table) และแทรกลงในตารางเป้าหมาย

เดี๋ยวเรามาสร้างตารางต้นทางกันก่อน โดยสร้างตารางชื่อ employees พร้อมทั้งแทรกข้อมูลลงไปด้วยคำสั่งดังนี้

SQL
CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    department VARCHAR(50),
    salary DECIMAL(10, 2)
);

INSERT INTO employees (employee_id, first_name, last_name, department, salary)
VALUES 
(1, 'John', 'Doe', 'HR', 50000),
(2, 'Jane', 'Smith', 'Finance', 60000),
(3, 'Michael', 'Brown', 'IT', 75000),
(4, 'Lisa', 'White', 'Finance', 62000),
(5, 'Robert', 'Johnson', 'HR', 51000);

ข้อมูลในตาราง employees จะเป็นดังนี้

ขั้นตอนต่อไปเราจะสร้างตารางเป้าหมายที่ชื่อว่า finance_employees ด้วยคำสั่งดังนี้

SQL
CREATE TABLE finance_employees (
    employee_id INT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    salary DECIMAL(10, 2)
);

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

ตัวอย่างที่ 1: คัดลอกข้อมูลบางส่วนจาก employees ไปยัง finance_employees เฉพาะพนักงานในแผนก Finance

SQL
INSERT INTO finance_employees (employee_id, first_name, last_name, salary)
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE department = 'Finance';
  • เราต้องการคัดลอกข้อมูลพนักงานที่ทำงานในแผนก Finance จากตาราง employees ไปยังตาราง finance_employees
  • เราเลือกเฉพาะคอลัมน์ที่เราต้องการ (employee_id, first_name, last_name, salary)
  • ใช้เงื่อนไข WHERE department = 'Finance' เพื่อกรองเฉพาะพนักงานที่อยู่ในแผนก Finance

ผลลัพธ์: ตาราง finance_employees จะมีข้อมูลดังนี้

ตัวอย่างที่ 2: คัดลอกข้อมูลทั้งหมดจากตารางต้นทางไปยังตารางเป้าหมาย

SQL
INSERT INTO finance_employees (employee_id, first_name, last_name, salary)
SELECT employee_id, first_name, last_name, salary
FROM employees;
  • คัดลอกข้อมูลทั้งหมดจากตาราง employees ไปยังตาราง finance_employees
  • ไม่ได้ใช้เงื่อนไข WHERE ดังนั้นข้อมูลพนักงานทุกคนจะถูกคัดลอก

หมายเหตุ: ต้องลบข้อมูลเก่าจากตัวอย่างแรกออกก่อน ไม่เช่นนั้นจะเกิดข้อผิดพลาดเพราะ employee_id ซึ่งเป็น Primary Key มีค่าซ้ำกัน

ผลลัพธ์

ตัวอย่างที่ 3: คัดลอกข้อมูลบางคอลัมน์

ในบางครั้งเราอาจต้องการคัดลอกเฉพาะบางคอลัมน์เท่านั้น เช่น ในกรณีที่ตารางเป้าหมายมีคอลัมน์น้อยกว่าตารางต้นทาง

SQL
INSERT INTO finance_employees (employee_id, first_name, salary)
SELECT employee_id, first_name, salary
FROM employees
WHERE department = 'HR';
  • ในตัวอย่างนี้เราคัดลอกเฉพาะคอลัมน์ employee_id, first_name, และ salary จากตาราง employees เฉพาะพนักงานในแผนก HR

ผลลัพธ์: ตาราง finance_employees จะมีข้อมูลดังนี้

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