SQL INSERT
pernyataan paling sering digunakan untuk menyisipkan baris individual ke dalam tabel.
Tapi Anda juga bisa menyisipkan hasil kueri ke dalam tabel. Ini berarti Anda dapat menyisipkan beberapa baris sekaligus (asalkan dikembalikan oleh kueri).
Contoh Dasar
Berikut adalah contoh dasar untuk didemonstrasikan.
INSERT INTO Pets2
SELECT * FROM Pets;
Itu menyisipkan semua baris dari Pets
tabel menjadi Pets2
tabel.
Diasumsikan bahwa kita telah membuat Pets2
tabel dan memiliki definisi yang benar.
Jika tidak ada atau jika tidak memiliki definisi yang benar, maka Anda akan mendapatkan kesalahan.
Menyisipkan Data dari Beberapa Tabel
Anda dapat menggunakan metode ini untuk menyisipkan data dari beberapa tabel.
INSERT INTO PetsTypesOwners
SELECT
p.PetId,
p.PetName,
p.DOB,
pt.PetTypeId,
pt.PetType,
o.OwnerId,
o.FirstName,
o.LastName,
o.Phone,
o.Email
FROM Pets p
INNER JOIN PetTypes pt
ON p.PetTypeId = pt.PetTypeId
INNER JOIN Owners o
ON p.OwnerId = o.OwnerId;
Dalam contoh ini saya menyisipkan data dari tiga tabel ke dalam satu tabel bernama PetsTypesOwners
.
Perhatikan bahwa saya secara eksplisit mencantumkan setiap kolom. Saya melakukan ini karena kolom tujuan memiliki lebih sedikit kolom daripada gabungan ketiga tabel. Dalam hal ini, itu karena, jika saya telah memilih semua kolom, kueri akan mengembalikan kolom duplikat karena kunci asing memiliki nama dan nilai yang sama dengan kunci utama mereka.
Jika saya ingin menyertakan kolom duplikat tersebut, kolom tujuan harus menyertakan kolom duplikat tersebut, tetapi dengan nama yang berbeda untuk salah satu dari setiap pasangan duplikat.
Berikut ini contoh pemilihan semua kolom (saya akan memilihnya secara eksplisit di sini, sehingga Anda dapat melihat namanya):
INSERT INTO PetsTypesOwners2
SELECT
p.PetId,
p.OwnerId,
p.PetTypeId,
p.PetName,
p.DOB,
pt.PetTypeId,
pt.PetType,
o.OwnerId,
o.FirstName,
o.LastName,
o.Phone,
o.Email
FROM Pets p
INNER JOIN PetTypes pt
ON p.PetTypeId = pt.PetTypeId
INNER JOIN Owners o
ON p.OwnerId = o.OwnerId;
Anda dapat melihat bahwa ada dua kolom yang disebut OwnerId
dan dua disebut PetTypeId
, masing-masing dari tabel yang berbeda. Ini adalah kunci utama dan kunci asing dari tabel masing-masing.
Mengingat kolom-kolom itu adalah duplikat, saya hanya menyertakan satu dari masing-masing kolom dalam contoh sebelumnya. Tetapi untuk tujuan demo ini, saya telah menyertakannya dalam contoh ini.
Jadi untuk memenuhi INSERT INTO... SELECT
baru ini pernyataan, kita membutuhkan tabel tujuan kita untuk memiliki jumlah kolom yang benar, dan dengan definisi yang kompatibel.
Oleh karena itu, definisi tabel tujuan kita mungkin terlihat seperti ini:
CREATE TABLE PetsTypesOwners2 (
PetId int NOT NULL PRIMARY KEY,
PetPetType varchar(60) NOT NULL,
PetOwnerId int NOT NULL,
PetName varchar(60) NOT NULL,
DOB date NULL,
PetTypeId int NOT NULL,
PetType varchar(60) NOT NULL,
OwnerId int NOT NULL,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
Phone varchar(20) NOT NULL,
Email varchar(254)
);
Dalam hal ini, saya mengawali salah satu dari setiap kolom duplikat dengan Pet
. Secara khusus, saya membuat PetPetTypeId
(yang memetakan ke p.OwnerId
kolom dalam kueri) dan PetOwnerId
kolom (yang memetakan ke p.PetTypeId
kolom dalam kueri).
Penting untuk dicatat, bahwa tidak masalah apa yang Anda sebut kolom Anda di tabel tujuan. INSERT INTO... SELECT
pernyataan tidak peduli tentang itu. INSERT INTO... SELECT
pernyataan hanya tertarik pada urutan kolom.
Menyisipkan Data dari Tampilan
Anda dapat menggunakan INSERT INTO... SELECT
yang sama sintaks untuk menyisipkan data ke dalam tabel dari tampilan.
Berikut ini contoh singkatnya:
INSERT INTO PetTypeCount
SELECT * FROM vPetTypeCount;
Dalam hal ini, vPetTypeCount
adalah tampilan, dan saya memasukkan isinya ke dalam tabel bernama PetTypeCount
.
Menyisipkan Data dari Prosedur Tersimpan
Beberapa DBMS (seperti SQL Server) juga dapat menggunakan INSERT INTO... SELECT
yang sama sintaks untuk menyisipkan data ke dalam tabel dari prosedur tersimpan.
Berikut ini contoh singkatnya:
INSERT INTO PetById
EXEC uspGetPetById 2;
Sekali lagi, ini mengasumsikan bahwa kita memiliki tabel tujuan dengan definisi yang benar.
The SELECT INTO
Pernyataan
Bergantung pada DBMS Anda, ada juga SELECT INTO
pernyataan, yang dapat Anda gunakan untuk membuat tabel baru secara otomatis berdasarkan kumpulan hasil, lalu masukkan kumpulan hasil tersebut ke dalamnya.