Câu lệnh INSERT ... SELECT cho phép chèn dữ liệu vào bảng đích từ kết quả SELECT của bảng nguồn (có thể khác database).
Cú pháp
INSERT INTO bang_dich (cot1, cot2, cot3, ...) SELECT cot1, cot2, cot3, ... FROM bang_nguon;
Ví dụ minh họa
Bảng nguồn: PopulateTableDemo
mysql> CREATE TABLE PopulateTableDemo (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Ten VARCHAR(20),
-> SoTien INT,
-> ThoiGianDen DATETIME
-> );
mysql> INSERT INTO PopulateTableDemo(Ten, SoTien, ThoiGianDen) VALUES
-> ('John', 456, '2018-02-04'),
-> ('Carol', 1000, '2019-10-21'),
-> ('Sam', 970, '2019-07-25'),
-> ('Larry', 1050, '2015-10-28');
Bảng đích: PopulateQueryFromAnotherTable (cấu trúc tương tự, tên cột khác)
mysql> CREATE TABLE PopulateQueryFromAnotherTable (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> TenNguoiDung VARCHAR(20),
-> Luong INT,
-> ThoiGianDi DATETIME
-> );
Thực hiện sao chép dữ liệu
mysql> INSERT INTO PopulateQueryFromAnotherTable (TenNguoiDung, Luong, ThoiGianDi)
-> SELECT Ten, SoTien, ThoiGianDen FROM PopulateTableDemo;
Kết quả: Query OK, 4 rows affected
Kiểm tra bảng đích
mysql> SELECT * FROM PopulateQueryFromAnotherTable;
+----+------------+--------+---------------------+ | Id | TenNguoiDung | Luong | ThoiGianDi | +----+------------+--------+---------------------+ | 1 | John | 456 | 2018-02-04 00:00:00 | | 2 | Carol | 1000 | 2019-10-21 00:00:00 | | 3 | Sam | 970 | 2019-07-25 00:00:00 | | 4 | Larry | 1050 | 2015-10-28 00:00:00 | +----+------------+--------+---------------------+
Lưu ý:
- Số cột và kiểu dữ liệu SELECT phải khớp với cột INSERT
- Cột
AUTO_INCREMENTcủa bảng đích tự động sinh giá trị - Có thể thêm
WHERE,GROUP BY,JOINtrong phần SELECT