Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

SQL INSERT INTO… SELECT Contoh

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dampak Fragmentasi pada Rencana Eksekusi

  2. Pertemuan di Tempat Kerja:Mendapatkan Kembali Ruang dari Database yang Terlalu Besar

  3. Membenarkan Mac Pro baru

  4. Cara Membuat Tabel dari SQL Query

  5. Bekerja dengan Data ODBC di DbVisualizer