MySQL: Pernyataan INSERT INTO SELECT

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 | + ------------+--------------+------------------------+ |