MySQL: Pernyataan INSERT INTO SELECT
Dengan
MySQL, kita dapat mengkopi informasi dari satu tabel ke tabel. Dengan
pernyataan INSERT INTO SELECT beberapa data satu tabel dapat disisipkan
ke tabel lain yang telah ada.
Sintaks Pernyataan INSERT INTO SELECT
Kita dapat mengkopi seluruh kolom dari tabel satu ke tabel lainya, dengan sintak sebagai berikut:
1
2
| INSERT INTO tabel2 SELECT * FROM tabel1; |
Syaratnya adalah struktur tabel1 dan tabel2 harus sejenis
Kita juga dapat mengkopi beberapa kolom tertentu ke tabel lain dengan
cara menuliskan secara jelas nama-nama kolom yang ada. Adapun
sintaksnya sebagai berikut:
1
2
3
4
| INSERT INTO tabel2 (kolom1, kolom2,...) SELECT (kolom1, kolom2,...) FROM tabele; |
Database Demo untuk Pernyataan INSERT INTO SELECT
- Buat datatase perpustakaan
1
| CREATE DATABASE perpustakaan |
- Aktifkan database perpustakaan
1
| USE perpustakaan |
- Buat tabel pendaftar, dengan struktur sebagai berikut
1
2
3
4
5
6
7
| CREATE TABLE pendaftar ( id_pendaftar INT (5) PRIMARY KEY AUTO_INCREMENT, nama_pendaftar VARCHAR (30), tempat_lahir VARCHAR (20), tgl_lahir DATE , syarat ENUM( 'Lengkap' , 'Tidak Lengkap' ) ); |
- Isi data pendaftar sebagai berikut
1
2
3
4
5
6
| INSERT INTO pendaftar (nama_pendaftar, tempat_lahir, tgl_lahir, syarat) VALUES ( 'Amirah Maritza' , 'Bantul' , '1995-01-01' , 'Lengkap' ), ( 'Firyal Alya' , 'Sleman' , '1996-01-03' , 'Tidak Lengkap' ), ( 'Sultana Bilqis' , 'Sleman' , '1996-02-03' , 'Lengkap' ), ( 'Fahmi ulya' , 'Kulon Progo' , '1996-01-03' , 'Tidak Lengkap' ), ( 'Sultan Auliaa' , 'Kulon Progo' , '1997-02-04' , 'Lengkap' ); |
- Buat tabel angggota dengan struktur sebagai berikut
1
2
3
4
5
6
| CREATE TABLE anggota( id_anggota INT (5) PRIMARY KEY AUTO_INCREMENT, nama_anggota VARCHAR (30), tempat_lahir VARCHAR (20), tgl_lahir DATE ); |
Latihan Pernyataan INSERT INTO SELECT
- Copy seluruh record untuk kolom nama_pendaftar, tempat_lahir, tanggal_lahir pada tabel pendaftar ke kolom nama_anggota, tempat_lahir, tanggal_lahir pada tabel anggota.
1
2
3
4
5
6
| INSERT INTO anggota (nama_anggota, tempat_lahir,tgl_lahir) SELECT nama_pendaftar, tempat_lahir, tgl_lahir FROM pendaftar; Query OK, 5 rows affected (0.16 sec) Records: 5 Duplicates: 0 Warnings: 0 |
- Tampilkan seluruh data pada tabel anggota
1
2
3
4
5
6
7
8
9
10
11
| mysql> SELECT * FROM anggota; + ------------+----------------+--------------+------------+ | id_anggota | nama_anggota | tempat_lahir | tgl_lahir | + ------------+----------------+--------------+------------+ | 1 | Amirah Maritza | Bantul | 1995-01-01 | | 2 | Firyal Alya | Sleman | 1996-01-03 | | 3 | Sultana Bilqis | Sleman | 1996-02-03 | | 4 | Fahmi ulya | Kulon Progo | 1996-01-03 | | 5 | Sultan Auliaa | Kulon Progo | 1997-02-04 | + ------------+----------------+--------------+------------+ 5 rows in set (0.02 sec) |
Pada contoh di atas dapat kita lihat bahwa seluruh record pada tabel pendaftar tercopy semua ke tabel anggota. Data Field id_anggota pada tabel anggota terbentuk secara otomatis karena bertipe AUTO_INCREMENT
- Kosongkan kembali record pada tabel anggota
1
2
| mysql> DELETE FROM anggota; Query OK, 5 rows affected (0.15 sec) |
- Copilah record pada tabel pendaftar untuk pendaftar yang syaratnya telah “Lengkap“
1
2
3
4
5
6
| mysql> INSERT INTO anggota -> SELECT id_pendaftar, nama_pendaftar, tempat_lahir, tgl_lahir -> FROM pendaftar -> WHERE syarat= "Lengkap" ; Query OK, 3 rows affected (0.05 sec) Records: 3 Duplicates: 0 Warnings: 0 |
Pada contoh diatas field-field pada tabel anggota tidak dituliskan secara eksplisit dikarenakan seluruh field akan diisi secara berurutan.
- Tampilkan seluruh record pada tabel anggota
1
2
3
4
5
6
7
8
9
| mysql> SELECT * FROM anggota; + ------------+----------------+--------------+------------+ | id_anggota | nama_anggota | tempat_lahir | tgl_lahir | + ------------+----------------+--------------+------------+ | 1 | Amirah Maritza | Bantul | 1995-01-01 | | 3 | Sultana Bilqis | Sleman | 1996-02-03 | | 5 | Sultan Auliaa | Kulon Progo | 1997-02-04 | + ------------+----------------+--------------+------------+ 3 rows in set (0.00 sec) |
Pada tampilan di atas dapat kita lihat record yang tercopy hanyalah data-data yang syaratnya Lengkap.
Tugas Pernyataan INSERT INTO SELECT
- Buatlah database dengan nama kepegawaian
- Aktifkan database kepegawaian
- Buatlah tabel rekrutmen dengan struktur sebagai berikut:
1
2
3
4
5
6
7
8
9
| + ----------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | + ----------------+-------------+------+-----+---------+----------------+ | id_rekrutmen | int (5) | NO | PRI | NULL | auto_increment | | nama_rekrutmen | varchar (30) | YES | | NULL | | | alamat | varchar (30) | YES | | NULL | | | toefl | int (3) | YES | | NULL | | | ujian | int (3) | YES | | NULL | | + ----------------+-------------+------+-----+---------+----------------+ |
- Isi data pada tabel rekrutmen sebagai berikut:
1
2
3
4
5
6
7
8
| + --------------+----------------+------------------------+-------+-------+ | id_rekrutmen | nama_rekrutmen | alamat | toefl | ujian | + --------------+----------------+------------------------+-------+-------+ | 1 | Joko Widodo | Jl. Parangtritis No . 2 | 400 | 90 | | 2 | Rina Sulastri | Jl. Gejayan No .3 | 400 | 60 | | 3 | Hani Susetya | Jl. Imogiri No .4 | 350 | 95 | | 4 | Abdul Majid | Jl. Bantul KM 3 | 421 | 75 | + --------------+----------------+------------------------+-------+-------+ |
- Buat tabel pegawai dengan struktur sebagai berikut:
1
2
3
4
5
6
7
| + --------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | + --------------+-------------+------+-----+---------+----------------+ | id_pegawai | int (5) | NO | PRI | NULL | auto_increment | | nama_pegawai | varchar (30) | YES | | NULL | | | alamat | varchar (30) | YES | | NULL | | + --------------+-------------+------+-----+---------+----------------+ |
- Copy kolom id_rekrumen, nama_rekrumen, dan alamat pada tabel rekrutmen ke kolom id_pegawai, nama_pegawai, dan alamat pada tabel pegawai untuk toefl 400 ke atas dan hasil ujian diatas 70.
- Tampilkan tabel pegawai.
1
2
3
4
5
6
| + ------------+--------------+------------------------+ | id_pegawai | nama_pegawai | alamat | + ------------+--------------+------------------------+ | 1 | Joko Widodo | Jl. Parangtritis No . 2 | | 4 | Abdul Majid | Jl. Bantul KM 3 | + ------------+--------------+------------------------+ |