INSERT INTO SELECT statement ใน SQL เป็นคำสั่งที่ใช้เพื่อคัดลอกข้อมูลจากหนึ่งตาราง (หรือมากกว่า) ไปยังอีกตาราง โดยสามารถใช้ร่วมกับเงื่อนไขต่างๆ เพื่อเลือกเฉพาะข้อมูลที่ต้องการได้
การใช้งานหลักของ INSERT INTO SELECT statement:
- คัดลอกข้อมูลจากหนึ่งตารางไปยังอีกตาราง
- สามารถเลือกคอลัมน์บางส่วนหรือทั้งหมดได้
- สามารถใช้ร่วมกับเงื่อนไขต่างๆ เช่น
WHEREเพื่อเลือกเฉพาะข้อมูลบางส่วน
รูปแบบการใช้งาน
INSERT INTO target_table (column1, column2, ...)
SELECT column1, column2, ...
FROM source_table
WHERE condition;
ขั้นตอนการใช้งาน
- สร้างตารางเป้าหมาย (
target_table) - คัดลอกข้อมูลจากตารางต้นทาง (
source_table) และแทรกลงในตารางเป้าหมาย
เดี๋ยวเรามาสร้างตารางต้นทางกันก่อน โดยสร้างตารางชื่อ employees พร้อมทั้งแทรกข้อมูลลงไปด้วยคำสั่งดังนี้
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 ด้วยคำสั่งดังนี้
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
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: คัดลอกข้อมูลทั้งหมดจากตารางต้นทางไปยังตารางเป้าหมาย
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: คัดลอกข้อมูลบางคอลัมน์
ในบางครั้งเราอาจต้องการคัดลอกเฉพาะบางคอลัมน์เท่านั้น เช่น ในกรณีที่ตารางเป้าหมายมีคอลัมน์น้อยกว่าตารางต้นทาง
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 จะมีข้อมูลดังนี้

