Chúng ta có thể sử dụng câu lệnh SQL INSERT
để chèn một hàng vào bảng. Chúng ta cũng có thể sử dụng nó để chèn nhiều hàng
Dưới đây là bảy cách để chèn nhiều hàng vào một bảng trong SQL. Hầu hết các ví dụ này sẽ hoạt động trong các RDBMS chính, có thể ngoại trừ Oracle. Nhưng đừng lo, tôi đã bao gồm một ví dụ dành riêng cho Oracle
Sử dụng nhiều câu lệnh INSERT
Một cách để chèn nhiều hàng là sử dụng câu lệnh INSERT
riêng cho mỗi hàng
INSERT INTO Pets [PetId, PetTypeId, OwnerId, PetName, DOB]
VALUES [ 1, 2, 3, 'Fluffy', '2020-11-20' ];
INSERT INTO Pets [PetId, PetTypeId, OwnerId, PetName, DOB]
VALUES [ 2, 3, 3, 'Fetch', '2019-08-16' ];
INSERT INTO Pets [PetId, PetTypeId, OwnerId, PetName, DOB]
VALUES [ 3, 2, 2, 'Scratch', '2018-10-01' ];
Ở đây, chúng tôi đã chèn ba hàng vào một bảng có tên là
INSERT INTO Pets [PetId, PetTypeId, OwnerId, PetName, DOB]
VALUES
[1, 2, 3, 'Fluffy', '2020-11-20'],
[2, 3, 3, 'Fetch', '2019-08-16'],
[3, 2, 2, 'Scratch', '2018-10-01'];
0. Mỗi hàng có câu lệnh INSERT
riêngCung cấp tất cả dữ liệu trong khoản INSERT INTO Pets [PetId, PetTypeId, OwnerId, PetName, DOB]
VALUES
[1, 2, 3, 'Fluffy', '2020-11-20'],
[2, 3, 3, 'Fetch', '2019-08-16'],
[3, 2, 2, 'Scratch', '2018-10-01'];
2
INSERT INTO Pets [PetId, PetTypeId, OwnerId, PetName, DOB]
VALUES
[1, 2, 3, 'Fluffy', '2020-11-20'],
[2, 3, 3, 'Fetch', '2019-08-16'],
[3, 2, 2, 'Scratch', '2018-10-01'];
Trong hầu hết các RDBMS chính [ngoại trừ Oracle], chúng ta có thể truyền dữ liệu cho nhiều hàng trong một mệnh đề
INSERT INTO Pets [PetId, PetTypeId, OwnerId, PetName, DOB]
VALUES
[1, 2, 3, 'Fluffy', '2020-11-20'],
[2, 3, 3, 'Fetch', '2019-08-16'],
[3, 2, 2, 'Scratch', '2018-10-01'];
2INSERT INTO Pets [PetId, PetTypeId, OwnerId, PetName, DOB]
VALUES
[1, 2, 3, 'Fluffy', '2020-11-20'],
[2, 3, 3, 'Fetch', '2019-08-16'],
[3, 2, 2, 'Scratch', '2018-10-01'];
Ở đây, chúng tôi đã sử dụng một câu lệnh INSERT
duy nhất, với dữ liệu của mỗi hàng được phân tách bằng dấu phẩy
Nối các hàng với câu lệnh INSERT INTO Pets [PetId, PetTypeId, OwnerId, PetName, DOB]
VALUES
[1, 2, 3, 'Fluffy', '2020-11-20'],
[2, 3, 3, 'Fetch', '2019-08-16'],
[3, 2, 2, 'Scratch', '2018-10-01'];
5 và toán tử INSERT INTO Pets [PetId, PetTypeId, OwnerId, PetName, DOB]
VALUES
[1, 2, 3, 'Fluffy', '2020-11-20'],
[2, 3, 3, 'Fetch', '2019-08-16'],
[3, 2, 2, 'Scratch', '2018-10-01'];
6
INSERT INTO Pets [PetId, PetTypeId, OwnerId, PetName, DOB]
VALUES
[1, 2, 3, 'Fluffy', '2020-11-20'],
[2, 3, 3, 'Fetch', '2019-08-16'],
[3, 2, 2, 'Scratch', '2018-10-01'];
INSERT INTO Pets [PetId, PetTypeId, OwnerId, PetName, DOB]
VALUES
[1, 2, 3, 'Fluffy', '2020-11-20'],
[2, 3, 3, 'Fetch', '2019-08-16'],
[3, 2, 2, 'Scratch', '2018-10-01'];
Nếu DBMS của bạn không hỗ trợ phương pháp trên để chèn nhiều hàng trong một câu lệnh INSERT
, hãy thử phương pháp này
INSERT INTO Pets [ PetId, PetTypeId, OwnerId, PetName, DOB ]
SELECT 1, 2, 3, 'Fluffy', '2020-11-20'
UNION ALL
SELECT 2, 3, 3, 'Fetch', '2019-08-16'
UNION ALL
SELECT 3, 2, 2, 'Scratch', '2018-10-01';
Ở đây, chúng tôi đang chọn từng hàng bằng câu lệnh
INSERT INTO Pets [PetId, PetTypeId, OwnerId, PetName, DOB]
VALUES
[1, 2, 3, 'Fluffy', '2020-11-20'],
[2, 3, 3, 'Fetch', '2019-08-16'],
[3, 2, 2, 'Scratch', '2018-10-01'];
8, sau đó sử dụng toán tử INSERT INTO Pets [PetId, PetTypeId, OwnerId, PetName, DOB]
VALUES
[1, 2, 3, 'Fluffy', '2020-11-20'],
[2, 3, 3, 'Fetch', '2019-08-16'],
[3, 2, 2, 'Scratch', '2018-10-01'];
6 để nối hàng đó với hàng tiếp theoChèn nhiều hàng trong Oracle
Các ví dụ về câu lệnh đơn-INSERT
ở trên sẽ không hoạt động với Cơ sở dữ liệu Oracle [ít nhất, không phải tại thời điểm viết]. Chúng tôi vẫn có thể sử dụng nhiều câu lệnh INSERT
để chèn nhiều hàng trong Oracle, nhưng nếu chúng tôi muốn làm điều đó trong một câu lệnh INSERT
duy nhất, chúng tôi sẽ cần sử dụng một cú pháp khác
Đây là một ví dụ về việc chèn nhiều hàng trong Oracle
INSERT INTO Products [ProductId, ProductName, Price]
WITH p AS [
SELECT 1, 'Left Handed Screwdriver', 10.50 FROM dual UNION ALL
SELECT 2, 'Right Handed Screwdriver', 22.75 FROM dual UNION ALL
SELECT 3, 'Bottomless Coffee Cup [4 pack]', 15.00 FROM dual UNION ALL
SELECT 4, 'Urban Dictionary Version 2.3', 75 FROM dual UNION ALL
SELECT 5, 'Beer Water', 15 FROM dual
]
SELECT * FROM p;
Đây chỉ là một trong ít nhất bốn cách chúng ta có thể chèn nhiều hàng trong Oracle
Sử dụng Tuyên bố INSERT INTO Pets [ PetId, PetTypeId, OwnerId, PetName, DOB ]
SELECT 1, 2, 3, 'Fluffy', '2020-11-20'
UNION ALL
SELECT 2, 3, 3, 'Fetch', '2019-08-16'
UNION ALL
SELECT 3, 2, 2, 'Scratch', '2018-10-01';
3
INSERT INTO Pets [ PetId, PetTypeId, OwnerId, PetName, DOB ]
SELECT 1, 2, 3, 'Fluffy', '2020-11-20'
UNION ALL
SELECT 2, 3, 3, 'Fetch', '2019-08-16'
UNION ALL
SELECT 3, 2, 2, 'Scratch', '2018-10-01';
Chúng ta có thể sử dụng câu lệnh
INSERT INTO Pets [ PetId, PetTypeId, OwnerId, PetName, DOB ]
SELECT 1, 2, 3, 'Fluffy', '2020-11-20'
UNION ALL
SELECT 2, 3, 3, 'Fetch', '2019-08-16'
UNION ALL
SELECT 3, 2, 2, 'Scratch', '2018-10-01';
4 để chèn kết quả của một truy vấn vào một bảng mớiCREATE TABLE Pets2 AS
[SELECT * FROM Pets];
Thao tác này tạo một bảng mới có tên là
INSERT INTO Pets [ PetId, PetTypeId, OwnerId, PetName, DOB ]
SELECT 1, 2, 3, 'Fluffy', '2020-11-20'
UNION ALL
SELECT 2, 3, 3, 'Fetch', '2019-08-16'
UNION ALL
SELECT 3, 2, 2, 'Scratch', '2018-10-01';
5 [có cùng định nghĩa với INSERT INTO Pets [ PetId, PetTypeId, OwnerId, PetName, DOB ]
SELECT 1, 2, 3, 'Fluffy', '2020-11-20'
UNION ALL
SELECT 2, 3, 3, 'Fetch', '2019-08-16'
UNION ALL
SELECT 3, 2, 2, 'Scratch', '2018-10-01';
6] và chèn kết quả truy vấn vào đóTiêu chuẩn SQL yêu cầu dấu ngoặc đơn xung quanh mệnh đề truy vấn phụ, nhưng chúng có thể là tùy chọn trong DBMS của bạn [ví dụ: PostgreSQL]
Sử dụng Tuyên bố INSERT INTO Pets [ PetId, PetTypeId, OwnerId, PetName, DOB ]
SELECT 1, 2, 3, 'Fluffy', '2020-11-20'
UNION ALL
SELECT 2, 3, 3, 'Fetch', '2019-08-16'
UNION ALL
SELECT 3, 2, 2, 'Scratch', '2018-10-01';
7
INSERT INTO Pets [ PetId, PetTypeId, OwnerId, PetName, DOB ]
SELECT 1, 2, 3, 'Fluffy', '2020-11-20'
UNION ALL
SELECT 2, 3, 3, 'Fetch', '2019-08-16'
UNION ALL
SELECT 3, 2, 2, 'Scratch', '2018-10-01';
Trong các DBMS như SQL Server và PostgreSQL, chúng tôi có tùy chọn sử dụng câu lệnh
INSERT INTO Pets [ PetId, PetTypeId, OwnerId, PetName, DOB ]
SELECT 1, 2, 3, 'Fluffy', '2020-11-20'
UNION ALL
SELECT 2, 3, 3, 'Fetch', '2019-08-16'
UNION ALL
SELECT 3, 2, 2, 'Scratch', '2018-10-01';
7 thay cho câu lệnh INSERT INTO Pets [ PetId, PetTypeId, OwnerId, PetName, DOB ]
SELECT 1, 2, 3, 'Fluffy', '2020-11-20'
UNION ALL
SELECT 2, 3, 3, 'Fetch', '2019-08-16'
UNION ALL
SELECT 3, 2, 2, 'Scratch', '2018-10-01';
4SELECT * INTO Pets2
FROM Pets;
Ví dụ này thực hiện tương tự như ví dụ trước – nó tạo một bảng mới có tên là
INSERT INTO Pets [ PetId, PetTypeId, OwnerId, PetName, DOB ]
SELECT 1, 2, 3, 'Fluffy', '2020-11-20'
UNION ALL
SELECT 2, 3, 3, 'Fetch', '2019-08-16'
UNION ALL
SELECT 3, 2, 2, 'Scratch', '2018-10-01';
5 và chèn nội dung của INSERT INTO Pets [ PetId, PetTypeId, OwnerId, PetName, DOB ]
SELECT 1, 2, 3, 'Fluffy', '2020-11-20'
UNION ALL
SELECT 2, 3, 3, 'Fetch', '2019-08-16'
UNION ALL
SELECT 3, 2, 2, 'Scratch', '2018-10-01';
6 vào đóMariaDB hỗ trợ cú pháp này, nhưng nó chèn tập kết quả vào một biến. Trong Oracle, nó gán các giá trị đã chọn cho các biến hoặc bộ sưu tập. MySQL và SQLite hoàn toàn không hỗ trợ câu lệnh
INSERT INTO Pets [ PetId, PetTypeId, OwnerId, PetName, DOB ]
SELECT 1, 2, 3, 'Fluffy', '2020-11-20'
UNION ALL
SELECT 2, 3, 3, 'Fetch', '2019-08-16'
UNION ALL
SELECT 3, 2, 2, 'Scratch', '2018-10-01';
7Sử dụng Tuyên bố INSERT INTO Products [ProductId, ProductName, Price]
WITH p AS [
SELECT 1, 'Left Handed Screwdriver', 10.50 FROM dual UNION ALL
SELECT 2, 'Right Handed Screwdriver', 22.75 FROM dual UNION ALL
SELECT 3, 'Bottomless Coffee Cup [4 pack]', 15.00 FROM dual UNION ALL
SELECT 4, 'Urban Dictionary Version 2.3', 75 FROM dual UNION ALL
SELECT 5, 'Beer Water', 15 FROM dual
]
SELECT * FROM p;
3
INSERT INTO Products [ProductId, ProductName, Price]
WITH p AS [
SELECT 1, 'Left Handed Screwdriver', 10.50 FROM dual UNION ALL
SELECT 2, 'Right Handed Screwdriver', 22.75 FROM dual UNION ALL
SELECT 3, 'Bottomless Coffee Cup [4 pack]', 15.00 FROM dual UNION ALL
SELECT 4, 'Urban Dictionary Version 2.3', 75 FROM dual UNION ALL
SELECT 5, 'Beer Water', 15 FROM dual
]
SELECT * FROM p;
Một cách khác để chèn nhiều hàng vào một bảng từ một truy vấn là sử dụng câu lệnh
INSERT INTO Products [ProductId, ProductName, Price]
WITH p AS [
SELECT 1, 'Left Handed Screwdriver', 10.50 FROM dual UNION ALL
SELECT 2, 'Right Handed Screwdriver', 22.75 FROM dual UNION ALL
SELECT 3, 'Bottomless Coffee Cup [4 pack]', 15.00 FROM dual UNION ALL
SELECT 4, 'Urban Dictionary Version 2.3', 75 FROM dual UNION ALL
SELECT 5, 'Beer Water', 15 FROM dual
]
SELECT * FROM p;
3INSERT INTO Pets2
SELECT * FROM Pets;
Tuy nhiên, phương pháp này yêu cầu bảng đã tồn tại. Do đó, trước khi chạy đoạn mã đó, chúng ta cần tạo bảng
INSERT INTO Pets [ PetId, PetTypeId, OwnerId, PetName, DOB ]
SELECT 1, 2, 3, 'Fluffy', '2020-11-20'
UNION ALL
SELECT 2, 3, 3, 'Fetch', '2019-08-16'
UNION ALL
SELECT 3, 2, 2, 'Scratch', '2018-10-01';
5 trước