Nhiều lần các nhà phát triển hỏi rằng có thể chèn nhiều hàng vào một bảng trong một câu lệnh không. Hiện tại, các nhà phát triển phải viết nhiều câu lệnh chèn khi họ chèn các giá trị vào một bảng. Nó không chỉ nhàm chán mà còn tốn thời gian
Hãy cùng xem một số ví dụ thực tế để hiểu rõ hơn về khái niệm này. Chúng tôi sẽ sử dụng cơ sở dữ liệu MySQL để viết tất cả các truy vấn
ví dụ 1
Để tạo một bảng trong cơ sở dữ liệu, trước tiên, chúng ta cần chọn cơ sở dữ liệu mà chúng ta muốn tạo bảng.
Sau đó, chúng tôi sẽ viết một truy vấn để tạo một bảng có tên sinh viên trong cơ sở dữ liệu đã chọn 'dbs'
Tạo bảng sinh viên thành công
Bây giờ, chúng ta sẽ viết một truy vấn duy nhất để chèn nhiều bản ghi vào bảng sinh viên
Để xác minh rằng nhiều bản ghi được chèn vào bảng items_tbl, chúng tôi sẽ thực hiện truy vấn CHỌN
Chúng ta có thể sử dụng câu lệnh SQL
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'];
7 để 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àngDướ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 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'];
7
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'];
Một cách để chèn nhiều hàng là sử dụ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'];
7 riêng cho mỗi hàngINSERT 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 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'];
7 riêngCung cấp Tất cả Dữ liệu trong Điều 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 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'];
7 duy nhất, với dữ liệu của mỗi hàng được phân tách bằng dấu phẩyNối các hàng với các 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 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'];
7, hãy thử phương pháp nàyINSERT 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 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'];
7 ở 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 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'];
7 để chèn nhiều hàng trong Oracle, nhưng nếu chúng tôi muốn thực hiện điều đó trong một 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'];
7 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 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Đâ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ớiINSERT 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'];
3Thao 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';
4INSERT 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'];
9Ví 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 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'];
03
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'];
Một cách khác để chèn nhiều hàng vào một bảng từ truy vấn là sử dụ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'];
03INSERT 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'];
5Tuy 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