INSERT ... SELECT có điều kiện: Copy dòng chọn lọc
Cú pháp cho phép chèn vào bảng đích các cột từ bảng nguồn dựa trên điều kiện WHERE.
Cú pháp
INSERT INTO bangDich (cot1, cot2, ...)
SELECT cot1, cot2, ...
FROM bangNguon
WHERE dieu_kien;
Ví dụ minh họa
Tạo bảng đích (rỗng):
CREATE TABLE CombiningInsertValuesSelect (
EmployeeId VARCHAR(10),
EmployeeName VARCHAR(100),
EmployeeAge INT
);
Tạo bảng nguồn có dữ liệu:
CREATE TABLE getAllValues (Id VARCHAR(100), Name VARCHAR(100), Age INT);
INSERT INTO getAllValues VALUES
('EMP-1','John',26), ('EMP-2','Carol',22), ('EMP-3','Sam',24),
('EMP-4','David',27), ('EMP-5','Bob',21);
Chèn chỉ nhân viên EMP-4:
INSERT INTO CombiningInsertValuesSelect (EmployeeId, EmployeeName, EmployeeAge)
SELECT Id, Name, Age FROM getAllValues WHERE Id = 'EMP-4';
Kết quả
+------------+--------------+-------------+
| EmployeeId | EmployeeName | EmployeeAge |
+------------+--------------+-------------+
| EMP-4 | David | 27 |
+------------+--------------+-------------+
Mở rộng: Biến đổi dữ liệu khi chèn
INSERT INTO bangDich (ma, ten_viet_hoa, tuoi_kep_doi)
SELECT Id, UPPER(Name), Age * 2 FROM bangNguon WHERE Age > 20;
Lưu ý
- Không dùng
VALUESkhi cóSELECT. - Số cột và thứ tự phải khớp.
- Có thể dùng
INSERT IGNOREhoặcON DUPLICATE KEY UPDATE.