Wednesday, September 28, 2016

Pernyataan INSERT INTO SELECT dalam MySQL

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