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: