Trong bài viết này, chúng ta sẽ cùng học cách sử dụng câu lệnh INSERT INTO SELECT
trong MySQL để chèn dữ liệu vào một bảng, nơi dữ liệu đến từ kết quả của một câu lệnh SELECT
.
Trong bài viết trước, chúng ta đã học cách chèn một hoặc nhiều hàng vào bảng bằng cách sử dụng câu lệnh INSERT
có danh sách các giá trị cột được chỉ định trong mệnh đề VALUES
.
INSERT INTO table_name(c1,c2,...) VALUES(v1,v2,..);
Bên cạnh việc sử dụng các giá trị hàng trong mệnh đề VALUES
, bạn có thể sử dụng kết quả của câu lệnh SELECT
làm nguồn dữ liệu cho câu lệnh INSERT
.
Sau đây minh họa cú pháp của câu lệnh INSERT INTO SELECT
:
INSERT INTO table_name(column_list) SELECT select_list FROM another_table WHERE condition;
Trong cú pháp này, thay vì sử dụng mệnh đề VALUES
, bạn có thể sử dụng một câu lệnh SELECT
. Câu lệnh SELECT
có thể lấy dữ liệu từ một hoặc nhiều bảng.
Câu lệnh INSERT INTO SELECT
rất hữu ích khi bạn muốn sao chép dữ liệu từ các bảng khác sang một bảng hoặc tổng hợp dữ liệu từ nhiều bảng vào một bảng.
Đầu tiên, tạo một bảng mới có tên suppliers
:
CREATE TABLE suppliers ( supplierNumber INT AUTO_INCREMENT, supplierName VARCHAR(50) NOT NULL, phone VARCHAR(50), addressLine1 VARCHAR(50), addressLine2 VARCHAR(50), city VARCHAR(50), state VARCHAR(50), postalCode VARCHAR(50), country VARCHAR(50), customerNumber INT, PRIMARY KEY (supplierNumber) );
Giả sử tất cả khách hàng từ California, USA
trở thành nhà cung cấp của công ty. Truy vấn sau tìm tất cả các khách hàng ở California, Hoa Kỳ:
SELECT customerNumber, customerName, phone, addressLine1, addressLine2, city, state, postalCode, country FROM customers WHERE country = 'USA' AND state = 'CA';
kết quả:
Thứ hai, sử dụng câu lệnh INSERT INTO ... SELECT
để chèn những khách hàng định vị California USA
từ bảng customers
vào bảng suppliers
:
INSERT INTO suppliers ( supplierName, phone, addressLine1, addressLine2, city, state, postalCode, country, customerNumber ) SELECT customerName, phone, addressLine1, addressLine2, city, state , postalCode, country, customerNumber FROM customers WHERE country = 'USA' AND state = 'CA';
Nó trả về thông báo sau cho biết 11 hàng đã được chèn thành công.
11 row(s) affected Records: 11 Duplicates: 0 Warnings: 0
Thứ ba, xác minh phần chèn bằng cách truy vấn dữ liệu từ bảng suppliers
:
SELECT * FROM suppliers;
Kết quả:
Đầu tiên, tạo một bảng mới có tên stats
:
CREATE TABLE stats ( totalProduct INT, totalCustomer INT, totalOrder INT );
Thứ hai, sử dụng câu lệnh INSERT
để chèn các giá trị xuất phát từ câu lệnh SELECT
:
INSERT INTO stats(totalProduct, totalCustomer, totalOrder) VALUES( (SELECT COUNT(*) FROM products), (SELECT COUNT(*) FROM customers), (SELECT COUNT(*) FROM orders) );
Trong ví dụ này:
SELECT
với các hàm COUNT()
để lấy tổng sản phẩm, nhân viên và đơn đặt hàng.SELECT
thay cho các giá trị trong mệnh đề VALUES
của câu lệnh INSERT
.Thứ ba, truy vấn dữ liệu từ bảng stats
:
SELECT * FROM stats;
kết quả:
Trong hướng dẫn này, bạn đã học cách sử dụng câu lệnh INSERT INTO SELECT
MySQL để chèn dữ liệu vào bảng từ tập kết quả.
Các bạn có thể tham khảo: https://www.mysqltutorial.org/mysql-insert-into-select/
Các bài viết liên quan:
Bình luận: