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

SQL PILIH KE Pernyataan

SQL SELECT INTO pernyataan adalah ekstensi Sybase yang dapat digunakan untuk menyisipkan hasil kueri ke dalam tabel (atau variabel, tergantung pada DBMS).

Dalam DBMS seperti SQL Server dan PostgreSQL, SELECT INTO pernyataan membuat tabel baru dan menyisipkan baris yang dihasilkan dari kueri ke dalamnya.

Di MariaDB itu memasukkan set hasil ke dalam variabel. Di Oracle, ini memberikan nilai yang dipilih ke variabel atau koleksi.

MySQL dan SQLite tidak mendukung SELECT INTO pernyataan sama sekali.

Contoh dalam artikel ini menyisipkan kumpulan hasil ke dalam tabel. Di MariaDB dan Oracle, tabel tujuan dapat diganti dengan nama variabel (atau nama koleksi jika Anda menggunakan Oracle).

Contoh Dasar

Berikut adalah contoh dasar untuk mendemonstrasikan pemilihan dan penyisipan data ke dalam tabel baru.

SELECT * INTO Pets2
FROM Pets;

Contoh ini membuat tabel bernama Pets2 dengan definisi yang sama dari tabel yang disebut Pets dan memasukkan semua data dari Pets ke Pets2 .

Kami dapat memverifikasi ini dengan memilih isi dari kedua tabel.

SELECT * FROM Pets;
SELECT * FROM Pets2;

Hasil:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+
(8 rows affected)
+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+
(8 rows affected)

Bila Tabel Sudah Ada

Jika kita mencoba menjalankan SELECT INTO pernyataan lagi, kami mendapatkan kesalahan, karena tabel sudah ada.

SELECT * INTO Pets2
FROM Pets;

Hasil:

Msg 2714, Level 16, State 6, Line 1
There is already an object named 'Pets2' in the database.

Jika ingin menyisipkan data ke dalam tabel yang sudah ada, gunakan tombol INSERT INTO... SELECT penyataan. Ini akan menambahkan data ke data yang ada. Artinya, ini akan menambahkan baris baru ke tabel, sambil mempertahankan baris yang ada

Memfilter Hasil

SELECT pernyataan dapat melakukan SELECT biasa hal-hal pernyataan, seperti memfilter hasil dengan WHERE klausa.

SELECT * INTO Pets3
FROM Pets
WHERE DOB < '2020-06-01';

Dalam contoh ini, saya memfilter data hanya untuk hewan peliharaan yang memiliki tanggal lahir (DOB) sebelum 1 Juni 2020.

Memilih dari Beberapa Tabel

Anda dapat memilih data dari beberapa tabel, lalu membuat definisi tabel tujuan berdasarkan kumpulan hasil.

SELECT
    p.PetId,
    p.PetName,
    p.DOB,
    pt.PetTypeId,
    pt.PetType,    
    o.OwnerId,
    o.FirstName,
    o.LastName,
    o.Phone,
    o.Email
INTO PetsTypesOwners
FROM Pets p 
INNER JOIN PetTypes pt 
ON p.PetTypeId = pt.PetTypeId 
INNER JOIN Owners o 
ON p.OwnerId = o.OwnerId;

Di sini, kami membuat kueri tiga tabel dan memasukkan hasilnya ke dalam tabel bernama PetsTypesOwners .

Perhatikan bahwa saya mencantumkan setiap kolom di sini karena saya tidak ingin menyertakan semua kolom.

Secara khusus, saya tidak ingin menggandakan kolom kunci asing/kunci utama. Dalam kasus saya, kunci asing berbagi nama yang sama dengan rekan kunci utama mereka di tabel induk, dan saya akan menerima kesalahan karena nama kolom duplikat dibuat di tabel tujuan.

Inilah yang saya maksud.

SELECT *
INTO PetsTypesOwners2
FROM Pets p 
INNER JOIN PetTypes pt 
ON p.PetTypeId = pt.PetTypeId 
INNER JOIN Owners o 
ON p.OwnerId = o.OwnerId;

Hasil:

Msg 2705, Level 16, State 3, Line 1
Column names in each table must be unique. Column name 'PetTypeId' in table 'PetsTypesOwners2' is specified more than once.

Jika kunci asing Anda menggunakan nama kolom yang berbeda dengan kunci utama, maka Anda mungkin akan berakhir dengan tabel tujuan yang berisi kolom yang tidak perlu (satu untuk kunci utama, satu untuk kunci asing, dan masing-masing berisi nilai yang sama).

Jika Anda benar-benar ingin menyertakan kolom duplikat seperti itu, tetapi memiliki nama yang sama, Anda selalu dapat menggunakan alias untuk menetapkannya dengan nama yang berbeda di tabel tujuan.

SELECT
    p.PetId, 
    p.OwnerId AS PetOwnerId, 
    p.PetTypeId AS PetPetTypeId,
    p.PetName,
    p.DOB,
    pt.PetTypeId,
    pt.PetType,    
    o.OwnerId,
    o.FirstName,
    o.LastName,
    o.Phone,
    o.Email
INTO PetsTypesOwners3
FROM Pets p 
INNER JOIN PetTypes pt 
ON p.PetTypeId = pt.PetTypeId 
INNER JOIN Owners o 
ON p.OwnerId = o.OwnerId;

Dalam hal ini saya menggunakan alias kolom untuk menetapkan kembali nama dua kolom menjadi PetOwnerId dan PetPetTypeId .

PILIH KE Dari Tampilan

Anda juga dapat memilih data dari tampilan jika diperlukan.

SELECT * INTO PetTypeCount
FROM vPetTypeCount;

Ini memilih data dari vPetTypeCount lihat dan masukkan ke dalam tabel baru bernama PetTypeCount .

Kami dapat memverifikasi ini dengan SELECT pernyataan.

SELECT * FROM vPetTypeCount;
SELECT * FROM PetTypeCount;

Hasil:

+-----------+---------+
| PetType   | Count   |
|-----------+---------|
| Bird      | 1       |
| Cat       | 3       |
| Dog       | 4       |
+-----------+---------+
(3 rows affected)
+-----------+---------+
| PetType   | Count   |
|-----------+---------|
| Bird      | 1       |
| Cat       | 3       |
| Dog       | 4       |
+-----------+---------+
(3 rows affected)

Dukungan DBMS

Seperti disebutkan, SELECT INTO pernyataan adalah ekstensi Sybase, dan tidak didukung oleh semua DBMS utama. Misalnya, MySQL dan SQLite tidak mendukungnya.

Selain itu, dari DBMS yang mendukungnya, implementasi sebenarnya agak berbeda antar DBMS. Contoh di atas dilakukan di SQL Server. Di MariaDB dan Oracle Anda dapat mengganti tabel tujuan dengan nama variabel (atau nama koleksi di Oracle).

Jika DBMS Anda tidak mendukung SELECT INTO pernyataan, kemungkinan itu mendukung INSERT INTO... SELECT pernyataan, jadi Anda harus mencobanya.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa Masalah Tahun 2038?

  2. Peningkatan potensial untuk pembaruan statistik:MAXDOP

  3. Integrasikan Firebase dengan PHP Untuk Komunikasi Waktu Nyata

  4. Penyembunyian Data Statis &Dinamis di FieldShield

  5. Pengoperasian CRUD yang mudah dengan Koneksi Database PDO