Query Dasar MySQL

Site: Elearning Muhidin Saimin
Course: Web Development
Book: Query Dasar MySQL
Printed by: Guest user
Date: Tuesday, 17 September 2024, 3:32 AM

1. Penulisan Query

Tutorial Belajar MySQL Part 10: Dasar Penulisan Query MySQL

Menjalankan Perintah (query) MySQL

Setiap perintah, atau sering juga disebut “query” di dalam MySQL harus diakhiri dengan tanda titik koma “;” dan akan dieksekusi setelah tombol Enter ditekan. Selama query MySQL belum diakhiri dengan “;” maka itu dianggap masih dalam satu perintah.

Ketika kita menjalankan sebuah perintah MySQL (query), query tersebut akan dikirim dari MySQL Client ke MySQL Server untuk di proses, setelah proses selesai, hasilnya akan dikirim kembali ke MySQL Client.

Agar lebih mudah memahami query MySQL, kita akan langsung praktek beberapa query sederhana. Silahkan jalankan MySQL Server dan masuk sebagai user root dari MySQL Client (tutorialnya telah kita bahas pada Tutorial Belajar MySQL: Cara Menjalankan MySQL Server, dan Tutorial Belajar MySQL: Cara Menjalankan MySQL Client).

Setelah masuk ke dalam MySQL Client (ditandai dengan awalan mysql> pada jendela cmd), kita akan mencoba beberapa perintah MySQL sederhana. Ketikkan perintah berikut: SELECT NOW(); lalu akhiri dengan Enter pada keyboard.

1
2
3
4
5
6
7
8
mysql> SELECT NOW();
 
+---------------------+
| NOW()               |
+---------------------+
| 2014-11-13 09:21:08 |
+---------------------+
1 row in set (0.69 sec)

Contoh query diatas adalah untuk menampilkan tanggal dan waktu saat ini dengan fungsi NOW(). Query tersebut akan menghasilkan hasil yang berbeda-beda tergantung saat anda menjalankannya.

Perintah SELECT kebanyakan digunakan untuk proses pembacaan data dari database, tetapi juga dapat digunakan untuk menampilkan hasil dari fungsi tambahan, seperti fungsi NOW(), yang kita coba kali ini. Hasil query MySQL akan ditampilkan dalam bentuk tabel pada cmd windows, hasil ini dikirim dari MySQL Server.

Selain hasil dalam bentuk tabel, hampir setiap perintah query, MySQL juga akan menampilkan banyaknya baris yang dipengaruhi dan lamanya waktu eksekusi. Pada contoh kita diatas, ditampilkan keterangan: 1 row in set (0.00 sec). Keterangan ini berarti query kita diproses selama 0 detik (0 second), dan mempengaruhi 1 baris (1 row). o detik disini bukan berarti query tersebut akan tampil seketika, namun karena perintah yang sederhana, MySQL (mungkin) hanya membutuhkan waktu 0,001 sekian detik untuk memproses (dibulatkan menjadi 0,00).

Sebagai contoh query lainnya, kita akan mencoba untuk menampilkan nama user yang sedang aktif dan versi MySQL Server yang digunakan pada saat ini. Untuk menampilkan keterangan ini, MySQL menyediakan fungsi USER() dan VERSION()

1
2
3
4
5
6
7
8
mysql> SELECT NOW(),USER(),VERSION();
 
+---------------------+----------------+------------+
| NOW()               | USER()         | VERSION()  |
+---------------------+----------------+------------+
| 2014-11-13 09:21:37 | root@localhost | 5.6.21-log |
+---------------------+----------------+------------+
1 row in set (0.11 sec)

Dapat dilihat dari contoh query tersebut, untuk setiap fungsi dipisahkan dengan tanda koma “,”.

Penulisan perintah (query) MySQL juga tidak harus dalam satu baris. Misalnya, kita bisa menjalankan query berikut:

1
2
3
4
5
6
7
8
9
10
mysql> SELECT NOW(),
    -> USER(),
    -> VERSION();
 
+---------------------+----------------+------------+
| NOW()               | USER()         | VERSION()  |
+---------------------+----------------+------------+
| 2014-11-13 09:22:50 | root@localhost | 5.6.21-log |
+---------------------+----------------+------------+
1 row in set (0.00 sec)

Setelah fungsi NOW() pertama, tekan Enter untuk pindah baris, lalu ketikkan perintah sambungannya. Selama kita belum mengakhiri perintah tersebut dengan “;”, maka MySQL menganggap baris berikutnya adalah sambungan dari baris sebelumnya. Pemisahan perintah seperti diatas akan sangat berguna jika kita menuliskan query yang panjang, sehingga lebih mudah dibaca. Tanda mysql> akan berubah menjadi -> selama kita belum mengakhiri query tersebut dengan tanda titik koma “;”.

Jika kita telah membuat query MySQL, namun memutuskan untuk membatalkannya, dapat dilakukan dengan kode “\c”. Contoh querynya:

1
2
3
4
5
mysql> SELECT NOW(),
-> USER(),
-> \c
 
mysql>

Dapat anda perhatikan bahwa tanda -> akan kembali menjadi mysql> yang menandakan MySQL telah siap untuk perintah yang baru.

Selain menggunakan “;”, query MySQL juga akan mengeksekusi perintah juga diakhiri dengan tanda “\g”.

1
2
3
4
5
6
7
8
mysql> SELECT NOW(),USER(),VERSION()\g
 
+---------------------+----------------+------------+
| NOW()               | USER()         | VERSION()  |
+---------------------+----------------+------------+
| 2014-11-13 09:23:19 | root@localhost | 5.6.21-log |
+---------------------+----------------+------------+
1 row in set (0.00 sec)

Cara Merubah Tampilan output MySQL

Untuk perintah MySQL (query MySQL) yang menghasilkan output yang panjangnya melebihi layar cmd, akan sulit bagi kita dalam membacanya. MySQL menyediakan cara untuk merubah tampilan tabel menjadi baris.

Untuk merubah tampilan output MySQL menjadi baris, tambahkan tanda “\G” (huruf G besar, bukan g kecil) setelah perintah query. Berikut adalah contoh penggunaannya dalam MySQL:

1
2
3
4
5
6
7
mysql> SELECT NOW(),USER(),VERSION()\G
 
*************************** 1. row ***************************
    NOW(): 2014-11-13 09:23:41
   USER(): root@localhost
VERSION(): 5.6.21-log
1 row in set (0.00 sec)

Aturan Penulisan huruf BESAR dan kecil dalam MySQL

Konsep penggunaan huruf besar dan huruf kecil dalam MySQL akan berbeda tergantung saat penggunaannya.

MySQL tidak membedakan penulisan huruf besar maupun kecil (case insensitive) dalam penulisan fungsi dan identifier. Sebagai contoh, ketiga query ini akan menghasilkan output yang sama (kecuali header dari tabel):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
mysql> SELECT Version();
 
+------------+
| Version()  |
+------------+
| 5.6.21-log |
+------------+
1 row in set (0.00 sec)
 
mysql> SELECT VERSION();
 
+------------+
| VERSION()  |
+------------+
| 5.6.21-log |
+------------+
1 row in set (0.00 sec)
 
mysql> select version();
 
+------------+
| version()  |
+------------+
| 5.6.21-log |
+------------+
1 row in set (0.00 sec)

Namun untuk penulisan nama database dan nama tabel, MySQL akan mengikuti sistem operasi dimana MySQL Server berjalan.

Untuk Sistem Operasi Windows, nama database mahasiswa dianggap sama dengan MaHaSIsWA, namun dalam MySQL Server yang berjalan pada Linux, kedua database tersebut dianggap berbeda (case sensitive).

Karena hal ini, ada baiknya kita membiasakan menggunakan kesepakatan dalam penamaan. Disarankan untuk menggunakan selalu huruf kecil dalam penulisan database, tabel dan variabel dalam MySQL, sehingga perbedaan huruf tidak akan menjadi masalah pada kemudian hari jika MySQL Server pindah sistem operasi.

Di dalam tutorial duniailkom, dan juga dalam beberapa buku MySQL, perintah-perintah dan fungsi baku MySQL akan menggunakan HURUF BESAR sedangkan untuk nama database, tabel, dan kolom akan menggunakan huruf kecil. Hal ini hanya semata-mata agar perintah SQL mudah dibaca dan dibedakan dengan nama database atau tabel. Kita bisa saja menggunakan huruf kecil untuk seluruh fungsi-fungsi dalam MySQL.


Perhatikan penggunaan tanda

Dalam beberapa kasus, sebuah query bisa saja menggunakan tanda baca selain angka dan huruf seperti : “,” (koma), “\” (forward slash/garis miring depan),”” (tanda petik), dan “ “ (spasi). Misalnya untuk 123 dan ‘123’, 12e + 14 dan 12e+14 akan memiliki arti berbeda dalam MySQL. Jika anda menemui error, mungkin penggunaan “tanda” ini adalah masalahnya. Lebih jauh dalam penggunaan tanda ini akan kita pelajari dalam tutorial-tutorial MySQL selanjutnya.


Setelah mempelajari cara penulisan dasar query MySQL pada tutorial kali ini, dalam tutorial selanjutnya kita akan belajar cara membuat database dalam MySQL , dalam halaman Tutorial Belajar MySQL: Cara Membuat dan Menghapus Database MySQL.


2. Membuat dan Menghapus DB

Tutorial Belajar MySQL Part 11: Cara Membuat dan Menghapus Database MySQL

Cara Membuat database MySQL

Dalam penggunaannya sehari-hari, sebuah aplikasi biasanya hanya akan memiliki sebuah database. Di dalam MySQL (dan juga di dalam aplikasi relational database lainnya), Database adalah kumpulan dari tabel-tabel yang saling berhubungan. Database adalah tempat dimana tabel-tabel akan dibuat.

Untuk membuat database, format penulisan querynya adalah:

CREATE DATABASE [IF NOT EXISTS] nama_database
Di dalam manual MySQL, dan juga di dalam tutorial ini, format perintah query yang terdapat di dalam kurung siku merupakan perintah optional, boleh diabaikan jika tidak diperlukan.

Jika kita ingin membuat sebuah database mahasiswa, maka querynya adalah:

1
2
3
mysql> CREATE DATABASE mahasiswa;
 
Query OK, 1 row affected (0.00 sec)

Tambahan query  [IF NOT EXISTS] digunakan untuk membuat MySQL tidak menampilkan pesan error jika database tersebut telah ada sebelumnya dalam database.

Contohnya, jika kita menjalankan lagi query untuk membuat database mahasiswa, MySQL akan menampilkan pesan error.

1
2
3
4
mysql> CREATE DATABASE mahasiswa;
 
ERROR 1007 (HY000): Can't create database 'mahasiswa';
database exists

Pesan error ini berguna untuk kita mengidentifikasi kesalahan, namun apabila kita membuat kode query yang panjang untuk dieksekusi secara keseluruhan (kita akan mempelajarinya nanti), pesan error akan menyebabkan query  berhenti diproses.

Format [IF NOT EXISTS] akan membuat database jika database itu belum ada sebelumnya. Jika sudah ada,  query CREATE DATABASE tidak akan menghasilkan apa-apa (database yang lama tidak akan tertimpa).

1
2
3
mysql> CREATE DATABASE IF NOT EXISTS mahasiswa;
 
Query OK, 1 row affected, 1 warning (0.00 sec)

Cara Melihat Daftar Database MySQL

Di dalam MySQL Server, biasanya akan terdapat beberapa database, tergantung kebutuhan kita. Untuk melihat seluruh database yang berada pada MySQL Server, gunakan query:

SHOW DATABASES;
1
2
3
4
5
6
7
8
9
10
11
12
mysql> SHOW DATABASES;
 
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mahasiswa          |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

Kita dapat melihat bahwa MySQL Server telah berisi beberapa database bawaan, selain database mahasiswa yang kita buat sebelumnya.


Cara Memilih dan Menggunakan Database MySQL

Kita harus memilih sebuah database yang akan digunakan, format query untuk memilih database ini adalah:

USE nama_database;

nama_database adalah database yang akan kita gunakan. Jika kita ingin menggunakan database mahasiswa, maka querynya adalah:

1
2
3
mysql> USE mahasiswa;
 
Database changed

Selanjutnya setiap query pembuatan tabel misalnya, akan membuat sebuah tabel didalam database terpilih, dalam hal ini database mahasiswa.


Cara Menghapus Database MySQL

Jika database sudah tidak digunakan lagi, kita dapat menghapusnya. Proses penghapusan ini akan menghapus database, termasuk seluruh tabel dan isi dari tabel tersebut. Sebuah database yang telah dihapus tidak dapat ditampilkan kembali. Kita harus yakinkan bahwa database tersebut memang tidak akan digunakan lagi.

Format query untuk menghapus database:

DROP DATABASE [IF EXISTS] database_name;

Sama seperti query pada pembuatan database, pilihan [IF EXISTS] digunakan untuk menghilangkan pesan error jika seandainya database tersebut memang tidak ada.

Jika kita ingin menghapus database mahasiswa, contoh querynya adalah:

1
2
3
mysql> DROP DATABASE mahasiswa;
 
Query OK, 0 rows affected (0.01 sec)

Jika kita berusaha menghapus database mahasiswa lagi (yang memang sudah tidak ada), akan muncul pesan error:

1
2
3
4
mysql> DROP DATABASE mahasiswa;
 
ERROR 1008 (HY000): Can't drop database 'mahasiswa';
database doesn't exist

Dengan menggunakan perintah opsional [IF EXISTS], pesan error tidak tampil:

1
2
3
mysql> DROP DATABASE IF EXISTS mahasiswa;
 
Query OK, 0 rows affected, 1 warning (0.00 sec)

 

Karena query SQL menggunakan bahasa inggris, kita harus perhatikan kesalahan untuk pengetikkan kata singular (tunggal) dan plural (jamak). Misalnya untuk melihat database, querynya adalah SHOW DATABASES, tetapi jika kita menjalankan query SHOW DATABASE; ini akan menyebabkan error. Karena seharusnya adalah DATABASES, bukan DATABASE. Juga seharusnya adalah IF EXISTS, bukan IF EXIST (Penggunaan huruf S diakhir kata).

mysql> SHOW DATABASE;
 
ERROR 1064 (42000): You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version
for the right syntax to use near 'DATABASE' at line 1


Setiap database dalam MySQL, setidaknya memiliki satu tabel, selanjutnya kita akan mempelajari cara pembuatan tabel dalam MySQL Tutorial Belajar MySQL: Cara Membuat dan Menghapus Tabel MySQL.


3. Membuat dan Menghapus Tabel

Tutorial Belajar MySQL Part 12: Cara Membuat dan Menghapus Tabel MySQL

Setelah kita membuat database pada Tutorial Belajar MySQL: Cara Membuat dan Menghapus Database MySQL, pada tutorial ini, kita akan mempelajari cara membuat tabel, melihat struktur tabel, dan menghapus tabel MySQLQuery yang akan kita gunakan adalah: CREATE tabel, SHOW tables, DESCRIBE tabel, dan DROP table.

Kita akan mengakses MySQL Server menggunakan MySQL Client melalui cmd Windows, tutorialnya telah kita bahas pada Tutorial Belajar MySQL: Menjalankan MySQL Server, dan Tutorial Belajar MySQL: Menjalankan MySQL Client. Masuklah sebagai user root.


Cara Membuat Tabel MySQL

Langkah pertama sebelum membuat tabel adalah membuat dan memilih database yang akan digunakan. Seperti pada Tutorial MySQL : Membuat dan Menghapus Database, kita akan melanjutkan menggunakan database mahasiswa. Jika anda belum membuat dan memilih database mahasiswa, silahkan ketik query berikut:

1
2
3
4
5
mysql> CREATE DATABASE mahasiswa;
Query OK, 1 row affected (0.00 sec)
 
mysql> USE mahasiswa;
Database changed

Format dasar query untuk membuat tabel adalah:

CREATE TABLE [IF NOT EXISTS] nama_tabel (daftar_kolom) [type=tipe_tabel]
  • Query opsional  [IF NOT EXISTS] sama seperti pada query pembuatan database, digunakan untuk membuat MySQL tidak menampilkan pesan error jika tabel tersebut telah ada sebelumnya dalam database.
  • Nama_tabel adalah nama dari tabel yang ingin kita buat.
  • Daftar_kolom berisi definisi dari kolom-kolom yang akan kita buat untuk database ini. Lebih lanjut tentang jenis-jenis kolom akan kita bahas dalam tutorial selanjutnya.
  • Tipe_tabel adalah query opsional dimana kita dapat mendefinisikan tipe tabel untuk tabel yang akan kita gunakan, seperti MyISAM maupun InnoDB. Lebih lanjut tentang tipe tabel akan kita bahas pada tutorial berikutnya.

Sebagai contoh, kita akan membuat tabel berdasarkan data mahasiswa berikut ini :

NIMNamaUmurTempat LahirJurusan
101401030Alex Ferdinand21PadangIlmu Komputer
120502045Joko Suprianto19JakartaManajemen
110901033Susi Sulastri20MedanKedokteran
100301021Suparman21JakartaTeknik Elektro
121401074Tania Mutia19PadangIlmu Komputer
110501023Aprilia Susanti20PekanbaruManajemen

Dari tabel tersebut kita dapat simpulkan bahwa tabel akan terdiri dari 5 buah kolom:

  • Kolom NIM (Nomor Induk Mahasiswa), walaupun isi tabel ini berupa angka, namun angka disini bukan dimaksudkan untuk operasi matematis, sehingga kita akan lebih cocok jika jika menganggapnya kumpulan karakter atau huruf, maka kita akan membuatnya dengan tipe tabel string. Dalam MySQL tipe string didefinisikan sebagai char.
  • Kolom Nama berisi karakter huruf, maka akan kita buat dengan tipe data string.
  • Kolom Umur akan berisi angka-angka, dan mungkin saja kita akan menggunakan umur untuk keperluan matematis, maka tipe data yang akan kita gunakan adalah integer.
  • Kolom Tempat Lahir berisi kumpulan karakter huruf, maka akan kita buat dengan tipe data string.
  • Kolom Jurusan berisi kumpulan karakter huruf, maka akan kita buat dengan tipe data string.

Sehingga query untuk membuat tabel data_mahasiswa seperti diatas adalah:

1
2
3
4
mysql> CREATE TABLE data_mahasiswa ( nim char(9), nama char(50),
umur int, tempat_lahir char(50), jurusan char (30) );
 
Query OK, 0 rows affected (0.08 sec)

Penjelasan query:

  • Dengan query diatas, kita telah membuat sebuah tabel dengan nama data_mahasiswa, terdiri dari 5 kolom: nim, nama, umur, tempat_lahir, dan jurusan.
  • Setelah nama kolom, kita definisikan jenis dari kolom tersebut.
  • Untuk kolom yang berisi huruf (string), dalam MySQL dapat kita definisikan sebagai char. Angka di dalam kurung adalah jumlah karakter maksimal yang dapat ditampung, misalnya untuk kolom nama, kita menginstruksikan MySQL untuk menyediakan maksimal sebanyak 50 karakter untuk kolom nama.
  • Untuk kolom yang berisi angka, MySQL menyediakan beberapa tipe yang dapat dipilih, untuk contoh diatas, kita memilih integer, disingkat menjadi int.
  • Untuk setiap kolom, dalam query CREATE TABEL, dipisahkan dengan tanda koma, dan seluruh definisi kolom harus berada diantara tanda kurung.
Penamaan kolom tidak boleh mengandung spasi, maka untuk contoh tabel data_mahasiswa, kolom Tanggal Lahir, kita ubah menjadi tanggal_lahir. Huruf besar dan kecil tidak berpengaruh dalam penamaan tabel dan kolom, tetapi bisa saja menyebabkan masalah jika kita menggunakannya ke dalam bahasa pemograman lain, seperti ke PHP atau ASP.

Untuk menghindari masalah ini, sebaiknya konsisten dalam penamaan tabel dan kolom. Dalam tutorial ini saya membuat seluruh nama database, tabel, dan kolom dengan huruf kecil, dan menggunakan tanda “_” untuk menggantikan spasi. Ini semata-mata hanya pilihan, anda bebas menggunakan penamaan yang disukai.


Cara Melihat Daftar Tabel dalam MySQL

Untuk melihat seluruh tabel yang ada pada database aktif saat ini, format querynya adalah:

SHOW TABLES;

Untuk contoh kita, karena baru ada 1 buah tabel, maka hasil eksekusi querynya adalah sebagai berikut:

1
2
3
4
5
6
7
8
mysql> SHOW TABLES;
 
+---------------------+
| Tables_in_mahasiswa |
+---------------------+
| data_mahasiswa      |
+---------------------+
1 row in set (0.07 sec)

Cara Melihat Struktur Tabel MySQL

Untuk melihat struktur dari sebuah tabel, seperti nama kolom yang tersedia, dan tipenya, dapat dilihat dengan format query:

DESCRIBE nama_tabel;

Dalam contoh kita, hasil dari DESCRIBE data_mahasiswa, adalah:

1
2
3
4
5
6
7
8
9
10
11
12
mysql> DESCRIBE data_mahasiswa;
 
+--------------+----------+------+-----+---------+-------+
| Field        | Type     | Null | Key | Default | Extra |
+--------------+----------+------+-----+---------+-------+
| nim          | char(9)  | YES  |     | NULL    |       |
| nama         | char(50) | YES  |     | NULL    |       |
| umur         | int(11)  | YES  |     | NULL    |       |
| tempat_lahir | char(50) | YES  |     | NULL    |       |
| jurusan      | char(30) | YES  |     | NULL    |       |
+--------------+----------+------+-----+---------+-------+
5 rows in set (0.01 sec)

Dari hasil query, dapat terlihat semua kolom serta tipe dari setiap kolom tersebut. Untuk keterangan kolom seperti Null, Key, Default, dan Extra akan kita bahas dalam tutorial berikutnya.

Selain query DESCRIBE nama_tabel, juga bisa menggunakan query singkat, DESC nama_tabel

Cara Menghapus Tabel MySQL

Format query untuk menghapus tabel adalah:

DROP TABLE[IF EXISTS] table_name [, table_name,...]

Query opsional [IF EXISTS] digunakan untuk menghilangkan pesan error jika tabel yang akan dihapus memang sudah tidak ada.

Dari format query DROP TABLE, dapat dilihat bahwa dalam satu query, kita dapat menghapus beberapa tabel sekaligus.

Untuk menghapus tabel data_mahasiswa, querynya adalah:

1
2
3
mysql> DROP TABLE data_mahasiswa;
 
Query OK, 0 rows affected (0.05 sec)

Setelah membuat database dan tabel dalam MySQL, untuk tutorial selanjutnya kita akan membahas tipe data yang digunakan dalam setiap tabel MySQL.

MySQL menyediakan berbagai tipe data sesuai dengan keperluan data yang akan kita input kedalam tabel. Tipe data pertama yang akan kita bahas adalah tipe data numerik, lebih jauh di dalam Tutorial Belajar MySQL: Tipe Data Numerik.


4. Tipe Data Numerik

Tutorial Belajar MySQL Part 13: Tipe Data Numerik MySQL

Tipe Data Integer MySQL: Tinyint , Smallint, Mediumint, Integer (Int), dan Bigint

Integer adalah tipe data untuk angka bulat (misalnya: 1,6, 59, -533, 1449). MySQL menyediakan beberapa tipe data untuk integer, perbedaannya lebih kepada jangkauan yang juga berpengaruh terhadap ukuran tipe data tersebut.

Jangkauan serta ukuran penyimpanan tipe data integer dalam MySQL dapat dilihat dari tabel dibawah ini:

Tipe DataJangkauan SIGNEDJangkauan UNSIGNEDUkuran
TINYINT-128 to 1270 to 2551 byte
SMALLINT-32,768 to 32,7670 to 65,5352 bytes
MEDIUMINT-8,388,608 to 8,388,6070 to 16,777,2153 bytes
INT-2,147,483,648 to 2,147,483,6470 to 4,294,967,2954 bytes
BIGINT-9,223,372,036,854,775,808 to
9,223,372,036,854,775,807
0 to
18,446,744,073,709,551,615
8 bytes
Selain INT, kita dapat juga menuliskan INTEGER dalam query MySQL, keduanya sama persis, hanya beda pada penamaan.

Pemilihan tipe data ini tergantung akan kebutuhan data kita. Misalkan untuk nomor urut absensi pada suatu kelas yang memiliki maksimal 30 orang, tipe data TINYINT sudah mencukupi. Namun jika kita bermaksud membuat absensi seluruh rakyat indonesia, tipe data TINYINT sampai dengan MEDIUMINT tidak akan mencukupi. Kita harus memilih INT atau BIGINT.

Idealnya, sedapat mungkin kita menggunakan tipe data paling kecil, karena menyangkut dengan ukuran dari database. Menggunakan INT untuk jumlah anggota keluarga seseorang mungkin tidak efisien. Namun lebih baik mengantisipasi besarnya data sedapat mungkin pada awal pembuatan database.

Perubahan tipe data disaat aplikasi telah diimplementasikan akan berpotensi membuat sebagian data hilang, atau aplikasi gagal berjalan. Dengan ukuran media penyimpanan yang semakin besar dan murah, mengorbankan ukuran demi aplikasi yang handal bukan sesuatu yang buruk.


Cara Penulisan Tipe Data Integer MySQL

Format query untuk tipe data integer adalah:

INT[(M)] [UNSIGNED] [ZEROFILL]

Setiap tipe data integer dapat di definisikan sebagai UNSIGNED, dimana kita mengorbankan nilai negatif, untuk mendapatkan jangkauan nilai positif yang lebih tinggi.

Dalam deklarasi tipe data integer, nilai M adalah jumlah digit yang disediakan untuk menampilkan data. Misalnya kita mendefiniskan suatu kolom dengan INT(5), jika kita input angka 102, maka MySQL akan menambahkan spasi sebanyak 2 buah di depan angka, agar tampilan data menjadi 5 digit (istilah pemogramannya : padding left).

Nilai M tidak mempengaruhi nilai maksimal dari integer. Jika angka yang diinputkan melebihi digit M, MySQL akan tetap menampilkan hasilnya (selama masih dalam jangkauan tipe data tersebut). Jika kita deklarasikan INT(4), nilai maksimal tetap 2,147,483,647 bukan 9999.

Selain opsional query UNSIGNED, pendeklarasian integer juga terdapat opsional atribut ZEROFILLZEROFILL ini berhubungan dengan nilai M, yang akan mengisi angka 0 pada bagian kiri nilai yang diinput alih-alih spasi.

Contoh query pembuatan tabel dengan deklarasi integer :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mysql> CREATE TABLE contoh_int (mini TINYINT,  kecil SMALLINT UNSIGNED,
sedang MEDIUMINT(4) ZEROFILL, biasa INT(4) UNSIGNED,
besar BIGINT(6) UNSIGNED ZEROFILL);
 
Query OK, 0 rows affected (0.06 sec)
 
mysql> DESC contoh_int;
+--------+--------------------------------+------+-----+---------+-------+
| Field  | Type                           | Null | Key | Default | Extra |
+--------+--------------------------------+------+-----+---------+-------+
| mini   | tinyint(4)                     | YES  |     | NULL    |       |
| kecil  | smallint(5) unsigned           | YES  |     | NULL    |       |
| sedang | mediumint(4) unsigned zerofill | YES  |     | NULL    |       |
| biasa  | int(4) unsigned                | YES  |     | NULL    |       |
| besar  | bigint(6) unsigned zerofill    | YES  |     | NULL    |       |
+--------+--------------------------------+------+-----+---------+-------+
5 rows in set (0.21 sec)

Dari query DESC kita dapat melihat kolom mini dan kecil, secara otomatis akan bersisi nilai M, walaupun dalam deklarasi pembuatan tabel kita tidak menyatakannya secara langsung. Nilai ini didapat dari jangkauan terbesar tipe data tersebut

Jika kita inputkan angka 122 kedalam seluruh kolom, hasilnya adalah sebagai berikut:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> INSERT INTO contoh_int values ((122), (122), (122),
(122), (122));
 
Query OK, 1 row affected (0.07 sec)
 
mysql> SELECT * FROM contoh_int;
 
+------+-------+--------+-------+--------+
| mini | kecil | sedang | biasa | besar  |
+------+-------+--------+-------+--------+
|  122 |   122 |   0122 |   122 | 000122 |
+------+-------+--------+-------+--------+
1 row in set (0.00 sec)

Untuk perintah INSERT dan SELECT, kita akan mempelajarinya lebih jauh pada tutorial berikutnya, query INSERT digunakan untuk input data ke dalam tabel, dan SELECT digunakan untuk menampilkan nilai dari tabel. Dari contoh diatas kita setidaknya mendapat gambaran bagaimana cara deklarasi tipe data integer. Perhatikan untuk kolom sedang dan besar, terdapat angka nol di depan angka. Hal ini karena kedua kolom tersebut kita deklarasikan sebagai ZEROFILL.


Tipe Fixed Point MySQL: DECIMAL

Tipe data fixed point adalah tipe data angka pecahan (desimal), dimana jumlah angka pecahan (angka di belakang koma) sudah di tentukan dari awal. Format penulisan query fixed point adalah:

DECIMAL [(M[,D])] [UNSIGNED] [ZEROFILL]

DECIMAL merupakan kata kunci untuk mendefiniskan suatu kolom sebagai fixed point.

Besar dari tipe data fixed point ini tergantung dari opsional query [M,D] dimana M adalah total jumlah digit keseluruhan, dan D adalah jumlah digit dibekang koma (pecahan). Contohnya DEC [6,2] akan mendefiniskan suatu kolom agar memuat 6 digit angka, dengan 4 angka di depan koma, dan 2 digit angka di belakang koma.

DeklarasiJangkauan
DECIMAL (4,1)-999,9 to 999,9
DECIMAL (6,2)-9999,99 to 9999,99
DECIMAL (3,2)-9,99 to 9,99
DECIMAL (8,2)-999999,99 to 999999,99

Maksimal nilai untuk M adalah 65, dan maksimal nilai D adalah 30. Dengan syarat, nilai D tidak boleh lebih besar dari nilai M. Jika kita tidak menyertakan M dan D dalam mendefinisikan suatu kolom DECIMAL, maka secara sistem M akan di set 10. Dan D default 0. Tipe data DECIMAL ini cocok digunakan untuk kolom yang difungsikan untuk menampung nilai uang.

Opsional query UNSIGNED jika disertakan hanya semata-mata membuang nilai negatif dari DECIMAL, tanpa memperbesar jangkauannya. Opsional query ZEROFILL sama seperti integer, akan mengisi angka 0 pada bagian kiri angka.

Contoh pendefinisian tabel dengan kolom DECIMAL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> CREATE TABLE contoh_dec (satuan DECIMAL(3,2), puluhan DECIMAL(4,2),
ribuan DECIMAL(5,2), normal DECIMAL, cantik DECIMAL(8,2) ZEROFILL);
 
Query OK, 0 rows affected (0.13 sec)
 
mysql> DESCRIBE contoh_dec;
+---------+--------------------------------+------+-----+---------+-------+
| Field   | Type                           | Null | Key | Default | Extra |
+---------+--------------------------------+------+-----+---------+-------+
| satuan  | decimal(3,2)                   | YES  |     | NULL    |       |
| puluhan | decimal(4,2)                   | YES  |     | NULL    |       |
| ribuan  | decimal(5,2)                   | YES  |     | NULL    |       |
| normal  | decimal(10,0)                  | YES  |     | NULL    |       |
| cantik  | decimal(8,2) unsigned zerofill | YES  |     | NULL    |       |
+---------+--------------------------------+------+-----+---------+-------+
5 rows in set (0.08 sec)

Perhatikan kolom normal, bahwa nilai DECIMAL di deklarasikan sebagai DECIMAL(10,0), ini adalah default MySQL jika kita tidak menuliskan jumlah digit.

1
2
3
4
5
6
7
8
9
10
11
12
mysql> INSERT INTO contoh_dec values ((1.3), (55.32),
(523.77), (7832.3), (150000.45));
 
Query OK, 1 row affected, 1 warning (0.07 sec)
 
mysql> SELECT * FROM contoh_dec;
+--------+---------+--------+--------+-----------+
| satuan | puluhan | ribuan | normal | cantik    |
+--------+---------+--------+--------+-----------+
|   1.30 |   55.32 | 523.77 |   7832 | 150000.45 |
+--------+---------+--------+--------+-----------+
1 row in set (0.00 sec)

Khusus untuk kolom normal, kita perhatikan karena deklarasinya adalah DECIMAL (10,0), maka seluruh digit dibelakang koma dari inputan kita akan dihilangkan.

Selain menggunakan DECIMAL untuk fixed point, MySQL juga menyediakan beberapa nama lain, yang sama persis dengan fungsi DECIMAL, yaitu: NUMERIC, FIXED dan DEC. Pilihan ini disediakan agar MySQL sesuai dengan standard SQL yang digunakan pada berbagai RDBMS lain, seperti Oracle.

Tipe Floating Point : FLOAT dan DOUBLE

Jika pada tipe fixed point kita mendefiniskan suatu kolom dengan nilai pecahan yang tetap, untuk tipe floating point, nilai pecahan yang dapat diinput bisa berbeda-beda. Untuk tipe floating point, MySQL menyediakan 2 jenis tipe data, yaitu FLOAT dan DOUBLE. Perbedaan keduanya terletak pada presisi (ketelitian) pembulatan. FLOAT menggunakan single-precision, sedangkan DOUBLE menggunakan  double-precision.

Tipe Floating Point juga diperuntukkan untuk nilai desimal, perbedaan antara Fixed Point dengan Floating Point lebih kedalam arsitektur (cara perhitungannya pada prosesor komputer) dan ketelitian (presisi) yang digunakan. Tentang perbedaan fixed dan floating point tidak akan kita bahas, namun setidaknya kita mengetahui bahwa MySQL menyediakan tipe data untuk keduanya.
Tipe DataJangkauanUkuran
FLOAT-3.402823466E+38 to 3.402823466E+384 bytes
DOUBLE-1.7976931348623157E+308 to 1.7976931348623157E+3088 bytes

Untuk tipe data FLOAT dan DOUBLE, format querynya adalah:

FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]

Sama seperti pada tipe data DECIMAL, nilai opsional query [M, D] dimana M adalah total jumlah digit keseluruhan, dan D adalah jumlah digit dibekang koma (pecahan). Maksimal nilai M dan D akan berbeda pada tiap komputer, tergantung kemampuan prosesor mengolah tipe data floating point. FLOAT biasanya akan akurat untuk penyimpanan sekitar 7 angka desimal, sedangkan DOUBLE mencapai 15 angka desimal.

Opsional query UNSIGNED jika di nyatakan, akan menghilangkan kemampuan tipe data untuk meyimpan angka negatif (tidak menambah jangkauan sebagaimana tipe data integer)

Opsional query ZEROFILL sama seperti integer, akan mengisi angka 0 pada bagian kiri angka.

Contoh pendefinisan tipe data floating point:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
mysql> CREATE TABLE contoh_float (satuan FLOAT(3,2), puluhan FLOAT(4,2),
ribuan FLOAT(5,2), positif DOUBLE ZEROFILL UNSIGNED,
cantik DOUBLE(8,2) ZEROFILL);
 
Query OK, 0 rows affected (1.21 sec)
 
mysql> DESCRIBE contoh_float;
+---------+-------------------------------+------+-----+---------+-------+
| Field   | Type                          | Null | Key | Default | Extra |
+---------+-------------------------------+------+-----+---------+-------+
| satuan  | float(3,2)                    | YES  |     | NULL    |       |
| puluhan | float(4,2)                    | YES  |     | NULL    |       |
| ribuan  | float(5,2)                    | YES  |     | NULL    |       |
| positif | double unsigned zerofill      | YES  |     | NULL    |       |
| cantik  | double(8,2) unsigned zerofill | YES  |     | NULL    |       |
+---------+-------------------------------+------+-----+---------+-------+
5 rows in set (0.04 sec)
 
mysql> INSERT INTO contoh_float values ((1.3), (55.32), (523.77),
(7832.3), (150000.45));
 
Query OK, 1 row affected (0.15 sec)
 
mysql> SELECT * FROM contoh_float;
+--------+---------+--------+------------------------+-----------+
| satuan | puluhan | ribuan | positif                | cantik    |
+--------+---------+--------+------------------------+-----------+
|   1.30 |   55.32 | 523.77 | 00000000000000007832.3 | 150000.45 |
+--------+---------+--------+------------------------+-----------+
1 row in set (0.00 sec)
Karena tipe data floating point menggunakan pendekatan nilai, menggunakan tipe data ini untuk perbandingan akan menyebabkan masalah. Hal ini disebabkan cara penyimpanan arsitektur prosesor dalam menangani tipe floating point, bukan semata-mata permasalahan pada MySQL. Pertimbangkan untuk menggunakan tipe data fixed point jika lebih membutuhkan presisi/ketelitian.

Dalam tutorial belajar MySQL kali ini kita telah mempelajari tipe-tipe data numerik dalam MySQL, yakni meliputi Tipe data Integer, Decimal, dan Float. Dalam tutorial selanjutnya, kita akan membahas tentang tipe data huruf (string) dalam MySQL.


5. Tipe Data String

Tutorial Belajar MySQL Part 14: Tipe Data String (Huruf) MySQL

Tipe data CHAR dan VARCHAR MySQL

Tipe data CHAR dan VARCHAR adalah tipe data karakter (string) yang akan sering kita gunakan.

Format query tipe data CHAR dan VARCHAR:

CHAR [(M)]
VARCHAR [(M)]

Dimana M adalah jumlah karakter yang akan dialokasikan oleh MySQL. Misalkan nilai M=5, maka MySQL menyediakan 5 karakter untuk kolom tersebut. Nilai maksimal M adalah 255 karakter untuk CHAR, dan 65,535 karakter untuk VARCHAR. Jika nilai M tidak di nyatakan, nilai defaultnya M=1.

Perbedaan antara CHAR dan VARCHAR adalah dari cara MySQL mengalokasikan ukuran penyimpanan data yang diinput kedalam kolom tersebut. Contohnya, jika kita mendefiniskan sebuah tabel dengan kolom bertipe CHAR(5), walaupun huruf atau karakter yang kita inputkan hanya 1 karakter, MySQL tetap menyimpan kolom tersebut untuk 5 karakter. Namun jika kita definiskan sebagai VARCHAR(5), dan kita menginput data dengan jumlah karakter 2, maka ukuran penyimpanan hanya akan menggunakan 2 karakter, sehingga VARCHAR lebih fleksibel dan efisien.

Tetapi untuk fleksibilitas ini, tipe VARCHAR memerlukan proses tambahan untuk menyimpan ukuran dari masing-masing data. Sehingga VARCHAR akan sedikit lebih lambat bila dibandingkan CHAR. Walaupun demikian, proses ini hampir tidak terdeteksi, anda bebas menggunakan CHAR atau VARCHAR untuk tipe data string.

Contoh perbedaan antara CHAR dan VARCHAR dapat kita lihat dari tabel dibawah ini:

DataCHAR(5)Ukuran PeyimpananVARCHAR(5)Ukuran Peyimpanan
' ''     '5 byte' '1 byte
'du''du    '5 byte'du'3 byte
'dunia''dunia'5 byte'dunia'6 byte
'duniailkom''dunia'5 byte'dunia'6 byte

Dari tabel diatas, kita dapat melihat bahwa ukuran penyimpanan untuk VARCHAR berubah-ubah tergantung data yang diinput. Namun sebenarnya VARCHAR membutuhkan 1 byte tambahan untuk menyimpan panjang data. Jika kita definiskan VARCHAR(5) dan menginputkan ‘dunia’, maka akan membutuhkan 5+1 byte. Berbeda dengan CHAR(5) yang tidak membutuhkan tambahan byte.

Jadi, kebutuhan akan tipe data antara CHAR dan VARCHAR bergantung kepada seperti apa data yang akan kita input. Tipe data CHAR cocok digunakan untuk kolom yang memiliki jumlah karakter tetap, misalnya untuk nomor KTP, ID pelanggan dan NIM mahasiswa. Sedangkan tipe data VARCHAR akan lebih cocok digunakan untuk kolom yang berisi data yang berbeda-beda ukuran, seperti nama, alamat dan kota.

Baik CHAR maupun VARCHAR data yang diinput akan disimpan secara case insensitif, dimana huruf besar dan kecil tidak dibedakan.

Untuk tipe data CHAR, jika kita menginputkan data dengan spasi dibelakangnya, misalnya ‘aku   ’ (terdapat 3 spasi setelah ‘aku’), maka sewaktu menampilkan data, spasi tersebut akan otomastis dihapus oleh MySQL, menjadi‘aku’. Pertimbangkan menggunakan VARCHAR jika hal ini anda butuhkan, dimana VARCHAR akan tetap menampilkan ‘aku   ’.

Contoh query membuat tabel dengan tipe data CHAR dan VARCHAR :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mysql> CREATE TABLE contoh_cha (cha CHAR(5),
varcha VARCHAR(5));
Query OK, 0 rows affected (0.06 sec)
 
mysql> INSERT INTO contoh_cha values ('a  ','a  ');
Query OK, 1 row affected (0.05 sec)
mysql> INSERT INTO contoh_cha values ('dunia','dunia');
Query OK, 1 row affected (0.05 sec)
mysql> INSERT INTO contoh_cha values ('duniailkom','duniailkom');
ERROR 1406 (22001): Data too long for column 'cha' at row 1
 
mysql> SELECT * FROM contoh_cha;
+-------+--------+
| cha   | varcha |
+-------+--------+
| a     | a      |
| dunia | dunia  |
+-------+--------+
2 rows in set (0.00 sec)
Sama seperti tipe data integer, sebelum mendefinisikan suatu kolom dengan CHAR(10) atau VARCHAR(10), sedapat mungkin kita sudah memprediksi data yang akan diinput kedalam kolom tersebut. Apakah 10 karakter cukup untuk menampung seluruh data yang akan diisi, atau apakah terdapat kemungkinan data yang diinput akan berisi 15 karakter.

Merubah tipe kolom setelah implementasi akan membutuhkan usaha yang lebih dari pada memprediksinya di awal perancangan database.


Tipe Data BINARY dan VARBINARY dalam MySQL

Pada dasarnya tipe data BINARY dan VARBINARY sama dengan CHAR dan VARCHAR, perbedaannya hanya pada struktur peyimpanan dalam MySQL, dimana tipe data binary akan disimpan secara biner (bit per bit), bukan secara karakter seperti CHAR. Sederhananya, hal ini akan berefek pada case-sensitif data (perbedaan penggunaan huruf besar dan huruf kecil).

Pada tipe data CHAR, jika kita menyimpan data ‘A’, maka secara internal MySQL akan menyimpannya sebagai karakter ‘A’, dimana ‘A’ akan sama dengan ‘a’. Namun untuk tipe data BINARY‘A’ akan disimpan sebagai bit dari ‘A’, yaitu 65, dan akan berbeda dengan ‘a’, dimana nilai binernya adalah 97.

Format query tipe data BINARY dan VARBINARY:

BINARY [(M)]
VAR BINARY [(M)]

Dimana sama seperti tipe data CHAR dan VARCHAR, M adalah jumlah karakter yang akan dialokasikan oleh MySQL. Misalkan nilai M adalah 5, maka MySQL menyediakan 5 karakter untuk kolom tersebut. Nilai M maksimal 255 karakter untuk BINARY, dan 65,535 karakter untuk VARBINARY. Jika nilai M tidak di nyatakan, nilai defaultnya adalah 1.

BINARY akan disimpan dalam ukuran yang tetap, sedangkan VARBINARY akan berubah sesuai ukuran data (sama dengan perbedaan antara CHAR dan VARCHAR)

Contoh query membuat tabel dengan tipe data BINARY dan VARBINARY :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
mysql> CREATE TABLE contoh_bin (bin BINARY(5),
varbin VARBINARY(5));
Query OK, 0 rows affected (0.08 sec)
 
mysql> INSERT INTO contoh_bin values ('dunia','dunia');
Query OK, 1 row affected (0.04 sec)
 
mysql> SELECT * FROM contoh_bin;
+-------+--------+
| bin   | varbin |
+-------+--------+
| dunia | dunia  |
+-------+--------+
1 row in set (0.00 sec)
 
mysql> SELECT * FROM contoh_bin where bin='dunia';
+-------+--------+
| bin   | varbin |
+-------+--------+
| dunia | dunia  |
+-------+--------+
1 row in set (0.00 sec)
 
mysql> SELECT * FROM contoh_bin where bin='DUNIA';
Empty set (0.00 sec)

Perhatikan bahwa pada query terakhir, tidak menampilkan hasil apa-apa, karena dalam BINARY, ‘dunia’ tidak sama dengan ‘DUNIA’.


Tipe Data TEXT MySQL

Untuk data string yang lebih besar, MySQL menyediakan tipe data TEXT, yang terdiri dari : TINYTEXT, TEXT, MEDIUMTEXT, dan LONGTEXT. Maksimal ukuran masing-masing tipe data dapat dilihat dari tabel dibawah ini:

Tipe DataUkuran MaksimumJumlah Karakter Maksimum
TINYTEXT255 byte255
TEXT65.535 byte (64 KB)6.5535
MEDIUMTEXT16.777.215 byte (16MB)16.777.215
LONGTEXT4.294.967.295 (4GB)4.294.967.295

Setiap tipe data text disimpan berdasarkan berapa data yang diinput, sama seperti VARCHAR, dimana jika kita mendefinisikan suatu kolom sebagai LONGTEXT, dan hanya berisi 100 karakter, ukuran penyimpanan yang digunakan sekitar 100 byte, bukan 4GB.

Contoh query membuat tabel dengan tipe data TEXT :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
mysql> CREATE TABLE contoh_text (tin TINYTEXT, tex TEXT,
lon LONGTEXT);
Query OK, 0 rows affected (0.05 sec)
 
mysql> DESC contoh_text;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| tin   | tinytext | YES  |     | NULL    |       |
| tex   | text     | YES  |     | NULL    |       |
| lon   | longtext | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.09 sec)
 
mysql> INSERT INTO contoh_text values ('duniailkom',
'duniailkom','duniailkom.com');
Query OK, 1 row affected (0.04 sec)
 
mysql> SELECT * FROM contoh_text;
+------------+------------+----------------+
| tin        | tex        | lon            |
+------------+------------+----------------+
| duniailkom | duniailkom | duniailkom.com |
+------------+------------+----------------+
1 row in set (0.00 sec)

Tipe Data BLOB MySQL

Tipe data BLOB adalah tipe data versi binary dari TEXT, dimana karakter akan disimpan dalam bit. Dan untuk karakter huruf, huruf besar dan kecil akan dibedakan (‘A’ tidak sama dengan ‘a’). Sama seperty TEXT, BLOB juga memiliki beberapa tipe : TINY BLOB, BLOB, MEDIUM BLOB, dan LONGBLOB.

Ukuran serta jangkauan dari BLOB sama seperti TEXT, seperti pada tabel berikut ini:

Tipe DataUkuran MaksimumJumlah Karakter Maksimum
TINYBLOB255 byte255
BLOB65.535 byte (64 KB)65.535
MEDIUMBLOB16.777.215 byte (16MB)16.777.215
LONGBLOB4.294.967.295 (4GB)4.294.967.295

Karena sifatnya yang tersimpan secara binary,tipe data BLOB dapat digunakan untuk menyimpan data multimedia, seperti gambar dan musik kedalam tabel MySQL.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
mysql> CREATE TABLE contoh_blob (tin TINYBLOB, blo BLOB,
lon LONGBLOB);
Query OK, 0 rows affected (0.14 sec)
 
mysql> DESCRIBE contoh_blob;
 +-------+----------+------+-----+---------+-------+
 | Field | Type     | Null | Key | Default | Extra |
 +-------+----------+------+-----+---------+-------+
 | tin   | tinyblob | YES  |     | NULL    |       |
 | blo   | blob     | YES  |     | NULL    |       |
 | lon   | longblob | YES  |     | NULL    |       |
 +-------+----------+------+-----+---------+-------+
 3 rows in set (0.01 sec)
 
mysql> INSERT INTO contoh_blob values ('duniailkom',
'duniailkom','duniailkom.com');
Query OK, 1 row affected (0.05 sec)
 
mysql> SELECT * FROM contoh_blob;
 +------------+------------+----------------+
 | tin        | blo        | lon            |
 +------------+------------+----------------+
 | duniailkom | duniailkom | duniailkom.com |
 +------------+------------+----------------+
 1 row in set (0.01 sec)

Dalam tutorial MySQL kali ini kita telah membahas tentang tipe data String dalam MySQL. Tipe data string mungkin adalah tipe data yang paling sering digunakan di dalam pembuatan tabel. Melanjutkan pembahasan tentang tipe data, dalam tutorial MySQL selanjutnya kita akan membahas tentang cara penggunaan tipe data date dalam MySQL.


6. Tipe Data Date

Tutorial Belajar MySQL Part 15: Tipe Data Date (Tanggal) dalam MySQL

Jenis tipe data DATE dalam MySQL

MySQL memiliki beberapa format untuk tipe data date. Format tipe data date tersebut adalah: DATE, TIME, DATETIME, TIMESTAMP, dan YEAR. Perbedaan dari tipe-tipe tersebut terletak pada format penyimpanan data. Untuk lebih lengkapnya dapat dilihat dari tabel dibawah ini:

Tipe DataJangkauanUkuranZero Value
DATE‘1000-01-01’ to ‘9999-12-31’3 byte‘0000-00-00’
DATETIME‘1000-’01-01 00:00:01’ to ‘9999-12-31 23:59:59’8 byte‘0000-00-00 00:00:00’
TIMESTAMP‘1970-01-01 00:00:00’ to ‘2038-01-18 22:14:07’4 byte‘0000-00-00 00:00:00’
TIME‘–838:59:59’ to ‘838:59:58’3 byte‘00:00:00’
YEAR(2)00 to 991 byte‘00’
YEAR(4)1901 to 21551 byte‘0000’

MySQL menyediakan beberapa format yang dapat digunakan untuk input tipe data tanggal, masing masing untuk tipe data yang bersesuaian.

Tipe DataFomat Input
DATETIME'CCYY-MM-DD hh:mm:ss'
TIMESTAMP'YY-MM-DD hh:mm:ss'
'CCYYMMDDhhmmss'
'YYMMDDhhmmss'
CCYYMMDDhhmmss
YYMMDDhhmmss
DATE'CCYY-MM-DD'
'YY-MM-DD'
'CCYYMMDD'
'YYMMDD'
CCYYMMDD
YYMMDD
TIME'hh:mm:ss'
'hhmmss'
hhmmss
YEAR'CCYY'
'YY'
CCYY
YY
  • CCYY : input untuk tahun, dimana YY berupa tahun 2 digit, seperti 98, 78, dan 00, sedangkan untuk CCYY adalah tahun dengan 4 digit, seperti 2001, 1987, 2012. Untuk tahun dengan 2 digit, MySQL mengkonversinya dengan aturan 70-99 menjadi 1970-1999 dan 00-69 menjadi 2000-2069.
  • MM: bulan dalam format dua digit, seperti 05,07,dan 12.
  • DD: tanggal dalam format dua digit, seperti 14, 06 dan 30.
  • hh: jam dalam format 2 digit, seperti 06,09, dan 12.
  • mm: menit, dalam format 2 digit, seperti 15, 45, dan 59.
  • ss: detik, dalam format 2 digit, seperti 10, 40, dan 57.

Jika MySQL tidak dapat membaca format, atau data tidak tersedia, maka data akan diisi sesuai dengan nilai pada Zero Value.

Contoh query untuk membuat tabel dengan data DATE:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> CREATE TABLE contoh_date (dat DATE, tim TIME, dattim DATETIME,
timestam TIMESTAMP, yea YEAR);
Query OK, 0 rows affected (0.06 sec)
 
mysql> DESCRIBE contoh_date;
+----------+-----------+------+-----+-------------------+-----------------------------+
| Field    | Type      | Null | Key | Default           | Extra                       |
+----------+-----------+------+-----+-------------------+-----------------------------+
| dat      | date      | YES  |     | NULL              |                             |
| tim      | time      | YES  |     | NULL              |                             |
| dattim   | datetime  | YES  |     | NULL              |                             |
| timestam | timestamp | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| yea      | year(4)   | YES  |     | NULL              |                             |
+----------+-----------+------+-----+-------------------+-----------------------------+
5 rows in set (0.01 sec)

Perhatikan pada saat mendefinisikan tipe data YEAR, pada query DESCRIBE kita dapat melihat bahwa MySQL memberikan nilai YEAR(4) sebagai nilai default. Kita dapat secara langsung mendefinisikan YEAR(2) jika menginginkan data tahun dengan 2 digit, namun hal ini tidak disarankan, karena dengan mendefinisikan tahun 26, akan menjadi ambigu, apakah itu tahun 1926 atau 2026, walaupun MySQL memiliki aturan akan mengkonversinya menjadi 2026.

MySQL menyediakan fungsi NOW() untuk memberikan tanggal server pada saat ini, dan kita akan menggunakannya sebagai nilai tiap kolom pada tabel contoh_date:

1
2
3
4
5
6
7
8
9
10
mysql> INSERT INTO contoh_date values (NOW(),NOW(),NOW(),NOW(),'2012');
Query OK, 1 row affected, 1 warning (0.05 sec)
 
mysql> SELECT * FROM contoh_date;
+------------+----------+---------------------+---------------------+------+
| dat        | tim      | dattim              | timestam            | yea  |
+------------+----------+---------------------+---------------------+------+
| 2012-10-20 | 19:40:45 | 2012-10-20 19:40:45 | 2012-10-20 19:40:45 | 2012 |
+------------+----------+---------------------+---------------------+------+
1 row in set (0.00 sec)

Khusus untuk tipe data YEAR, fungsi NOW() akan menghasilkan error, oleh karenanya, pada contoh diatas saya menginput manual ‘2012’ untuk kolom YEAR.


Tipe data date dalam MySQL bukanlah tipe data dasar, akan tetapi penggunaannya sangat umum dan sering sehingga MySQL menyediakan tipe data tanggal secara bawaan. Dalam tutorial belajar MySQL selanjutnya, kita akan membahas tentang tipe data bentukan MySQL: enum dan set, serta perbedaan keduanya.


7. Tipe Data ENUM dan SET

Tutorial Belajar MySQL Part 16: Tipe Data ENUM dan SET dalam MySQL

Pengertian Tipe data ENUM dalam MySQL

Tipe data ENUM merupakan tipe data yang khusus untuk kolom dimana nilai datanya sudah kita tentukan sebelumnya. Pilihan ini dapat berisi 1 sampai dengan 65,535 pilihan string. Dimana kolom yang didefinisikan sebagai ENUM hanya dapat memilih satu diantara pilihan string yang tersedia.

Contoh penggunaan ENUM misalnya untuk kolom yang berisi daftar Jurusan yang harus dipilih mahasiswa. Pilihan ini harus sudah tersedia sebelumnya, dan kita dapat menggunakan tipe data enum untuk memastikan bahwa jurusan yang dipilih adalah jurusan yang telah ditentukan sebelumnya dan hanya 1 jurusan.

Contoh query tipe data ENUM:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
mysql> CREATE TABLE jurusan (jur ENUM('Ilmu Komputer','Ekonomi','MIPA','Kedokteran'));
Query OK, 0 rows affected (0.07 sec)
 
mysql> DESCRIBE jurusan;
+-------+-----------------------------------------------------+------+-----+---------+-------+
| Field | Type                                                | Null | Key | Default | Extra |
+-------+-----------------------------------------------------+------+-----+---------+-------+
| jur   | enum('Ilmu Komputer','Ekonomi','MIPA','Kedokteran') | YES  |     | NULL    |       |
+-------+-----------------------------------------------------+------+-----+---------+-------+
1 row in set (0.01 sec)
 
mysql> INSERT INTO jurusan VALUES ('Ilmu Komputer');
Query OK, 1 row affected (0.04 sec)
 
mysql> INSERT INTO jurusan VALUES ('Kedokteran');
Query OK, 1 row affected (0.04 sec)
 
mysql> INSERT INTO jurusan VALUES ('FISIP');
ERROR 1265 (01000): Data truncated for column 'jur' at row 1
 
mysql> INSERT INTO jurusan VALUES ('Ilmu Komunikasi');
ERROR 1265 (01000): Data truncated for column 'jur' at row 1
 
mysql> SELECT * FROM jurusan;
+---------------+
| jur           |
+---------------+
| Ilmu Komputer |
| Kedokteran    |
+---------------+
2 rows in set (0.00 sec)

Pada query diatas, kita mendefinisikan kolom jur pada tabel Jurusan dengan tipe ENUM yang dapat dipilih dari pilihan yang tersedia : Ilmu Komputer,Ekonomi,MIPA, dan Kedokteran. Ketika kita mencoba menginput data baru, seperti Fisip dan Ilmu Komunikasi, MySQL mengeluarkan error, karena pilihan ini memang tidak kita definisikan sebelumnya.


Pengertian Tipe data SET dalam MySQL

Berbeda dengan tipe data ENUM dimana pilihan yang tersedia untuk kolom hanya dapat 1 data, untuk kolom SET kita dapat memilih satu atau lebih nilai yang tersedia dari 1 sampai 64 pilihan string yang tersedia.

Contoh penggunaan tipe data SET adalah untuk data tentang hobby seseorang, karena bisa aja seseorang memiliki hobi yang lebih dari 1, namun kita ingin memilih dari kumpulan list yang telah kita buat sebelumnya.

Contoh query tipe data SET:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
mysql> CREATE TABLE hobi (hob SET('Membaca','Menulis','Menggambar','Main Musik'));
Query OK, 0 rows affected (0.05 sec)
 
mysql> DESCRIBE hobi;
+-------+----------------------------------------------------+------+-----+---------+-------+
| Field | Type                                               | Null | Key | Default | Extra |
+-------+----------------------------------------------------+------+-----+---------+-------+
| hob   | set('Membaca','Menulis','Menggambar','Main Musik') | YES  |     | NULL    |       |
+-------+----------------------------------------------------+------+-----+---------+-------+
1 row in set (0.01 sec)
 
mysql> INSERT INTO hobi VALUES ('Membaca');
Query OK, 1 row affected (0.05 sec)
 
mysql> INSERT INTO hobi VALUES ('Membaca,Main Musik');
Query OK, 1 row affected (0.07 sec)
 
mysql> INSERT INTO hobi VALUES ('Menggambar,Main Musik');
Query OK, 1 row affected (0.04 sec)
 
mysql> INSERT INTO hobi VALUES ('Belajar,Main Musik');
ERROR 1265 (01000): Data truncated for column 'hob' at row 1
 
mysql> SELECT * FROM hobi;
+-----------------------+
| hob                   |
+-----------------------+
| Membaca               |
| Membaca,Main Musik    |
| Menggambar,Main Musik |
+-----------------------+
3 rows in set (0.00 sec)

Dari query diatas, dapat kita lihat bahwa untuk menginput lebih dari 1 nilai, kita memisahkan dengan tanda koma dan tetap dalam tanda kutip, juga seandainya kita coba input hobi ‘belajar’, yang memang tidak ada sebelumnya, maka MySQL akan mengeluarkan pesan error.


Tipe data enum dan set adalah tipe data khusus dalam MySQL dan digunakan untuk menyeleksi input ke database agar sesuai dengan data yang tersedia. Dalam tutorial Belajar MySQL selanjutnya kita akan membahas tentang atribut tipe data yang digunakan untuk memberi sifat dan fitur tambahan kedalam sebuah kolom di dalam MySQL.


8. Atribut Tipe Data

Tutorial Belajar MySQL Part 17: Atribut Tipe Data dalam MySQL

Pengertian Atribut tipe data MySQL

Atribut tipe data adalah aturan yang kita terapkan untuk sebuah kolom. MySQL memiliki banyak atribut tipe data, namun dalam tutorial ini kita hanya membahas atribut tipe data yang paling umum digunakan, yakni: AUTO_INCREMENTBINARYDEFAULTNOT NULLNULLSIGNEDUNSIGNED, dan ZEROFILL.


Atribut AUTO_INCREMENT

Atribut AUTO_INCREMENT digunakan untuk tipe data numerik (biasanya tipe data INT), dimana jika kita menetapkan sebuah kolom dengan atribut AUTO_INCREMENT, maka setiap kali kita menginputkan data, nilai pada kolom ini akan bertambah 1. Nilai pada kolom tersebut juga akan bertambah jika kita input dengan NULL  atau nilai 0.

Pada sebuah tabel, hanya 1 kolom yang dapat dikenai atribut AUTO_INCREMENT. Setiap kolom AUTO_INCREMENT juga akan dikenakan atribut NOT NULL secara otomatis. Kolom AUTO_INCREMENT juga harus digunakan sebagai KEY (biasanya PRIMARY KEY)


Atribut BINARY

Atribut BINARY digunakan untuk tipe data huruf, seperti CHAR dan VARCHAR. Tipe data CHAR, VARCHAR dan TEXT tidak membedakan antara huruf besar dan kecil (case-insensitive), namun jika diberikan atribut BINARY, maka kolom tersebut akan membedakan antara huruf besar dan kecil (case-sensitive)


Atribut DEFAULT

Atribut DEFAULT dapat digunakan pada hampir semua tipe data. Fungsinya untuk menyediakan nilai bawaan untuk kolom seandainya tidak ada data yang diinput kepada kolom tersebut.


Atribut NOT NULL

Atribut NOT NULL dapat digunakan pada hampir semua tipe data, Fungsinya untuk memastikan bahwa nilai pada kolom tersebut tidak boleh kosong. Jika kita menginput data, namun tidak memberikan nilai untuk kolom tersebut, akan menghasilkan error pada MySQL.


Atribut NULL

Atribut NULL berkebalikan dengan NOT NULL, dimana jika sebuah kolom didefinisikan dengan NULL, maka kolom tersebut tidak harus berisi nilai.

NULL adalah istilah atau tipe data khusus dalam pemograman yang menyatakan ‘tidak ada nilai’, NULL tidak sama dengan 0, atau ‘’(string kosong). Operasi matematis dengan NULL akan menghasilkan nilai NULL.

Atribut SIGNED

Atribut SIGNED digunakan untuk tipe data numerik. Berlawanan dengan atribut UNSIGNED, dimana atribut ini berfungsi agar kolom dapat menampung nilai negatif. Atribut SIGNED biasanya dicantumkan hanya untuk menegaskan bahwa kolom tersebut mendukung nilai negatif, karena MySQL sendiri telah menyediakan nilai negatif secara default untuk seluruh tipe numerik.


Atribut UNSIGNED

Atribut UNSIGNED digunakan untuk tipe data numerik, namun berbeda sifatnya untuk tipe data INT,DECIMAL dan FLOAT. Untuk tipe data INT, atribut UNSIGNED berfungsi mengorbankan nilai negatif, untuk mendapatkan jangkauan nilai positif yang lebih tinggi. Namun untuk tipe data DECIMAL dan FLOAT, atribut UNSIGNED hanya akan menhilangkan nilai negatif, tanpa menambah jangkauan data.


Atribut ZEROFILL

Atribut ZEROFILL digunakan untuk tipe data numerik, dimana berfungsi untuk tampilan format data yang akan mengisi nilai 0 di sebelah kanan dari data. Jika kita menggunakan atribut ZEROFILL untuk suatu kolom, secara otomatis kolom tersebut juga dikenakan attribut UNSIGNED.

Contoh query untuk penggunaan attribut :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
mysql> CREATE TABLE contoh_att (no int AUTO_INCREMENT,
nama VARCHAR(30) NOT NULL,umur TINYINT UNSIGNED DEFAULT '10',
kodepos CHAR(5) NULL,PRIMARY KEY(no));
Query OK, 0 rows affected (0.13 sec)
 
mysql> DESCRIBE contoh_att;
+---------+---------------------+------+-----+---------+----------------+
| Field   | Type                | Null | Key | Default | Extra          |
+---------+---------------------+------+-----+---------+----------------+
| no      | int(11)             | NO   | PRI | NULL    | auto_increment |
| nama    | varchar(30)         | NO   |     | NULL    |                |
| umur    | tinyint(3) unsigned | YES  |     | 10      |                |
| kodepos | char(5)             | YES  |     | NULL    |                |
+---------+---------------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
 
mysql> INSERT INTO contoh_att VALUES (NULL,'Joko',NULL,20155);
Query OK, 1 row affected (0.00 sec)
 
mysql> INSERT INTO contoh_att VALUES (0,'Amir',23,27118);
Query OK, 1 row affected (0.05 sec)
 
mysql> INSERT INTO contoh_att VALUES (6,'Thasya',24,30012);
Query OK, 1 row affected (0.04 sec)
 
mysql> INSERT INTO contoh_att VALUES (9,NULL,32,10099);
ERROR 1048 (23000): Column 'nama' cannot be null
 
mysql> INSERT INTO contoh_att VALUES (NULL,'Rina',21,10889);
Query OK, 1 row affected (0.05 sec)
 
mysql> SELECT * FROM contoh_att;
+----+--------+------+---------+
| no | nama   | umur | kodepos |
+----+--------+------+---------+
|  1 | Joko   | NULL | 20155   |
|  2 | Amir   |   23 | 27118   |
|  6 | Thasya |   24 | 30012   |
|  7 | Rina   |   21 | 10889   |
+----+--------+------+---------+
4 rows in set (0.00 sec)

Dapat kita lihat bahwa jika kita memberikan nilai NULL kepada kolom nama yang telah diberikan atribut NOT NULL, MySQL akan memberikan error. Juga pada kolom no, dimana kita lompat dengan memberikan nilai 6, namun untuk kolom selanjutnya, akan tetap ditambah sebanyak 1, karena dikenai atribut AUTO_INCREMENT.


9. Merubah Tabel

Tutorial Belajar MySQL Part 18: Cara Merubah Tabel MySQL (ALTER TABLE)

Jika pada 5 tutorial MySQL sebelum ini kita telah mempelajari tentang tipe data tabel MySQL dan atribut tipe data tabel MySQL, pada tutorial kali ini akan dibahas tentang bagaimana merubah atau mengubah serta modifikasi tabel MySQL setelah tabel itu dibuat. Query yang akan kita pelajari adalah ALTER TABLE.


Ada kalanya setelah sebuah tabel MySQL dibuat, kita ingin mengubah struktur tabel tersebut. Entah itu berupa penambahan kolom baru, atau penghapusan sebuah kolom untuk digantikan dengan kolom lain.

Query untuk membuat tabel (CREATE TABLE) dan menghapus tabel (DROP TABLE) sudah kita bahas pada Tutorial MySQL: Cara Membuat dan Menghapus Tabel MySQL. Kali ini kita akan menggunakan perintah ALTER TABLE untuk mengubah struktur tabel MySQL.

Agar memudahkan dalam mempelajari query ALTER TABLE, saya akan membuat sebuah tabel sample: daftar_jurusan. Silahkan buka MySQL client, dan gunakan perintah query berikut jika anda ingin membuat tabel yang sama:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mahasiswa          |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.11 sec)
 
mysql> USE mahasiswa;
Database changed
 
mysql> CREATE TABLE daftar_jurusan ( kode_jurusan CHAR(5),
nama_jurusan VARCHAR(20),alamat VARCHAR(100),
jumlah_mahasiswa SMALLINT );
Query OK, 0 rows affected (0.05 sec)
 
mysql> DESC daftar_jurusan;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| kode_jurusan     | char(5)      | YES  |     | NULL    |       |
| nama_jurusan     | varchar(20)  | YES  |     | NULL    |       |
| alamat           | varchar(100) | YES  |     | NULL    |       |
| jumlah_mahasiswa | smallint(6)  | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+
4 rows in set (0.03 sec)

Query tersebut berisi perintah pembuatan tabel daftar_jurusan pada database mahasiswa. Jika anda belum membuat database, silahkan buat terlebih dahulu seperti pada Tutorial MySQL : Membuat dan Menghapus Database.


Cara Merubah Tipe Data Kolom MySQL

Sesaat setelah membuat tabel daftar_jurusan, saya berfikir untuk merubah tipe data pada kolom jumlah_mahasiswa dari SMALLINT menjadi MEDIUMINT agar dapat menampung lebih banyak nilai. Perubahan ini dapat dilakukan dengan mengunakan query ALTER…MODIFY sebagai berikut:

ALTER TABLE nama_tabel MODIFY nama_kolom tipe_data_baru;

Contoh query Alter…Modify:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> ALTER TABLE daftar_jurusan MODIFY jumlah_mahasiswa MEDIUMINT;
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> DESC daftar_jurusan;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| kode_jurusan     | char(5)      | YES  |     | NULL    |       |
| nama_jurusan     | varchar(20)  | YES  |     | NULL    |       |
| alamat           | varchar(100) | YES  |     | NULL    |       |
| jumlah_mahasiswa | mediumint(9) | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

Dari query DESC kita dapat melihat bahwa tipe data pada kolom jumlah_mahasiswa telah berubah menjadi MEDIUMINT.


Cara Merubah Nama Kolom Tabel MySQL

Untuk merubah nama kolom pada tabel yang sudah ada, dapat menggunakan perintah ALTER…CHANGE, dengan format query sebagai berikut:

ALTER TABLE nama_tabel CHANGE nama_kolom nama_kolom_baru tipe_data;

Katakan kita ingin merubah nama kolom alamat menjadi alamat_jurusan agar menjadi lebih spesifik, dapat dilakukan dengan query berikut:

Contoh query Alter…Change:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> ALTER TABLE daftar_jurusan CHANGE alamat alamat_jurusan VARCHAR(100);
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0
 
mysql> DESC daftar_jurusan;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| kode_jurusan     | char(5)      | YES  |     | NULL    |       |
| nama_jurusan     | varchar(20)  | YES  |     | NULL    |       |
| alamat_jurusan   | varchar(100) | YES  |     | NULL    |       |
| jumlah_mahasiswa | mediumint(9) | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

Cara Merubah Nama Tabel MySQL

Untuk beberapa kasus tertentu, mungkin saja kita memutuskan untuk merubah nama tabel MySQL. Untuk hal ini MySQL menyediakan query ALTER…RENAME TO dengan format query:

ALTER TABLE nama_tabel_lama RENAME TO nama_tabel_baru;

Kita contohkan merubah tabel daftar_jurusan menjadi tabel_jurusan, maka querynya:

Contoh query Alter…Rename To:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> ALTER TABLE daftar_jurusan RENAME TO tabel_jurusan;
Query OK, 0 rows affected (0.06 sec)
 
mysql> DESC daftar_jurusan;
ERROR 1146 (42S02): Table 'mahasiswa.daftar_jurusan' doesn't exist
 
mysql> DESC tabel_jurusan;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| kode_jurusan     | char(5)      | YES  |     | NULL    |       |
| nama_jurusan     | varchar(20)  | YES  |     | NULL    |       |
| alamat_jurusan   | varchar(100) | YES  |     | NULL    |       |
| jumlah_mahasiswa | mediumint(9) | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

Dapat kita lihat bahwa setelah merubah nama tabel menjadi tabel_jurusan, tabel daftar_jurusan sudah tidak terdapat lagi di dalam database mahasiswa.

Selain query ALTER…RENAME TO, terdapat juga perintah RENAME untuk merubah nama tabel,format querynya:

RENAME TABLE nama_tabel_lama TO nama_tabel_baru;

Mari kita rubah kembali nama tabel tabel_jurusan menjadi daftar_jurusan:

Contoh query Alter…Rename To:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> RENAME TABLE tabel_jurusan TO daftar_jurusan;
Query OK, 0 rows affected (0.07 sec)
 
mysql> DESC tabel_jurusan;
ERROR 1146 (42S02): Table 'mahasiswa.tabel_jurusan' doesn't exist
 
mysql> DESC daftar_jurusan;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| kode_jurusan     | char(5)      | YES  |     | NULL    |       |
| nama_jurusan     | varchar(20)  | YES  |     | NULL    |       |
| alamat_jurusan   | varchar(100) | YES  |     | NULL    |       |
| jumlah_mahasiswa | mediumint(9) | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

Cara Menambahkan Kolom Baru pada Tabel MySQL

Andaikan beberapa saat kemudian kita berfikir untuk menambahkan kolom yang berisi nama ketua jurusan ke dalam tabel daftar_jurusan, kita dapat saja menghapus tabel dan membuat ulang, namun dengan menggunakan query ALTER…ADD, menambahkan kolom baru dapat dilakukan dengan lebih mudah.

ALTER TABLE nama_tabel ADD nama_kolom_baru tipe_data;

Contoh query menambahkan kolom ketua_jurusan ke dalam tabel daftar_jurusan adalah:

Contoh query Alter…Add:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> ALTER TABLE daftar_jurusan ADD ketua_jurusan VARCHAR(50);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0
 
mysql> DESC daftar_jurusan;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| kode_jurusan     | char(5)      | YES  |     | NULL    |       |
| nama_jurusan     | varchar(20)  | YES  |     | NULL    |       |
| alamat_jurusan   | varchar(100) | YES  |     | NULL    |       |
| jumlah_mahasiswa | mediumint(9) | YES  |     | NULL    |       |
| ketua_jurusan    | varchar(50)  | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+
5 rows in set (0.01 sec)

Cara Menghapus Kolom Tabel MySQL

Kebalikan dari menambahkan kolom baru, query ALTER…DROP dapat digunakan untuk menghapus sebuah kolom dari tabel MySQL.

ALTER TABLE nama_tabel DROP nama_kolom;

Mari kita contohkan dengan menghapus kolom ketua_jurusan dari tabel daftar_jurusan:

Contoh query Alter…Drop:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> ALTER TABLE daftar_jurusan DROP ketua_jurusan;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0
 
mysql> DESC daftar_jurusan;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| kode_jurusan     | char(5)      | YES  |     | NULL    |       |
| nama_jurusan     | varchar(20)  | YES  |     | NULL    |       |
| alamat_jurusan   | varchar(100) | YES  |     | NULL    |       |
| jumlah_mahasiswa | mediumint(9) | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

Cara Merubah Tipe Data Table (Table Engine) MySQL

MySQL menyediakan beberapa tipe data untuk beberapa keperluan, seperti tipe data (disebut juga dengan engine tabel) MyISAM untuk tabel yang dioptimalisasikan untuk keperluan pembacaan yang lebih sering, atau tipe data InnoDB untuk tabel yang memerlukan transaksi.

Perubahan tipe data dari MyISAM ke InnoDB atau sebaliknya dapat menggunakan perintah ALTER…ENGINE:

ALTER TABLE nama_tabel ENGINE = tipe_tabel;

Dalam MySQL versi 5.5 yang saya gunakan pada tutorial ini, default enginenya adalah InnoDB, hal ini berbeda jika dibandingkan dengan versi MySQL sebelumnya yang menggunakan tipe tabel MyISAM sebagai default.

Pada contoh query dibawah ini kita akan merubah tipe data tabel daftar_jurusan dari InnoDB menjadi MyISAM.

Contoh query Alter…Engine:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
mysql> SHOW TABLE STATUS WHERE NAME='daftar_jurusan' \G;
 
***************************1.row***************************
Name: daftar_jurusan
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 0
Avg_row_length: 0
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 9437184
Auto_increment: NULL
Create_time: 2013-04-14 21:20:02
Update_time: NULL
Check_time: NULL
Collation: latin1_swedish_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
ERROR:
No query specified
 
mysql> ALTER TABLE daftar_jurusan ENGINE = MyISAM;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0
 
mysql> SHOW TABLE STATUS WHERE NAME='daftar_jurusan' \G;
 
***************************1.row***************************
Name: daftar_jurusan
Engine: MyISAM
Version: 10
Row_format: Dynamic
Rows: 0
Avg_row_length: 0
Data_length: 0
Max_data_length: 281474976710655
Index_length: 1024
Data_free: 0
Auto_increment: NULL
Create_time: 2013-04-14 22:43:29
Update_time: 2013-04-14 22:43:29
Check_time: NULL
Collation: latin1_swedish_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
ERROR:
No query specified
mysql>

Query SHOW TABLE STATUS digunakan untuk melihat engine apa yang digunakan dalam sebuah tabel. Penjelasan tentang tipe tabel akan kita pelajari pada tutorial tersendiri.


Dalam tutorial belajar MySQL kali ini kita telah membahas tentang query ALTER TABLE yang digunakan untuk mengubah struktur tabel di dalam MySQL. Dalam tutorial selanjutnya, kita akan mempelajari Cara Menambahkan data (Query INSERT) di dalam MySQL


10. Menambahkan data

Tutorial Belajar MySQL Part 19: Cara Menambahkan data ke dalam Tabel MySQL (INSERT)

Query INSERT untuk menambahkan data kedalam Tabel MySQL

Menambahkan sebuah data ke dalam tabel MySQL merupakan salah satu aktifitas yang paling sering dilakukan. Pembuatan database dan tabel hanya perlu dilakukan 1 kali saja, namun menginput data ke dalam tabel akan terus dilakukan sepanjang penggunaan aplikasi. Di dalam MySQL (dan juga RDBMS lainnya), kita menggunakan query INSERT untuk menambahkan data kedalam tabel.

Query INSERT sendiri memiliki banyak variasi perintah yang fleksibel tergantung kebutuhan. Termasuk pilihan ketika data yang akan diinput terdapat duplikasi, dengan opsi IGNORE dan ON DUPLICATE KEY UPDATE.

Sebagai tabel contoh untuk memahami perintah INSERT MySQL, kita akan membuat tabel mata_kuliah di dalam database mahasiswa dengan query sebagai berikut:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mahasiswa          |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.08 sec)
 
mysql> USE mahasiswa;
Database changed
 
mysql> CREATE TABLE mata_kuliah (kode_matkul CHAR(5) PRIMARY KEY,
nama_matkul VARCHAR(50) NOT NULL, jumlah_SKS TINYINT UNSIGNED DEFAULT '2',
nama_jurusan VARCHAR(50));
Query OK, 0 rows affected (0.01 sec)
 
mysql> DESC mata_kuliah;
+--------------+---------------------+------+-----+---------+-------+
| Field        | Type                | Null | Key | Default | Extra |
+--------------+---------------------+------+-----+---------+-------+
| kode_matkul  | char(5)             | NO   | PRI | NULL    |       |
| nama_matkul  | varchar(50)         | NO   |     | NULL    |       |
| jumlah_SKS   | tinyint(3) unsigned | YES  |     | 2       |       |
| nama_jurusan | varchar(50)         | YES  |     | NULL    |       |
+--------------+---------------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

Tabel mata_kuliah diatas didefinisikan menggunakan beberapa atribut yang telah kita bahas pada tutorial atribut tipe data MySQL (atribut PRIMARY KEY merupakan atribut yang membuat suatu kolom dalam tabel menjadi kolom kunci, penjelasan lebih lanjut akan kita bahas pada kesempatan berikutnya)


Cara Penulisan dasar query INSERT

Mengutip manual resmi MySQL, penulisan dasar dari perintah INSERT dalam MySQL adalah sebagai berikut:

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]

Seperti yang terlihat, MySQL menyediakan banyak pilihan opsional untuk memasukkan data ke dalam tabel. Kita akan membahasnya secara lebih dalam pada tutorial MySQL kali ini.

Sedikit penjelasan tentang cara membaca format dasar MySQL diatas, perintah yang terdapat diantara 2 kurung siku ([…..]) adalah opsional, kita tidak harus menulis seluruh perintah tersebut, namun dari format tersebut kita dapat mengetahui berbagai opsi yang tersedia yang dapat digunakan.

Cara Penggunaan Query INSERT…VALUES

Format perintah INSERT yang pertama kita bahas adalah yang paling sederhana, yaitu:

INSERT INTO nama_tabel VALUES (nilai_kolom1, nilai_kolom2,...);

nama_tabel adalah nama dari tabel yang akan diinput, sedangkan nilai_kolom1 adalah nilai yang akan kita input kedalam tabel MySQLnilai_kolom2 adalah nilai untuk kolom kedua, dan seterusnya. Perhatikan bahwa nilai_kolom harus berada dalam tanda kurung dan dipisahkan dengan koma untuk kolom-kolom berikutnya.

Langsung saja kita contohkan untuk memasukkan sebaris data ke dalam tabel mata_kuliah:

1
2
3
4
5
6
7
8
9
10
mysql> INSERT INTO mata_kuliah VALUES ('KIMDA','Kimia Dasar',2,' Kimia');
Query OK, 1 row affected (0.06 sec)
 
mysql> select * from mata_kuliah;
+-------------+-------------+------------+--------------+
| kode_matkul | nama_matkul | jumlah_SKS | nama_jurusan |
+-------------+-------------+------------+--------------+
| KIMDA       | Kimia Dasar |          2 |  Kimia       |
+-------------+-------------+------------+--------------+
1 row in set (0.00 sec)
Seperti yang telah kita bahas pada Tutorial MySQL Tipe Data String dan Tutorial MySQL Tipe Data Numerik, bahwa untuk kolom yang berisi karakter (string), harus situlis di dalam tanda petik (‘), dan sebaliknya untuk kolom yang berisi nilai numerik harus ditulis tanpa tanda petik.

Jika kita ingin langsung memasukkan 2 baris data atau lebih dalam satu perintah query INSERT MySQL, tinggal menambahkan isi data untuk baris berikutnya dibelakang perintah dengan format penulisan sebagai berikut:

INSERT INTO nama_tabel VALUES (nilai_kolom1a, nilai_kolom2a,...),
(nilai_kolom1b, nilai_kolom2b,...);

Contoh query untuk penambahan data dengan 2 baris sekaligus adalah:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> INSERT INTO mata_kuliah VALUES
('MMDAS','Matematika Dasar',4,'Matematika'),
('JRKOM','Jaringan Komputer',2,'Ilmu Komputer');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0
 
mysql> select * from mata_kuliah;
+-------------+-------------------+------------+---------------+
| kode_matkul | nama_matkul       | jumlah_SKS | nama_jurusan  |
+-------------+-------------------+------------+---------------+
| JRKOM       | Jaringan Komputer |          2 | Ilmu Komputer |
| KIMDA       | Kimia Dasar       |          2 |  Kimia        |
| MMDAS       | Matematika Dasar  |          4 | Matematika    |
+-------------+-------------------+------------+---------------+
3 rows in set (0.00 sec)

Perintah INSERT… VALUES diatas cocok untuk tabel dimana kita telah mengetahui urutan dari kolom yang ada. Namun dalam situasi kita tidak mengetahui urutan kolom dari tabel, kita harus mendefenisikan urutan kolom yang akan diisi dengan cara penulisan query INSERT… VALUES.


Cara Penggunaan Query INSERT (nama_kolom)… VALUES

Untuk situasi dimana kolom yang akan diisi tidak diketahui urutannya, atau kita hanya akan mengisi sebagian kolom saja, maka kita harus mendefenisikan kolom-kolom mana saja yang akan digunakan. Untuk keperluan tersebut, MySQL menyediakan variasi query INSERT, yaitu:

INSERT INTO nama_tabel (kolom1,kolom2,...) VALUES (nilai_kolom1,nilai_kolom2,...);

kolom1 adalah nama kolom yang akan kita input dengan nilai_kolom1, dan kolom2 adalah nama kolom yang akan diisi dengan data pada nilai_kolom2. Urutan nama kolom dengan nilai yang akan diisi harus sesuai.

Sebagai contoh, kita akan menggunakan perintah INSERT (nama_kolom)… VALUES pada MySQL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> TRUNCATE mata_kuliah;
Query OK, 0 rows affected (0.05 sec)
 
mysql> INSERT INTO mata_kuliah
(kode_matkul,nama_matkul,jumlah_SKS,nama_jurusan)
VALUES ('MMDAS','Matematika Dasar',4,'Matematika');
Query OK, 1 row affected (0.05 sec)
 
mysql> select * from mata_kuliah;
+-------------+------------------+------------+--------------+
| kode_matkul | nama_matkul      | jumlah_SKS | nama_jurusan |
+-------------+------------------+------------+--------------+
| MMDAS       | Matematika Dasar |          4 | Matematika   |
+-------------+------------------+------------+--------------+
1 row in set (0.00 sec)
Perintah query TRUNCATE pada baris pertama digunakan untuk mengosongkan tabel mata_kuliah, hal ini semata-mata hanya untuk keperluan agar tabel mata_kuliah kembali kosong. Silahkan abaikan perintah ini jika tidak ingin mengosongkan isi tabel terlebih dahulu. Kita akan membahas perintah TRUNCATE pada tutorial selanjutnya.

Bagaimana kalau urutan kolom kita acak? Selama perintah MySQL yang kita input sesuai  dengan urutan kolom yang ditulis, hal tersebut tidak menjadi masalah.

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> INSERT INTO mata_kuliah
(nama_jurusan, kode_matkul, jumlah_SKS, nama_matkul)
VALUES ('Ilmu Komputer', 'JRKOM',2,'Jaringan Komputer');
Query OK, 1 row affected (0.04 sec)
 
mysql> select * from mata_kuliah;
+-------------+-------------------+------------+---------------+
| kode_matkul | nama_matkul       | jumlah_SKS | nama_jurusan  |
+-------------+-------------------+------------+---------------+
| JRKOM       | Jaringan Komputer |          2 | Ilmu Komputer |
| MMDAS       | Matematika Dasar  |          4 | Matematika    |
+-------------+-------------------+------------+---------------+
2 rows in set (0.00 sec)

Jika kita melihat query pada saat pembuatan tabel mata_kuliah, kolom jumlah_SKS didefinisikan dengan nilai default 2, dengan kata lain jika kolom ini tidak diisi, maka nilai default 2 akan digunakan untuk kolom jumlah_SKS.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mysql> INSERT INTO mata_kuliah (kode_matkul,nama_matkul,nama_jurusan)
VALUES ('FIDAS','Fisika Dasar','Fisika'),
('CITRA','Pengolahan CITRA','Ilmu Komputer'),
('PBASE','Pengantar Database','Ilmu Komputer');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
mysql> select * from mata_kuliah;
+-------------+--------------------+------------+---------------+
| kode_matkul | nama_matkul        | jumlah_SKS | nama_jurusan  |
+-------------+--------------------+------------+---------------+
| CITRA       | Pengolahan CITRA   |          2 | Ilmu Komputer |
| FIDAS       | Fisika Dasar       |          2 | Fisika        |
| JRKOM       | Jaringan Komputer  |          2 | Ilmu Komputer |
| MMDAS       | Matematika Dasar   |          4 | Matematika    |
| PBASE       | Pengantar Database |          2 | Ilmu Komputer |
+-------------+--------------------+------------+---------------+
5 rows in set (0.00 sec)

Dalam query diatas, saya sengaja hanya mengisi 3 kolom, tanpa menginput kolom jumlah_SKS, tetapi karena nilai default kolom jumlah_SKS adalah 2, maka kolom jumlah_SKS akan tetap berisi dengan nilai.


Cara Penggunaan Query INSERT IGNORE… VALUES

Dalam setiap pendefinisan tabel, sebaiknya (baca: seharusnya) sebuah tabel memiliki satu kolom yang didefenisikan sebagai PRIMARY KEY. Kolom dengan atribut PRIMARY KEY harus unik, dalam arti tidak boleh ada duplikasi data pada kolom tersebut. Kegunaan kolom ini adalah sebagai penanda bahwa kolom dengan nilai yang sama telah bisa diinput pada tabel.

Pada tabel mata_kuliah kita telah mendefenisikan kolom kode_matkul sebagai PRIMARY KEY, sehingga jika ada data mata_kuliah yang telah ada sebelumnya, dan kita mencoba menginput data baru dengan nilai yang sama, MySQL akan menghasilkan error dan seluruh perintah akan dibatalkan.

Sebagai contoh query, saya akan mencoba menginput kode_matkul: ‘CITRA’ pada tabel mata_kuliah. Nilai ‘CITRA’ ini sebenarnya sudah tersedia di dalam tabel:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
mysql> select * from mata_kuliah;
+-------------+--------------------+------------+---------------+
| kode_matkul | nama_matkul        | jumlah_SKS | nama_jurusan  |
+-------------+--------------------+------------+---------------+
| CITRA       | Pengolahan CITRA   |          2 | Ilmu Komputer |
| FIDAS       | Fisika Dasar       |          2 | Fisika        |
| JRKOM       | Jaringan Komputer  |          2 | Ilmu Komputer |
| MMDAS       | Matematika Dasar   |          4 | Matematika    |
| PBASE       | Pengantar Database |          2 | Ilmu Komputer |
+-------------+--------------------+------------+---------------+
5 rows in set (0.00 sec)
 
mysql> INSERT INTO mata_kuliah
(kode_matkul,nama_matkul, jumlah_SKS ,nama_jurusan)
VALUES ('CITRA','Pengantar CITRA',4,'Ilmu Komputer'),
('STATS','Statistika',4,'Matematika');
 
ERROR 1062 (23000): Duplicate entry 'CITRA' for key 'PRIMARY'
 
mysql> select * from mata_kuliah;
+-------------+--------------------+------------+---------------+
| kode_matkul | nama_matkul        | jumlah_SKS | nama_jurusan  |
+-------------+--------------------+------------+---------------+
| CITRA       | Pengolahan CITRA   |          2 | Ilmu Komputer |
| FIDAS       | Fisika Dasar       |          2 | Fisika        |
| JRKOM       | Jaringan Komputer  |          2 | Ilmu Komputer |
| MMDAS       | Matematika Dasar   |          4 | Matematika    |
| PBASE       | Pengantar Database |          2 | Ilmu Komputer |
+-------------+--------------------+------------+---------------+
5 rows in set (0.00 sec)

Pada query diatas saya mencoba menginput 2 buah data baru dengan kode_matkul : CITRA’ dan ‘STATS’. Namun karena ‘CITRA’ telah ada sebelumnya pada tabel, maka MySQL akan menghasilkan error Duplicate entry ‘CITRA’ for key ‘PRIMARY’ dan tidak menjalankan penginputan ‘STATS’, walaupun  ‘STATS’ sebenarnya belum tersedia di dalam tabel.

Untuk ‘memaksa’ MySQL tetap menjalankan perintah penginputan ‘STATS’,  kita bisa menambahkan perintah opsional IGNORE. Perintah ini memaksa MySQL tetap menjalankan seluruh query walaupun terdapat error.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
mysql> select * from mata_kuliah;
+-------------+--------------------+------------+---------------+
| kode_matkul | nama_matkul        | jumlah_SKS | nama_jurusan  |
+-------------+--------------------+------------+---------------+
| CITRA       | Pengolahan CITRA   |          2 | Ilmu Komputer |
| FIDAS       | Fisika Dasar       |          2 | Fisika        |
| JRKOM       | Jaringan Komputer  |          2 | Ilmu Komputer |
| MMDAS       | Matematika Dasar   |          4 | Matematika    |
| PBASE       | Pengantar Database |          2 | Ilmu Komputer |
+-------------+--------------------+------------+---------------+
5 rows in set (0.00 sec)
 
mysql> INSERT IGNORE INTO mata_kuliah
(kode_matkul,nama_matkul, jumlah_SKS ,nama_jurusan) VALUES
('CITRA','Pengantar CITRA',4,'Ilmu Komputer'),
('STATS','Statistika',4,'Matematika');
Query OK, 1 row affected (0.04 sec)
Records: 2  Duplicates: 1  Warnings: 0
 
mysql> select * from mata_kuliah;
+-------------+--------------------+------------+---------------+
| kode_matkul | nama_matkul        | jumlah_SKS | nama_jurusan  |
+-------------+--------------------+------------+---------------+
| CITRA       | Pengolahan CITRA   |          2 | Ilmu Komputer |
| FIDAS       | Fisika Dasar       |          2 | Fisika        |
| JRKOM       | Jaringan Komputer  |          2 | Ilmu Komputer |
| MMDAS       | Matematika Dasar   |          4 | Matematika    |
| PBASE       | Pengantar Database |          2 | Ilmu Komputer |
| STATS       | Statistika         |          4 | Matematika    |
+-------------+--------------------+------------+---------------+
6 rows in set (0.00 sec)

Sekarang, dengan perintah IGNORE, walaupun di dalam query saya ada error (nilai CITRA terjadi duplikasi), namun nilai ‘STATS’ akan tetap ditambahkan ke dalam tabel.


Cara Penggunaan Query INSERT… VALUES…ON DUPLICATE KEY UPDATE…

Dalam query INSERT … IGNORE sebelumnya, MySQL akan mengabaikan error jika terdapat nilai kode_matkul yang ganda. Tetapi MySQL juga menyediakan perintah opsional lain untuk menangani duplikasi data dengan meng-update nilai kolom lain. Penjelasan ini akan lebih mudah jika menggunakan contoh.

Pada contoh query berikut ini saya akan mencoba menambahkan kode_matkul: ‘CITRA’, dan jika terdapat kode matkul yang sama, saya ingin merubah nama_matkul. Instruksi ini dapat dilakukan dengan menambahkan perintah ON DUPLICATE KEY UPDATE pada akhir query INSERT. Berikut adalah contoh penggunaannya:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
mysql> select * from mata_kuliah;
+-------------+--------------------+------------+---------------+
| kode_matkul | nama_matkul        | jumlah_SKS | nama_jurusan  |
+-------------+--------------------+------------+---------------+
| CITRA       | Pengolahan CITRA   |          2 | Ilmu Komputer |
| FIDAS       | Fisika Dasar       |          2 | Fisika        |
| JRKOM       | Jaringan Komputer  |          2 | Ilmu Komputer |
| MMDAS       | Matematika Dasar   |          4 | Matematika    |
| PBASE       | Pengantar Database |          2 | Ilmu Komputer |
| STATS       | Statistika         |          4 | Matematika    |
+-------------+--------------------+------------+---------------+
6 rows in set (0.00 sec)
 
mysql> INSERT INTO mata_kuliah
(kode_matkul,nama_matkul, jumlah_SKS ,nama_jurusan)
VALUES ('CITRA','Pengantar CITRA',4,'Ilmu Komputer')
ON DUPLICATE KEY UPDATE nama_matkul='Pengantar CITRA';
Query OK, 2 rows affected (0.13 sec)
 
mysql> select * from mata_kuliah;
+-------------+--------------------+------------+---------------+
| kode_matkul | nama_matkul        | jumlah_SKS | nama_jurusan  |
+-------------+--------------------+------------+---------------+
| CITRA       | Pengantar CITRA    |          2 | Ilmu Komputer |
| FIDAS       | Fisika Dasar       |          2 | Fisika        |
| JRKOM       | Jaringan Komputer  |          2 | Ilmu Komputer |
| MMDAS       | Matematika Dasar   |          4 | Matematika    |
| PBASE       | Pengantar Database |          2 | Ilmu Komputer |
| STATS       | Statistika         |          4 | Matematika    |
+-------------+--------------------+------------+---------------+
6 rows in set (0.00 sec)

Dari query diatas dapat kita perhatikan bahwa nama_matkul ‘CITRA’ telah berubah dari sebelumnya ‘Pengolahan Citra’ menjadi ‘Pengantar Citra’. Hal ini dimungkinkan dengan pilihan ON DUPLICATE KEY UPDATE.


Demikian pembahasan kita kali ini tentang query INSERT MySQL, Query INSERT menyediakan cara input data ke tabel dengan cepat. Namun untuk jika kita memiliki data dalam jumlah besar, MySQL menyediakan fasilitas untuk input langsung dari file external, pembahasan tentang ini akan kita bahas pada tutorial belajar MysQL selanjutnya: Cara Menambahkan data dari File (LOAD DATA INFILE).


11. Menambahkan data dari File

Tutorial Belajar MySQL Part 20: Cara Menambahkan data dari File (LOAD DATA INFILE)

Mempersiapkan Tabel Contoh: daftar_dosen

Sebagai tabel contoh untuk mempelajari cara menambahkan data menggunakan query LOAD DATA INFILE, kita akan mempersiapkan tabel daftar_dosen, dengan query sebagai berikut:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mahasiswa          |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.08 sec)
 
mysql> USE mahasiswa;
Database changed
 
mysql> CREATE TABLE daftar_dosen (NIP CHAR(10) PRIMARY KEY,
nama_dosen VARCHAR(50) NOT NULL, no_hp CHAR(13),
alamat VARCHAR(100));
Query OK, 0 rows affected (0.16 sec)
 
mysql> DESC daftar_dosen;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| NIP        | char(10)     | NO   | PRI | NULL    |       |
| nama_dosen | varchar(50)  | NO   |     | NULL    |       |
| no_hp      | char(13)     | YES  |     | NULL    |       |
| alamat     | varchar(100) | YES  |     | NULL    |       |
+------------+--------------+------+-----+---------+-------+
4 rows in set (0.14 sec)

Cara Penulisan dasar query LOAD DATA INFILE

Query MySQL: LOAD DATA INFILE digunakan untuk menginput data kedalam tabel dimana data yang diinput berasal dari sebuah file. Kita akan mempelajari cara penggunaannya dengan contoh dalam tutorial kali ini.

Query lengkap dari LOAD DATA INFILE sesuai dari manual MySQL adalah sebagai berikut:

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [CHARACTER SET charset_name]
    [{FIELDS | COLUMNS}
        [TERMINATED BY 'string']
        [[OPTIONALLY] ENCLOSED BY 'char']
        [ESCAPED BY 'char']
    ]
    [LINES
        [STARTING BY 'string']
        [TERMINATED BY 'string']
    ]
    [IGNORE number {LINES | ROWS}]
    [(col_name_or_user_var,...)]
    [SET col_name = expr,...]

Dapat kita lihat bahwa MySQL menyediakan banyak pilihan opsional (dalam tanda kurung siku) yang dapat digunakan tergantung kebutuhan. Dalam tutorial MySQL ini, kita akan membahas beberapa diantaranya.


Cara Penggunaan query LOAD DATA INFILE dalam MySQL

Agar lebih gampang dipahami, kita akan langsung mencoba query LOAD DATA INFILE, dengan membuat sebuah file input_data.txt. Anda bebas untuk meletakkan file tersebut. Pada contoh ini, saya akan menempatkannya pada folder “D:\MySQL\”.

Buka notepad, lalu tuliskan data berikut ke dalam file text tersebut, dan save sebagai input_data.txt:

"0576431001","M. Siddiq","0812979005","Jakarta"
"0770435006","Siswanto","0812567765","Medan"
"0869437003","Andi Mulia","0812332564","Padang"
"0260432002","Maya Ari Putri","0812345234","Palembang"
"1080432007","Arif Budiman","0812456345","Makasar"
"0275430005","Susi Indriani","0812656532","Bogor"

Berikut tampilan file input_data.txt

contoh data LOAD DATA INFILE MySQLE MySQL

Pada saat membuat file, pastikan menekan Enter di akhir baris untuk membuat baris baru. Selanjutnya buka MySQL Client command prompt dan jalankan query berikut:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mysql> LOAD DATA INFILE 'D:\\MySQL\\input_data.txt'
INTO TABLE daftar_dosen FIELDS TERMINATED BY ','
ENCLOSED BY '"' LINES TERMINATED BY '\r\n';
Query OK, 6 rows affected (0.05 sec)
Records: 6  Deleted: 0  Skipped: 0  Warnings: 0
 
mysql> SELECT * FROM daftar_dosen;
+------------+----------------+------------+-----------+
| NIP        | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 0260432002 | Maya Ari Putri | 0812345234 | Palembang |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
| 0576431001 | M. Siddiq      | 0812979005 | Jakarta   |
| 0770435006 | Siswanto       | 0812567765 | Medan     |
| 0869437003 | Andi Mulia     | 0812332564 | Padang    |
| 1080432007 | Arif Budiman   | 0812456345 | Makasar   |
+------------+----------------+------------+-----------+
6 rows in set (0.00 sec)

Mari kita bahas tentang penulisan perintah LOAD DATA INFILE diatas:

  • Hal pertama yang kita tulis setelah perintah LOAD DATA INFILE adalah lokasi tempat file input_data.txt berada. Dalam query diatas, file tersebut berada pada D:\MySQL\input_data.txt. Tetapi karena didalam MySQL karakter ‘\’merupakan karakter khusus, maka penulisannya harus di-double, sehingga menjadi D:\\MySQL\\input_data.txt. Jika lokasi file anda berbeda, tinggal menyesuaikan saja.
  • Setelah lokasi file, selanjutnya kita menambahkan perintah ke tabel mana file tersebut akan diinput. Pada contoh kita, tabel tersebut adalah daftar_dosen, sehingga ditulis …INTO TABLE daftar_dosen…
  • Perintah FIELDS TERMINATED BY ‘,’  dimaksudkan sebagai instruksi pada MySQL bahwa setiap kolom pada input_data.txt dipisahkan oleh karakter koma ‘,’. Namun tidak harus tanda koma, tanda lain seperti titik, tanda ‘|’, maupun karakter tab bisa kita gunakan sebagai tanda pemisah, dan instruksikan MySQL untuk menggunakan tanda tersebut sebagai penanda kolom.
  • Instruksi ENCLOSED BY ‘”‘ memberitahu MySQL agar menghapus penanda kutip dua (“) dari tiap kolom. Namun jika pada daftar_dosen.txt kita tidak menambahkan tanda kutip dua diawal data, MySQL tetap akan menerima data tersebut.
  • Pada akhir query, perintah …LINES TERMINATED BY ‘\r\n’ menginstruksikan MySQL agar tiap baris diakhiri dengan karakter new line dan carriage return. Karakter khusus ini terbentuk ketika kita menekan Enter pada keyboard untuk pindah baris pada notepad. ‘\r‘ merupakan cara penulisan untuk karakter carriage return, sedangkan ‘\n‘ adalah karakter new line.

Berbagai pilihan instruksi dari query LOAD DATA INFILE

Jika kita melihat format penulisan query LOAD DATA INFILE, terdapat beberapa pilihan opsi lainnya, kita akan membahas beberapa diantaranya:

Penjelasan opsi LOCAL

Opsi LOCAL disini digunakan untuk menentukan lokasi dari text yang diinput. Jika kita menuliskan LOCAL, maka file text akan dicari dalam komputer Client MySQL. Namun jika tidak ditulis, maka lokasi file akan dicari pada komputer MySQL Server. Karena kita mengistall MySQL pada satu komputer, opsi LOCAL tidak akan berpengaruh, karena MySQL Server dan MySQL Client berada pada komputer yang sama, dan juga folder yang sama (file mysqld.exe adalah MySQL Server, dan file mysql.exe adalah MySQL Client). Contoh penggunaan query-nya: LOAD DATA LOCAL INFILE ‘path_to_file’

Penjelasan opsi [REPLACE | IGNORE]

Opsi [REPLACE | IGNORE] berkaitan dengan cara MySQL menangani duplikasi data pada kolom PRIMARY KEY. Jika opsi REPLACE digunakan, maka saat ditemukan data yang sama, maka data yang baru akan menimpa data lama, namun jika menggunakan opsi IGNORE, data yang baru akan diabaikan dan MySQL akan menjalankan baris berikutnya.

Penjelasan opsi LINES STARTING BY ‘string’ dan TERMINATED BY ‘string’

Opsi ini digunakan untuk menentukan awal dari data dan akhir dari data. String disini dapat berupa karakter seperti “,” atau “*”, maupun karakter new line dan carriage return.

Penggunaan karakter-karakter khusus dapat dilihat dari tabel dibawah ini:

PenulisanPenjelasan Karakter
\0Karakter ASCII untuk NULL (0x00)
\'Karakter tanda kutip satu (')
\"Karakter tanda kutip dua(")
\bKarakter backspace
\nKarakter newline (linefeed)
\rKarakter carriage return
\tKarakter untuk tab
\ZASCII 26 (Control+Z)
\\Karakter untuk backslash (\)
\%Karakter untuk tanda persen (%)
\_Karakter untuk tanda garis bawah (_)

Penjelasan opsi IGNORE number

Opsi IGNORE dapat digunakan untuk mengistruksikan MySQL agar melompati beberapa baris dan memulai dari baris ke sekian. Hal ini berguna jika pada awal text merupakan penjelasan nama kolom.


 

Contoh Cara Penggunaan query LOAD DATA INFILE dengan opsi LOCAL, REPLACE dan LINES STARTING BY

Agar memahami penggunaan LOCAL, REPLACE dan LINES STARTING BY, kita akan mencoba menggunakan query LOAD DATA INFILE untuk file kedua berikut.

Kali ini saya akan membuat file data_lagi.txt, dengan isian sebagai berikut:

NIP                  Nama          No Hp          Kota
**'0876439004'   'Mulyono'       '0812912312'  'Semarang'|
**'0770435006'   'Rubin Hadi'    '0812567678'  'Papua'|
**'0869437003'   'Mustalifah'    '0812338877'  'Aceh'|
**'0160436012'   'Sabrina Sari'  '0812349900'  'Pekanbaru'|
**'0480432066'   'Tia Santrini'  '0812451177'  'Padang'|

Berikut tampilan file input_data.txt

contoh data LOAD DATA INFILE MySQL

Perhatikan bahwa setiap baris diawali dengan tanda bintang dua kali (**), diakhiri dengan karakter pipa (|) dan setiap kolom dibatasi dengan tab. Juga pada baris ke 2 dan 3 akan terdapat duplikasi untuk kolom NIP dengan data sebelumnya. Baris pertama dari text adalah judul kolom.

Agar file diatas dapat diproses oleh MySQL, kita perlu menggunakan perintah tambahan. Penulisan query untuk menginput file ini adalah sebagai berikut:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
mysql> SELECT * FROM daftar_dosen;
+------------+----------------+------------+-----------+
| NIP        | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 0260432002 | Maya Ari Putri | 0812345234 | Palembang |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
| 0576431001 | M. Siddiq      | 0812979005 | Jakarta   |
| 0770435006 | Siswanto       | 0812567765 | Medan     |
| 0869437003 | Andi Mulia     | 0812332564 | Padang    |
| 1080432007 | Arif Budiman   | 0812456345 | Makasar   |
+------------+----------------+------------+-----------+
6 rows in set (0.00 sec)
 
mysql> LOAD DATA LOCAL INFILE 'D:\\MySQL\\data_lagi.txt' REPLACE
INTO TABLE daftar_dosen FIELDS TERMINATED BY '\t'
ENCLOSED BY '\'' LINES STARTING BY '**' TERMINATED BY '|'
IGNORE 1 LINES;
Query OK, 6 rows affected (0.02 sec)
Records: 4  Deleted: 2  Skipped: 0  Warnings: 0
 
mysql> SELECT * FROM daftar_dosen;
+------------+----------------+------------+-----------+
| NIP        | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 0160436012 | Sabrina Sari   | 0812349900 | Pekanbaru |
| 0260432002 | Maya Ari Putri | 0812345234 | Palembang |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
| 0480432066 | Tia Santrini   | 0812451177 | Padang    |
| 0576431001 | M. Siddiq      | 0812979005 | Jakarta   |
| 0770435006 | Rubin Hadi     | 0812567678 | Papua     |
| 0869437003 | Mustalifah     | 0812338877 | Aceh      |
| 1080432007 | Arif Budiman   | 0812456345 | Makasar   |
+------------+----------------+------------+-----------+
8 rows in set (0.00 sec)

Query diatas menambahkan 4 baris dan menghapus 2 baris, hal ini dapat dilihat setelah query dijalankan Records: 4  Deleted: 2  Skipped: 0  Warnings: 0. Hal ini dikarenakan opsi REPLACE yang menggantikan 2 baris yang memiliki NIP yang sama.


Dalam tutorial belajar MySQL kali ini kita telah membahas cara menambahkan data ke tabel MySQL dari sebuah file text external menggunakan query LOAD DATA INFILE. Melanjutkan pembahasan mengenai query dasar MySQL, berikutnya kita akan membahas tentang Cara Menampilkan Data MySQL dengan query SELECT.


12. Menampilkan Data

Tutorial Belajar MySQL Part 21: Cara Menampilkan Data dari Tabel MySQL (SELECT)

Mempersiapkan Tabel Contoh: mata_kuliah dan daftar_dosen

Karena pembahasan query SELECT memiliki banyak variasi yang membuatnya memiliki banyak fitur, dalam tutorial kali ini saya akan membuat 2 buah tabel dengan nama mata_kuliah dan daftar_dosen. Tabel ini juga akan digunakan untuk beberapa tutorial selanjutnya.

Berikut adalah query yang digunakan untuk merancang tabel mata_kuliah dan daftar_dosen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mahasiswa          |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.13 sec)
 
mysql> USE mahasiswa;
Database changed
 
mysql> CREATE TABLE daftar_dosen (NIP CHAR(10) PRIMARY KEY,
nama_dosen VARCHAR(50) NOT NULL, no_hp CHAR(13),
alamat VARCHAR(100));
Query OK, 0 rows affected (0.10 sec)
 
mysql> DESC daftar_dosen;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| NIP        | char(10)     | NO   | PRI | NULL    |       |
| nama_dosen | varchar(50)  | NO   |     | NULL    |       |
| no_hp      | char(13)     | YES  |     | NULL    |       |
| alamat     | varchar(100) | YES  |     | NULL    |       |
+------------+--------------+------+-----+---------+-------+
4 rows in set (0.08 sec)
 
mysql> CREATE TABLE mata_kuliah (kode_matkul CHAR(6) PRIMARY KEY,
nama_matkul VARCHAR(50) NOT NULL,
jumlah_SKS TINYINT UNSIGNED DEFAULT '2',
semester TINYINT,NIP_dosen CHAR(10));
Query OK, 0 rows affected (0.04 sec)
 
mysql> DESC mata_kuliah;
+-------------+---------------------+------+-----+---------+-------+
| Field       | Type                | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+-------+
| kode_matkul | char(6)             | NO   | PRI | NULL    |       |
| nama_matkul | varchar(50)         | NO   |     | NULL    |       |
| jumlah_SKS  | tinyint(3) unsigned | YES  |     | 2       |       |
| semester    | tinyint(4)          | YES  |     | NULL    |       |
| NIP_dosen   | char(10)            | YES  |     | NULL    |       |
+-------------+---------------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

Berikutnya adalah mengisi tabel tersebut dengan data sample. Dalam contoh ini saya menggunakan data sample seperti pada tabel dibawah ini:

Data input untuk tabel daftar_dosen:

NIPNama DosenNo HPAlamat
0160436012Sabrina Sari0812349900Pekanbaru
0260432002Maya Ari Putri0812345234Palembang
0275430005Susi Indriani0812656532Bogor
0480432066Tia Santrini0812451177Padang
0576431001M. Siddiq0812979005Jakarta
0770435006Rubin Hadi0812567678Papua
0869437003Mustalifah0812338877Aceh
1080432007Arif Budiman0812456345Makasar

Data input untuk tabel mata_kuliah:

Kode Mata KuliahNama MatakuliahJumlah SKSSemesterNip Dosen
MATDASMatematika Dasar410160436012
FISDASFisika Dasar210480432066
TEKKOMTeknik Kompilasi260480432066
JARKOMJaringan Komputer330770435006
DTBASEDatabase440275430005
SISOPRSistem Operasi240160436012
MIKROPMikro Prosesor250480432066

Anda boleh menginputnya satu per satu dengan perintah INSERT seperti yang telah kita pelajari pada Tutorial Cara Menambahkan data ke dalam Tabel dengan query INSERT.

Selain itu saya juga menyediakan file text untuk diinput melalui query LOAD DATA INFILE, seperti pada Tutorial Menambahkan data dari File (LOAD DATA INFILE), file text tersebut dapat diambil dari link berikut: sample data tabel daftar_dosen dan mata_kuliah.

Khusus untuk yang mencoba menginput data melalui perintah LOAD DATA INFILE, berikut query yang diperlukan (saya berasumsi anda meletakkan file mata_kuliah.txt dan daftar_dosen.txt pada folder D:\MySQL )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
mysql> LOAD DATA INFILE 'D:\\MySQL\\daftar_dosen.txt'
INTO TABLE daftar_dosen
FIELDS TERMINATED BY ','  LINES TERMINATED BY '\r\n';
Query OK, 8 rows affected (0.06 sec)
Records: 8  Deleted: 0  Skipped: 0  Warnings: 0
 
mysql> SELECT * FROM daftar_dosen;
+------------+----------------+------------+-----------+
| NIP        | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 0160436012 | Sabrina Sari   | 0812349900 | Pekanbaru |
| 0260432002 | Maya Ari Putri | 0812345234 | Palembang |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
| 0480432066 | Tia Santrini   | 0812451177 | Padang    |
| 0576431001 | M. Siddiq      | 0812979005 | Jakarta   |
| 0770435006 | Rubin Hadi     | 0812567678 | Papua     |
| 0869437003 | Mustalifah     | 0812338877 | Aceh      |
| 1080432007 | Arif Budiman   | 0812456345 | Makasar   |
+------------+----------------+------------+-----------+
8 rows in set (0.00 sec)
 
mysql> LOAD DATA INFILE 'D:\\MySQL\\mata_kuliah.txt'
INTO TABLE mata_kuliah
FIELDS TERMINATED BY ','  LINES TERMINATED BY '\r\n';
Query OK, 7 rows affected (0.04 sec)
Records: 7  Deleted: 0  Skipped: 0  Warnings: 0
 
mysql> SELECT * FROM mata_kuliah;
+-------------+-------------------+------------+----------+------------+
| kode_matkul | nama_matkul       | jumlah_SKS | semester | NIP_dosen  |
+-------------+-------------------+------------+----------+------------+
| DTBASE      | Database          |          4 |        4 | 0275430005 |
| FISDAS      | Fisika Dasar      |          2 |        1 | 0480432066 |
| JARKOM      | Jaringan Komputer |          3 |        3 | 0770435006 |
| MATDAS      | Matematika Dasar  |          4 |        1 | 0160436012 |
| MIKROP      | Mikro Prosesor    |          2 |        5 | 0480432066 |
| SISOPR      | Sistem Operasi    |          2 |        4 | 0160436012 |
| TEKKOM      | Teknik Kompilasi  |          2 |        6 | 0480432066 |
+-------------+-------------------+------------+----------+------------+
7 rows in set (0.00 sec)

Dengan seluruh tabel sample dan isinya selesai dibuat, kita siap untuk menampilkan data dari tabel tersebut dengan query SELECT MySQL.


Format Dasar Penulisan query SELECT

Pada saat ingin menampilkan data, biasanya kita butuh 3 hal:

  • Apa saja kolom yang ingin ditampilkan.
  • Nama tabel yang akan ditampilkan.
  • Kondisi untuk menampilkan data.

Query SELECT pada dasarnya juga terdiri dari 3 hal tersebut. Berikut adalah format dasar penulisan query SELECT MySQL:

SELECT apa_yang_akan_ditampilkan FROM tabel_apa
WHERE kondisi_apa_data_ditampilkan;

Ketiga faktor tersebut akan kita bahas dalam tutorial kali ini, dan karena kebutuhan menampilkan data sangat beragam, MySQL memiliki banyak opsi yang dapat digunakan, berikut adalah format dasar query SELECT yang saya ambil dari manual MySQL:

SELECT
   [ALL | DISTINCT | DISTINCTROW ]
      [HIGH_PRIORITY]
      [STRAIGHT_JOIN]
      [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
      [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
   select_expr [, select_expr ...]
   [FROM table_references
   [WHERE where_condition]
   [GROUP BY {col_name | expr | position}
      [ASC | DESC], ... [WITH ROLLUP]]
   [HAVING where_condition]
   [ORDER BY {col_name | expr | position}
      [ASC | DESC], ...]
   [LIMIT {[offset,] row_count | row_count OFFSET offset}]
   [PROCEDURE procedure_name(argument_list)]
   [INTO OUTFILE 'file_name'
      [CHARACTER SET charset_name]
      export_options
      | INTO DUMPFILE 'file_name'
      | INTO var_name [, var_name]]
   [FOR UPDATE | LOCK IN SHARE MODE]]

Seperti yang terlihat, MySQL menyediakan banyak sekali perintah opsional yang dapat dipilih untuk membantu kita menampilkan data dari database.

Sebagian besar tidak akan kita butuhkan, namun setidaknya MySQL menyediakan banyak pilihan untuk menampilkan hasil query SELECT. Kita akan bahas beberapa diantaranya.


Cara Menampilkan Seluruh Isi Tabel MySQL

Mungkin inilah query SELECT yang paling mudah diingat dan paling populer, yaitu bagaimana cara menampilkan seluruh data dari sebuah tabel.

Format dasar query select untuk menampilkan seluruh isi tabel adalah sebagai berikut:

SELECT * FROM nama_tabel

Tanda bintang (*) adalah wildcard sebagai pengganti ‘pilih semua kolom‘.

Sebagai contoh, berikut adalah query untuk menampilkan seluruh isi tabel daftar_dosen :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> SELECT * FROM daftar_dosen;
+------------+----------------+------------+-----------+
| NIP        | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 0160436012 | Sabrina Sari   | 0812349900 | Pekanbaru |
| 0260432002 | Maya Ari Putri | 0812345234 | Palembang |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
| 0480432066 | Tia Santrini   | 0812451177 | Padang    |
| 0576431001 | M. Siddiq      | 0812979005 | Jakarta   |
| 0770435006 | Rubin Hadi     | 0812567678 | Papua     |
| 0869437003 | Mustalifah     | 0812338877 | Aceh      |
| 1080432007 | Arif Budiman   | 0812456345 | Makasar   |
+------------+----------------+------------+-----------+
8 rows in set (0.00 sec)

Cara Menampilkan Kolom Tertentu dari Tabel MySQL (SELECT … FROM)

Jika ingin menampilkan hanya sebagian kolom saja dari dalam tabel, kita dapat menentukan kolom mana saja yang akan ditampilkan.

Format dasarnya adalah sebagai berikut:

SELECT nama_kolom1, nama_kolom2,... FROM nama_tabel

nama_kolom1 dan nama_kolom2 adalah nama kolom yang ingin ditampilkan. Misalnya kita ingin menampilkan kolom nama_dosen dan alamat dari tabel daftar_dosen, maka querynya adalah sebagai berikut:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> SELECT nama_dosen, alamat FROM daftar_dosen;
+----------------+-----------+
| nama_dosen     | alamat    |
+----------------+-----------+
| Sabrina Sari   | Pekanbaru |
| Maya Ari Putri | Palembang |
| Susi Indriani  | Bogor     |
| Tia Santrini   | Padang    |
| M. Siddiq      | Jakarta   |
| Rubin Hadi     | Papua     |
| Mustalifah     | Aceh      |
| Arif Budiman   | Makasar   |
+----------------+-----------+
8 rows in set (0.05 sec)

Cara Menfilter/Menyeleksi data dari Tabel MySQL (SELECT…WHERE…)

Jika kita ingin menampilkan hanya data yang memenuhi kriteria tertentu saja, maka dapat dilakukan dengan menambah perintah WHERE pada query SELECT.

Kondisi WHERE pada perintah SELECT dipakai untuk menyeleksi data yang diinginkan saja, sedangkan data yang tidak memenuhi kriteria tidak akan ditampilkan.

Format dasar query SELECT…WHERE adalah:

SELECT nama_kolom1, nama_kolom2,... FROM nama_tabel WHERE kondisi

Contohnya untuk menampilkan data dosen yang beralamat di Padang, bisa menggunakan query berikut:

1
2
3
4
5
6
7
mysql> SELECT NIP,nama_dosen FROM daftar_dosen WHERE alamat='Padang';
+------------+--------------+
| NIP        | nama_dosen   |
+------------+--------------+
| 0480432066 | Tia Santrini |
+------------+--------------+
1 row in set (0.00 sec)

Kondisi WHERE sangat fleksibel dan kita bisa menggunakan berbagai operasi kondisi seperti lebih besar (>), lebih kecil (<), tidak sama (<>), dan lain-lain.

List lengkap dari penggunaan kondisi yang dapat digunakan pada SELECT…WHERE adalah:

Operasi Aritmatika

OperatorPenjelasan
+Penambahan
Pengurangan
*Pengalian
/Pembagian
%Sisa hasil bagi (modulus)

Operasi Logika

OperatorPenjelasan
NOT atau !Logika bukan
AND atau &&Logika dan
OR atau ||Logika atau
XORLogika bukan atau (XOR)

Operasi Perbandingan

OperatorPenjelasan
=Sama dengan
<> atau !=Tidak sama dengan
<=>sama dengan (null safe)
<kurang dari
<=kurang dari atau sama dengan
>lebih besar dari
>=lebih besar atau sama dengan
BETWEENBerada pada batas tertentu
INBerada di dalam
IS NULLPengecekan apakah berisi NULL
IS NOT NULLPengecekan apakah bukan berisi NULL
LIKEPencarian menggunakan wildcard
REGEXP atau RLIKEPencarian menggunakan Regular Expression

Contohnya jika ingin menampilkan seluruh mata kuliah yang diajarkan di semester 4 ke atas, maka querynya adalah:

1
2
3
4
5
6
7
8
9
10
mysql> SELECT * FROM mata_kuliah WHERE semester >= 4;
+-------------+------------------+------------+----------+------------+
| kode_matkul | nama_matkul      | jumlah_SKS | semester | NIP_dosen  |
+-------------+------------------+------------+----------+------------+
| DTBASE      | Database         |          4 |        4 | 0275430005 |
| MIKROP      | Mikro Prosesor   |          2 |        5 | 0480432066 |
| SISOPR      | Sistem Operasi   |          2 |        4 | 0160436012 |
| TEKKOM      | Teknik Kompilasi |          2 |        6 | 0480432066 |
+-------------+------------------+------------+----------+------------+
4 rows in set (0.00 sec)

Penggabungan beberapa kondisi juga dapat dilakukan, misalnya ingin menampilkan seluruh mata kuliah dengan jumlah SKS=2 dan diajarkan pada semester dibawah 5, maka querynya:

1
2
3
4
5
6
7
8
mysql> SELECT * FROM mata_kuliah WHERE jumlah_SKS=2 AND semester < 5;
+-------------+----------------+------------+----------+------------+
| kode_matkul | nama_matkul    | jumlah_SKS | semester | NIP_dosen  |
+-------------+----------------+------------+----------+------------+
| FISDAS      | Fisika Dasar   |          2 |        1 | 0480432066 |
| SISOPR      | Sistem Operasi |          2 |        4 | 0160436012 |
+-------------+----------------+------------+----------+------------+
2 rows in set (0.07 sec)

Cara Mengurutkan hasil tampilan data MySQL (SELECT…ORDER BY)

MySQL menyediakan perintah opsional ORDER BY untuk mengurutkan data yang di hasilkan. Query dasar untuk SELECT…ORDER BY adalah:

SELECT nama_kolom1,... FROM nama_tabel WHERE kondisi ORDER BY nama_kolom_urut

nama_kolom_urut adalah kolom yang akan kita urutkan. Pengurutan bisa dari paling kecil ke besar, ataupun besar ke kecil.

Pilihan ini dapat diatur dengan penambahan instruksi ASC (singkatan dari ascending) untuk pengurutan dari kecil ke besar, dan DESC (singkatan dari descending) untuk urutan dari besar ke kecil. Jika tidak di dijelaskan, secara default bawaan MySQL perintah ORDER BY akan memakai ASC.

Contohnya jika kita ingin menampilkan mata kuliah dengan jumlah SKS lebih dari 2 secara berurutan dari yang paling kecil, querynya adalah:

1
2
3
4
5
6
7
8
9
mysql> SELECT * FROM mata_kuliah WHERE jumlah_SKS > 2 ORDER BY jumlah_SKS;
+-------------+-------------------+------------+----------+------------+
| kode_matkul | nama_matkul       | jumlah_SKS | semester | NIP_dosen  |
+-------------+-------------------+------------+----------+------------+
| JARKOM      | Jaringan Komputer |          3 |        3 | 0770435006 |
| DTBASE      | Database          |          4 |        4 | 0275430005 |
| MATDAS      | Matematika Dasar  |          4 |        1 | 0160436012 |
+-------------+-------------------+------------+----------+------------+
3 rows in set (0.06 sec)

Jika kita ingin menampilkan seluruh dosen pada tabel daftar_dosen dan diurutan kolom alamat secara abjad, maka querynya adalah sebagai berikut:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> SELECT * FROM daftar_dosen ORDER BY alamat ASC;
+------------+----------------+------------+-----------+
| NIP        | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 0869437003 | Mustalifah     | 0812338877 | Aceh      |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
| 0576431001 | M. Siddiq      | 0812979005 | Jakarta   |
| 1080432007 | Arif Budiman   | 0812456345 | Makasar   |
| 0480432066 | Tia Santrini   | 0812451177 | Padang    |
| 0260432002 | Maya Ari Putri | 0812345234 | Palembang |
| 0770435006 | Rubin Hadi     | 0812567678 | Papua     |
| 0160436012 | Sabrina Sari   | 0812349900 | Pekanbaru |
+------------+----------------+------------+-----------+
8 rows in set (0.00 sec)

Cara Membatasi Hasil query SELECT (SELECT…LIMIT)

MySQL menyediakan pilihan opsional LIMIT untuk membatasi hasil query SELECT. Format dasar query SELECT…LIMIT adalah sebagai berikut:

SELECT nama_kolom1 FROM nama_tabel WHERE kondisi LIMIT baris_awal, jumlah_baris

Dimana baris_awal adalah awal nomor baris yang ingin ditampilkan, dan jumlah_baris adalah jumlah baris yang diurutkan dari baris_awal. Nomor baris pada MySQL diawali dengan nomor 0.

Misalkan kita ingin menampilkan data 3 nama dosen paling atas yang dirutkan berdasarkan nama, maka querynya adalah:

1
2
3
4
5
6
7
8
9
mysql> SELECT * FROM daftar_dosen ORDER BY nama_dosen ASC LIMIT 0,3;
+------------+----------------+------------+-----------+
| NIP        | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 1080432007 | Arif Budiman   | 0812456345 | Makasar   |
| 0576431001 | M. Siddiq      | 0812979005 | Jakarta   |
| 0260432002 | Maya Ari Putri | 0812345234 | Palembang |
+------------+----------------+------------+-----------+
3 rows in set (0.00 sec)

Jika kita hanya menulis 1 angka saja di belakang instruksi LIMIT, maka MySQL menganggap bahwa angka dihitung dari baris teratas (baris ke 0). Contohnya jika kita ingin menampilkan 5 baris teratas mata kuliah yang diurutkan berdasarkan nama, maka querynya:

1
2
3
4
5
6
7
8
9
10
11
mysql> SELECT * FROM mata_kuliah ORDER BY nama_matkul LIMIT 5;
+-------------+-------------------+------------+----------+------------+
| kode_matkul | nama_matkul       | jumlah_SKS | semester | NIP_dosen  |
+-------------+-------------------+------------+----------+------------+
| DTBASE      | Database          |          4 |        4 | 0275430005 |
| FISDAS      | Fisika Dasar      |          2 |        1 | 0480432066 |
| JARKOM      | Jaringan Komputer |          3 |        3 | 0770435006 |
| MATDAS      | Matematika Dasar  |          4 |        1 | 0160436012 |
| MIKROP      | Mikro Prosesor    |          2 |        5 | 0480432066 |
+-------------+-------------------+------------+----------+------------+
5 rows in set (0.00 sec)

Dalam Tutorial MySQL cara menampilkan data dari tabel ini kita telah membahas query dasar SELECT.

Query SELECT masih memiliki banyak perintah-perintah lain yang digunakan untuk mendapatkan hasil yang lebih spesifik. Kita akan membahasnya dalam tutorial-tutorial MySQL lain.

Berikutnya akan lanjut membahas Cara Pencarian Data dari Tabel MySQL dengan Query LIKE.


13. Pencarian Data

Tutorial Belajar MySQL Part 22: Pencarian Data dari Tabel MySQL (SELECT..LIKE)

Pencarian data dari database merupakan kegiatan rutin dalam administrasi database. Pada tutorial belajar MySQL kali ini kita akan membahas cara pencarian data dari tabel MySQL menggunakan query SELECT..LIKE. Query ini bisa dipakai untuk pencarian sederhana.

Untuk pencarian yang lebih rumit dapat menggunakan Regular Expression yang akan kita bahas pada tutorial selanjutnya: Pencarian Data dari Tabel MySQL dengan Regular Expression (REGEXP).

Mempersiapkan Tabel Sample: daftar_dosen

Sebagai tabel sample untuk tutorial ini saya akan menggunakan tabel dari tutorial sebelumnya, yaitu Tutorial Belajar MySQL: Menampilkan Data dari Tabel MySQL (SELECT). Jika anda ingin mencoba langsung query yang akan dibahas, silahkan mengikuti petunjuk pembuatan tabel sample yang ada di tutorial tersebut.

Tabel kita akan terdiri dari tabel mata_kuliah dan tabel daftar_dosen. Dalam tutorial kali ini kita hanya akan memakai tabel daftar_dosen saja. Berikut isi dari tabel tersebut:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> SELECT * FROM daftar_dosen;
+------------+----------------+------------+-----------+
| NIP        | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 0160436012 | Sabrina Sari   | 0812349900 | Pekanbaru |
| 0260432002 | Maya Ari Putri | 0812345234 | Palembang |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
| 0480432066 | Tia Santrini   | 0812451177 | Padang    |
| 0576431001 | M. Siddiq      | 0812979005 | Jakarta   |
| 0770435006 | Rubin Hadi     | 0812567678 | Papua     |
| 0869437003 | Mustalifah     | 0812338877 | Aceh      |
| 1080432007 | Arif Budiman   | 0812456345 | Makasar   |
+------------+----------------+------------+-----------+
8 rows in set (0.266 sec)

Pencarian Data Tabel MySQL Menggunakan query SELECT..LIKE

MySQL menyediakan query SELECT..LIKE untuk menampilkan tabel berdasarkan pencarian karakter sederhana. Format dasar struktur SELECT..LIKE adalah sebagai berikut:

SELECT nama_kolom_tampil FROM nama_tabel
WHERE nama_kolom_cari LIKE keyword_pencarian
  • nama_kolom_tampil adalah nama dari kolom yang akan kita tampilkan, bisa semua kolom dalam tabel, atau hanya kolom tertentu saja.
  • nama_tabel adalah nama tabel dimana nama_kolom_tampil berada.
  • nama_kolom_cari adalah kolom yang akan kita gunakan untuk pencarian.
  • keyword_pencarian merupakan kata kunci yang digunakan untuk pencarian. Cara penulisan kata kunci ini akan kita bahas lebih lanjut.

Sebagai contoh awal, misalkan kita ingin menampilkan seluruh kolom dari tabel daftar_dosen dimana nama dosen adalah Rubin Hadi. Maka querynya adalah:

1
2
3
4
5
6
7
mysql> SELECT * FROM daftar_dosen WHERE nama_dosen LIKE 'Rubin Hadi';
+------------+------------+------------+--------+
| NIP        | nama_dosen | no_hp      | alamat |
+------------+------------+------------+--------+
| 0770435006 | Rubin Hadi | 0812567678 | Papua  |
+------------+------------+------------+--------+
1 row in set (0.04 sec)

Dalam query ini, saya menggunakan LIKE dengan kata kunci yang sama persis dengan isi dari kolom nama_dosen.

Query LIKE ini tidak terlalu membantu karena kita bisa saja mengganti query tersebut dengan operator = seperti contoh berikut:

1
2
3
4
5
6
7
mysql> SELECT * FROM daftar_dosen WHERE nama_dosen='Rubin Hadi';
+------------+------------+------------+--------+
| NIP        | nama_dosen | no_hp      | alamat |
+------------+------------+------------+--------+
| 0770435006 | Rubin Hadi | 0812567678 | Papua  |
+------------+------------+------------+--------+
1 row in set (0.00 sec)

Namun katakan kita ingin menampilkan seluruh kolom dari tabel daftar_dosen dimana nama_dosen diawali dengan huruf ‘S’. Untuk pencarian seperti inilah query LIKE lebih bermanfaat.

MySQL menyediakan 2 karakter khusus untuk pencarian LIKE, yaitu karakter _ dan %. Berikut penjelasannya:

  • _ : karakter ganti yang cocok untuk satu karakter apa saja.
  • % : karakter ganti yang cocok untuk karakter apa saja dengan panjang karakter tidak terbatas, termasuk tidak ada karakter.

Agar mudah memahami, langsung saja kita gunakan untuk pencarian nama_dosen yang diawali dengan huruf ‘S’:

1
2
3
4
5
6
7
8
mysql> SELECT * FROM daftar_dosen WHERE nama_dosen LIKE 'S%';
+------------+---------------+------------+-----------+
| NIP        | nama_dosen    | no_hp      | alamat    |
+------------+---------------+------------+-----------+
| 0160436012 | Sabrina Sari  | 0812349900 | Pekanbaru |
| 0275430005 | Susi Indriani | 0812656532 | Bogor     |
+------------+---------------+------------+-----------+
2 rows in set (0.00 sec)

Saya menggunakan ‘S%’ karena kita ingin mencari nama_dosen yang diawal dengan S, dan diikuti oleh karakter apa saja dengan panjang tidak dibatasi.

Kita dapat mengganti kata kunci hasil pencarian tersebut dengan karakter lain, sebagai contoh:

  • S%’ : Cocok dengan kata yang diawali dengan S, dan diikuti dengan karakter apa saja, contoh: ‘S’, ‘Sa’, ‘Si’, ‘Saaaaaa’, ‘Susi’, dan ‘Sabrina Sari’.
  • S_’: Cocok dengan kata yang diawali dengan S, dan diikuti dengan satu karakter apa saja, contoh: ‘Si’, ‘Sa’, ‘Su’, ‘Se’, dan ‘St’.
  • A__i’: Cocok dengan kata yang diawali dengan ‘A’, diikuti oleh 2 karakter bebas, namun diakhiri dengan i, contoh: ‘Andi’, ‘ardi’, ‘aaai’.
  • %e’: Cocok dengan seluruh kata dengan panjang berapapun yang diakhiri dengan huruf ‘e’, contoh: ‘Kece’, ‘Kue’, dan ‘mie’.
  • %dia%’: Cocok dengan seluruh kata yang mengandung kata ‘dia’, contoh: ‘media’, ‘kemudian’, ‘dia’, dan  ‘diaaaa’.

Operasi LIKE juga bisa digabung dengan operator logika OR atau AND untuk pencarian yang lebih kompleks.

Misalkan saya ingin mencari kolom nama_dosen yang diakhiri huruf ‘i’ atau kolom alamat yang diawali dengan huruf ‘m’. Querynya adalah sebagai berikut:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> SELECT * FROM daftar_dosen WHERE nama_dosen LIKE '%i'
OR alamat LIKE 'm%';
+------------+----------------+------------+-----------+
| NIP        | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 0160436012 | Sabrina Sari   | 0812349900 | Pekanbaru |
| 0260432002 | Maya Ari Putri | 0812345234 | Palembang |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
| 0480432066 | Tia Santrini   | 0812451177 | Padang    |
| 0770435006 | Rubin Hadi     | 0812567678 | Papua     |
| 1080432007 | Arif Budiman   | 0812456345 | Makasar   |
+------------+----------------+------------+-----------+
6 rows in set (0.00 sec)

Perhatikan bahwa seluruh nama_dosen diakhiri dengan huruf ‘i’, kecuali Arif Budiman, dimana hasil ini didapat dari kata kunci kedua, yakni atau alamat diawali dengan huruf ‘m’ : Makasar.


Pencarian Untuk Huruf Besar dan Huruf Kecil?

Pencarian LIKE dan juga operasi pencocokan karakter lainnya (seperti Regular Expression) di dalam MySQL bersifat case sensitif atau case insensitif tergantung dari tipe kolom yang digunakan.

Jika menggunakan tipe kolom seperti CHARVARCHAR, atau TEXT, maka LIKE akan bersifat case insensitif, dalam arti huruf besar dan kecil dianggap sama dan tidak dibedakan.

Namun untuk tipe data binary seperti BINARYVARBINARY, atau BLOB, maka pencarian LIKE akan bersifat case sensitif, dimana ‘Andi’ akan dianggap tidak sama dengan ‘andi’.

Umumnya untuk pencarian kita tidak mempermasalahkan huruf besar dan kecil, namun jika perlu case sensitif, kita harus merubah tipe kolom tabelnya. Untuk merubah tipe kolom tabel sudah pernah kita bahas di Tutorial Belajar MySQL: Merubah Tabel (ALTER TABLE).


Dalam kebutuhan normal, query SELECT..LIKE ini sudah mencukupi, namun jika kita butuh pencarian yang lebih rumit, seperti mencari semua nama dosen yang diawali huruf a,b,c dan diakhiri dengan huruf vocal, maka perlu bantuan Regular Expression.

Inilah yang akan dibahas selanjutnya dalam Tutorial Belajar MySQL: Pencarian Data dari Tabel MySQL dengan Regular Expression (REGEXP)


14. Regular Expressio

Tutorial Belajar MySQL Part 23: Pencarian Data MySQL dengan Regular Expression (REGEXP)

Untuk pencarian sederhana, query SELECT..LIKE seperti yang telah kita bahas pada Tutorial Belajar MySQL: Pencarian Data dari Tabel MySQL (SELECT..LIKE) sebelumnya sudah mencukupi.

Namun untuk teknik pencarian yang lebih rumit, MySQL menyediakan query SELECT..REGEXP untuk pencarian menggunakan Regular Expression dari tabel MySQL.


Mempersiapkan Tabel Sample: daftar_dosen

Sebagai tabel sample untuk tutorial ini saya akan menggunakan tabel dari Tutorial Belajar MySQL: Menampilkan Data dari Tabel MySQL (SELECT). Jika anda ingin mencoba langsung query yang akan dibahas, silahkan mengikuti petunjuk pembuatan tabel sample yang ada di tutorial tersebut.

Tabel kita akan terdiri dari tabel mata_kuliah dan tabel daftar_dosen. Dalam tutorial kali ini kita hanya akan memakai tabel daftar_dosen saja. Berikut isi dari tabel tersebut:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> SELECT * FROM daftar_dosen;
+------------+----------------+------------+-----------+
| NIP        | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 0160436012 | Sabrina Sari   | 0812349900 | Pekanbaru |
| 0260432002 | Maya Ari Putri | 0812345234 | Palembang |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
| 0480432066 | Tia Santrini   | 0812451177 | Padang    |
| 0576431001 | M. Siddiq      | 0812979005 | Jakarta   |
| 0770435006 | Rubin Hadi     | 0812567678 | Papua     |
| 0869437003 | Mustalifah     | 0812338877 | Aceh      |
| 1080432007 | Arif Budiman   | 0812456345 | Makasar   |
+------------+----------------+------------+-----------+
8 rows in set (0.266 sec)

Pengertian Regular Expression

Bagi yang sudah pernah mengenal bahasa pemrograman lain, mungkin sudah mengenal Reguler Expression yang kadang disingkat dengan RexExp, atau hanya RE saja.

Dalam bahasa sederhana, Regular Expression adalah kumpulan huruf atau karakter yang digunakan untuk pencocokan pola (pattern matching). Pola disini contohnya ‘pola untuk kata yang diawali dengan huruf a dan diakhiri dengan huruf j’, atau yang sedikit rumit seperti ‘pola untuk kata yang diawali huruf a,b, c dengan panjang maksimal 5 huruf, mengandung minimal sebuah angka’.

Cakupan Regular Expression cukup luas dan tidak terbatas hanya pada MySQL saja. Hampir semua bahasa pemrograman komputer menyediakan fungsi khusus untuk regular expression. Dalam tutorial ini saya hanya membahas sebagian kecil dari RegExp.

Jika pada query SELECT..LIKE kita menggunakan pola ‘s%’ sebagai kata kunci yang berarti ‘kata yang diawali dengan huruf s dan memiliki banyak huruf 1 atau lebih’ dalam regular expression, penulisannya menjadi ‘^S.*’. Terlihat sedikit rumit, tapi mari kita pelajari aturan penulisan RegExp:

  • . : tanda titik dalam RegExp berarti sebuah karakter apa saja
  • [ … ]: tanda kurung siku ini berarti kumpulan karakter. Misalkan [abc] akan cocok dengan ‘a’, ‘b’, atau ‘c’. kita bisa juga menggunakan jangkauan (range), contohnya [a-z] akan cocok dengan seluruh huruf, [0-9] akan cocok dengan seluruh angka.
  • *: tanda bintang ini akan cocok dengan 0 atau lebih karakter sebelumnya. Misalkan ‘a*’ berarti akan cocok dengan seluruh kata yang mengandung 0 atau lebih a.
  • ^: tanda pangkat atau topi ini menandakan berada di awal kata.
  • $: tanda dollar ini berarti bahwa pola berada di akhir kata.

Berikut contoh penerapan dari pola RegExp ini:

  • ab*’: Pola ini berarti akan cocok dengan seluruh kata yang mengandung a dan diikuti oleh b atau tidak sama sekali. Contohnya: ‘a’, ‘ab’, ‘abbbbbb’, dan juga ‘kebab’, karena untuk RegExp, kita harus menyatakan dimana karakter itu muncul.
  • ^ab*’: Pola ini sama artinya dengan ‘ab*’ seperti diatas, namun tanda ^ menyatakan bahwa pola ini harus berada di awal kata, sehingga ‘kebab’ tidak akan cocok.
  • ^s..i$’: Pola ini akan cocok dengan seluruh kata yang diawali dengan s, dan diakhiri dengan i, terdiri dari 4 huruf. Contohnya: susi, sapi, dan siti.

Pencarian Data Tabel MySQL Menggunakan SELECT..REGEXP

Format dasar dari query pencarian menggunakan Regular Expression adalah:

SELECT nama_kolom_tampil FROM nama_tabel
WHERE nama_kolom_cari REGEXP keyword_reguler_expression
  • nama_kolom_tampil adalah nama dari kolom yang akan kita tampilkan, bisa semua kolom dalam tabel, atau hanya kolom tertentu saja.
  • nama_tabel adalah nama tabel dimana nama_kolom_tampil berada.
  • nama_kolom_cari adalah kolom yang akan kita gunakan untuk pencarian.
  • keyword_regular_expression adalah kata kunci dalam bentuk regular expression yang digunakan untuk pencarian.

Sebagai perbandingan dengan query SELECT..LIKE yang telah kita pelajari pada Tutorial Belajar MySQL: Pencarian Data dari Tabel MySQL (SELECT..LIKE), jika menggunakan Regular Expression pencarian nama_dosen yang diawali dengan huruf ‘s’ adalah sebagai berikut:

1
2
3
4
5
6
7
8
mysql> SELECT * FROM daftar_dosen WHERE nama_dosen REGEXP '^s.*';
+------------+---------------+------------+-----------+
| NIP        | nama_dosen    | no_hp      | alamat    |
+------------+---------------+------------+-----------+
| 0160436012 | Sabrina Sari  | 0812349900 | Pekanbaru |
| 0275430005 | Susi Indriani | 0812656532 | Bogor     |
+------------+---------------+------------+-----------+
2 rows in set (0.00 sec)

Penggunaan Regular Expression diperlukan jika kita butuh pencarian yang lebih rumit. Contohnya jika ingin mencari nama_dosen yang diawali dengan huruf ‘m’ atau ’s’, dan diakhiri dengan huruf vocal.

Pencarian seperti ini bisa saja dilakukan dengan SELECT..LIKE, namun butuh operator OR yang cukup banyak. Karena untuk huruf vocal berarti nama_dosen dapat berakhir dengan huruf a, i, u, e dan o.

Dalam Regular Expression, pola huruf vokal tersebut akan berbentuk ‘^[ms].*[aiueo]$‘ seperti contoh berikut:

1
2
3
4
5
6
7
8
9
10
mysql> SELECT * FROM daftar_dosen
WHERE nama_dosen REGEXP '^[ms].*[aiueo]$';
+------------+----------------+------------+-----------+
| NIP        | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 0160436012 | Sabrina Sari   | 0812349900 | Pekanbaru |
| 0260432002 | Maya Ari Putri | 0812345234 | Palembang |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
+------------+----------------+------------+-----------+
3 rows in set (0.00 sec)

Perhatikan bahwa dosen Mustalifah dan M. Siddiq walaupun berawalan M, namun tidak diakhiri dengan huruf vocal.

RegExp dalam MySQL akan bersifat case insensitif untuk tipe data CHARVARCHAR atau TEXT, dan bersifat case sensitif untuk tipe data tabel BINARYVARBINARY, atau BLOB.

Untuk pemakaian database sederhana, memakai query SELECT..LIKE untuk metode pencarian sudah mencukupi. Namun MySQL juga menyediakan Regular Expression untuk pencarian tingkat lanjut.

Dalam tutorial belajar MySQL selanjutnya kita akan membahas cara menggabungkan tabel MySQL dengan query JOIN.


15. Menggabungkan Tabel

Tutorial Belajar MySQL Part 24: Cara Menggabungkan Tabel MySQL (INNER JOIN)

Sampai dengan tutorial sebelum ini, kita hanya menampilkan hasil dari satu tabel saja. Relasional Database adalah tentang kumpulan tabel yang saling berhubungan.

Dalam Tutorial Belajar MySQL: Cara Menggabungkan Tabel MySQL dengan INNER JOIN ini akan dipelajari cara menyatukan hasil dari dua tabel atau lebih menggunakan query SELECT..INNER JOIN.


Mempersiapkan Tabel Sample: mata_kuliah dan daftar_dosen

Sebagai tabel sample untuk tutorial ini, saya masih menggunakan tabel sample dari Tutorial Belajar MySQL: Menampilkan Data dari Tabel MySQL (SELECT).

Jika anda ingin mencoba langsung query yang akan di bahas, silahkan ikuti petunjuk pembuatan tabel tersebut. Tabel kita akan terdiri dari tabel mata_kuliah dan tabel daftar_dosen.

Isi tabel daftar_dosen:

NIPNama DosenNo HPAlamat
0160436012Sabrina Sari0812349900Pekanbaru
0260432002Maya Ari Putri0812345234Palembang
0275430005Susi Indriani0812656532Bogor
0480432066Tia Santrini0812451177Padang
0576431001M. Siddiq0812979005Jakarta
0770435006Rubin Hadi0812567678Papua
0869437003Mustalifah0812338877Aceh
1080432007Arif Budiman0812456345Makasar

Isi tabel mata_kuliah:

Kode Mata KuliahNama MatakuliahJumlah SKSSemesterNip Dosen
MATDASMatematika Dasar410160436012
FISDASFisika Dasar210480432066
TEKKOMTeknik Kompilasi260480432066
JARKOMJaringan Komputer330770435006
DTBASEDatabase440275430005
SISOPRSistem Operasi240160436012
MIKROPMikro Prosesor250480432066

Tabel daftar_dosen berisi data dari dosen, dimana kolom NIP berisi NIP dosen. Pada tabel mata_kuliah, berisi daftar mata kuliah.

Yang perlu diperhatikan adalah kolom NIP dari kedua tabel. Kolom NIP inilah yang akan kita pakai untuk menggabungkan kedua tabel.


Cara Menggabungkan Tabel MySQL dengan INNER JOIN

Tujuan dari menggabungkan tabel adalah untuk menyajikan informasi secara lebih detail.

Contohnya dari tabel daftar_dosen dan tabel mata_kuliah diatas. Kita ingin menyajikan informasi mata kuliah sekaligus nama dosen yang mengajar mata kuliah tersebut. Data yang ingin disajikan adalah nama mata kuliah, jumlah SKS, dan nama dosen yang mengajar.

Query INNER JOIN memiliki beberapa variasi, yaitu SELECT..INNER JOIN..ON dan SELECT..INNER JOIN..USING. Kita akan membahasnya satu persatu.


Cara Menggabungkan Tabel MySQL dengan query SELECT..INNER JOIN..ON

Format dasar dari penulisan query SELECT..INNER JOIN..ON adalah:

SELECT nama_kolom_tampil FROM nama_tabel_pertama INNER JOIN nama_tabel_kedua
ON nama_kolom_join_tabel_pertama = nama_kolom_join_tabel_kedua
  • nama_kolom_tampil adalah nama dari kolom yang akan kita tampilkan, bisa semua kolom dalam tabel, atau hanya kolom tertentu saja.
  • nama_tabel_pertama adalah nama tabel pertama yang akan digabung.
  • nama_tabel_kedua adalah nama tabel kedua yang akan digabung.
  • nama_kolom_join_tabel_pertama adalah nama kolom yang akan digunakan sebagai join dari tabel pertama.
  • nama_kolom_join_tabel_kedua adalah nama kolom yang akan digunakan sebagai join dari tabel kedua.

Syarat untuk INNER JOIN adalah kedua tabel harus memiliki sebuah kolom dengan nilai yang sama. Kolom tersebut yang akan digunakan dalam proses JOIN.

Pada contoh kita, kolom itu adalah kolom NIP dari tabel nama_dosen, dan kolom NIP_dosen dari tabel mata_kuliah. Perhatikan walaupun keduanya berisi NIP, namun nama kolomnya berbeda.

Query untuk SELECT..INNER JOIN..ON tabel mata_kuliah dengan daftar_dosen adalah:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> SELECT nama_matkul,jumlah_SKS,nama_dosen FROM mata_kuliah
INNER JOIN daftar_dosen ON NIP_dosen=NIP;
+-------------------+------------+---------------+
| nama_matkul       | jumlah_SKS | nama_dosen    |
+-------------------+------------+---------------+
| Database          |          4 | Susi Indriani |
| Fisika Dasar      |          2 | Tia Santrini  |
| Jaringan Komputer |          3 | Rubin Hadi    |
| Matematika Dasar  |          4 | Sabrina Sari  |
| Mikro Prosesor    |          2 | Tia Santrini  |
| Sistem Operasi    |          2 | Sabrina Sari  |
| Teknik Kompilasi  |          2 | Tia Santrini  |
+-------------------+------------+---------------+
7 rows in set (0.00 sec)

Dari hasil query SELECT diatas, saya menggabung tabel mata_kuliah dan daftar_dosen untuk mendapatkan tampilan seluruh mata kuliah, jumlah sks, dan nama dosen yang mengajar.

Kita menggunakan tabel mata_kuliah sebagai tabel pertama, dan tabel daftar_dosen sebagai tabel kedua.


Cara Menggabungkan Tabel MySQL dengan SELECT..INNER JOIN..USING

Cara JOIN kedua adalah menggunakan USING sebagai pengganti ON untuk query INNER JOIN.

Format dasar dari penulisan query SELECT..INNER JOIN..USING adalah:

SELECT nama_kolom_tampil FROM nama_tabel_pertama INNER JOIN
nama_tabel_kedua USING (nama_kolom_join)
  • nama_kolom_tampil adalah nama dari kolom yang akan kita tampilkan, bisa semua kolom dalam tabel, atau hanya kolom tertentu saja.
  • nama_tabel_pertama adalah nama tabel pertama yang akan digabung.
  • nama_tabel_kedua adalah nama tabel kedua yang akan digabung.
  • nama_kolom_join adalah nama kolom yang akan digunakan sebagai join.

Syarat untuk INNER JOIN..USING adalah kedua tabel harus memiliki nama kolom yang sama. Dalam contoh kita, kolom tersebut adalah kolom NIP.

Namun karena nama kolom NIP untuk tabel mata_kuliah adalah NIP_dosen, sedangkan pada kolom daftar_dosen kolom NIP hanya NIP saja, maka harus disamakan terlebih dahulu. Untuk hal ini saya memutuskan kedua kolom akan bernama NIP_dosen.

mysql> ALTER TABLE daftar_dosen CHANGE NIP NIP_dosen CHAR(10);
Query OK, 8 rows affected (0.08 sec)
Records: 8  Duplicates: 0  Warnings: 0

Setelah kedua kolom NIP bernama sama, saatnya kita menggabungkan kedua tabel ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> SELECT nama_matkul, jumlah_SKS, nama_dosen
FROM mata_kuliah INNER JOIN daftar_dosen USING (NIP_dosen);
+-------------------+------------+---------------+
| nama_matkul       | jumlah_SKS | nama_dosen    |
+-------------------+------------+---------------+
| Database          |          4 | Susi Indriani |
| Fisika Dasar      |          2 | Tia Santrini  |
| Jaringan Komputer |          3 | Rubin Hadi    |
| Matematika Dasar  |          4 | Sabrina Sari  |
| Mikro Prosesor    |          2 | Tia Santrini  |
| Sistem Operasi    |          2 | Sabrina Sari  |
| Teknik Kompilasi  |          2 | Tia Santrini  |
+-------------------+------------+---------------+
7 rows in set (0.00 sec)

Hasilnya sama persis dengan SELECT..INNER JOIN..ON, hanya berbeda cara penulisan.

Di dalam MySQL, kata INNER JOIN  dapat diganti dengan CROSS JOIN, atau hanya JOIN saja. Ketiga kata kunci ini memiliki fungsi yang sama. MySQL menyediakannya agar dapat kompatible dengan bahasa SQL dari RDBMS lainnya seperti ORACLE dan MS SQL.

Misalnya untuk query kita diatas, dapat juga ditulis menjadi

mysql> SELECT nama_matkul, jumlah_SKS, nama_dosen
FROM mata_kuliah CROSS JOIN daftar_dosen USING (NIP_dosen);

Cara Penulisan Nama Kolom: Nama_Tabel.Nama_Kolom

Setelah kita merubah nama kolom NIP menjadi NIP_dosen pada tabel daftar_dosen, sekarang tiap tabel memiliki nama kolom yang sama, yakni NIP_dosen.

Jika kita jalankan kembali query SELECT..INNER JOIN..ON dengan nama kolom ini, MySQL akan mengeluarkan error:

1
2
3
mysql> SELECT nama_matkul,jumlah_SKS,nama_dosen FROM mata_kuliah
INNER JOIN daftar_dosen ON NIP_dosen=NIP_dosen;
ERROR 1052 (23000): Column 'NIP_dosen' in on clause is ambiguous

Dari pesan error yang terjadi, MySQL ‘bingung’ dalam memilih kolom. Query ON NIP_dosen=NIP_dosen menjadi ambigu karena kedua tabel kita memiliki nama kolom yang sama.

Untuk mengatasi ambiguitas ini, MySQL mengharuskan kita secara eksplisit menyebutkan nama tabelnya. Cara penulisan ini menggunakan tanda titik sebagai pemisah:

Nama_Tabel.Nama_Kolom

Misalkan untuk merujuk pada kolom NIP_dosen pada tabel mata_kuliah, maka penulisannya menjadi:

Mata_kuliah.NIP_dosen

Sehingga query SELECT..INNER JOIN..ON yang benar adalah:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> SELECT nama_matkul,jumlah_SKS,nama_dosen FROM mata_kuliah
INNER JOIN daftar_dosen ON mata_kuliah.NIP_dosen=daftar_dosen.NIP_dosen;
+-------------------+------------+---------------+
| nama_matkul       | jumlah_SKS | nama_dosen    |
+-------------------+------------+---------------+
| Database          |          4 | Susi Indriani |
| Fisika Dasar      |          2 | Tia Santrini  |
| Jaringan Komputer |          3 | Rubin Hadi    |
| Matematika Dasar  |          4 | Sabrina Sari  |
| Mikro Prosesor    |          2 | Tia Santrini  |
| Sistem Operasi    |          2 | Sabrina Sari  |
| Teknik Kompilasi  |          2 | Tia Santrini  |
+-------------------+------------+---------------+
7 rows in set (0.00 sec)

Query SELECT..INNER JOIN akan sering kita pakai untuk menampilkan data dari beberapa tabel.

Ketika mendesain database, sedapat mungkin eleminasi data yang redundan (data yang berulang) dari satu tabel besar menjadi beberapa tabel kecil, lalu digabung pada saat menampilkan data.

Dalam lanjutan tutorial belajar MySQL berikutnya, kita akan bahas tentang cara menghapus data dari tabel MySQL dengan query DELETE.


16. Menghapus Data

Tutorial Belajar MySQL Part 25: Cara Menghapus Baris Tabel MySQL (DELETE)

Sepanjang administrasi database, menghapus record/baris yang dianggap sudah tidak perlu merupakan hal yang sering dilakukan.

MySQL menyediakan beberapa cara untuk menghapus record dari tabel. Pada tutorial belajar MySQL kali ini kita akan bahas cara menghapus baris dari tabel MySQL menggunakan query DELETE.


Mempersiapkan Tabel Sample:  daftar_dosen

Sebagai tabel sample, saya akan memakai tabel daftar_dosen dengan isi tabel seperti pada tabel dibawah.

Jika anda ingin mencoba query pada tutorial ini, silahkan input data tabel ini dengan query INSERT, atau ikuti cara import tabel daftar_dosen seperti di Tutorial Belajar MySQL: Menampilkan Data dari Tabel MySQL (SELECT)

Isi tabel daftar_dosen:

NIPNama DosenNo HPAlamat
0160436012Sabrina Sari0812349900Pekanbaru
0260432002Maya Ari Putri0812345234Palembang
0275430005Susi Indriani0812656532Bogor
0480432066Tia Santrini0812451177Padang
0576431001M. Siddiq0812979005Jakarta
0770435006Rubin Hadi0812567678Papua
0869437003Mustalifah0812338877Aceh
1080432007Arif Budiman0812456345Makasar

Cara Menghapus Record dengan Query DELETE

Untuk penghapusan baris (atau disebut juga dengan record) dalam MySQL, kita memerlukan beberapa syarat, yaitu nama tabel dimana baris tersebut berada serta kondisi untuk penghapusan.

Format dasar penulisan query DELETE adalah sebagai berikut:

DELETE FROM nama_tabel WHERE kondisi
  • nama_tabel adalah nama dari tabel yang record/barisnya akan dihapus.
  • kondisi adalah kondisi baris yang akan dihapus, misalnya hapus kolom nama_dosen = "Sabrina Sari".

Langsung saja masuk ke contoh, misalkan kita ingin menghapus record/baris untuk nama dosen Sabrina Sari maka querynya adalah:

1
2
mysql> DELETE from daftar_dosen WHERE nama_dosen = 'Sabrina Sari';
Query OK, 1 row affected (1.73 sec)

Kunci dari query DELETE ada di pernyataan kondisi setelah WHERE, yaitu dimana kita memberitahukan MySQL syarat/kondisi yang harus dipenuhi untuk menghapus suatu record.

Kondisi WHERE ini juga mendukung logika OR atau AND untuk proses penghapusan yang lebih kompleks, seperti contoh berikut:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> DELETE from daftar_dosen WHERE nama_dosen = 'Maya Ari Putri'
OR nama_dosen='Tia Santrini';
Query OK, 2 rows affected (0.15 sec)
 
mysql> SELECT * FROM daftar_dosen;
+------------+---------------+------------+---------+
| NIP_dosen  | nama_dosen    | no_hp      | alamat  |
+------------+---------------+------------+---------+
| 0275430005 | Susi Indriani | 0812656532 | Bogor   |
| 0576431001 | M. Siddiq     | 0812979005 | Jakarta |
| 0770435006 | Rubin Hadi    | 0812567678 | Papua   |
| 0869437003 | Mustalifah    | 0812338877 | Aceh    |
| 1080432007 | Arif Budiman  | 0812456345 | Makasar |
+------------+---------------+------------+---------+
5 rows in set (0.06 sec)

Dengan tambahan logika OR seperti dalam query diatas, satu perintah DELETE bisa dipakai untuk menghapus 2 buah baris/record sekaligus.

Dalam manual MySQL, format penulisan lengkap dari query DELETE adalah sebagai berikut :

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]

Kita akan bahas penggunaan ORDER BY dan LIMIT sesaat lagi.


Cara Menghapus Record dengan Query DELETE..ORDER BY..LIMIT

MySQL menyediakan kondisi tambahan dengan perintah opsional ORDER BY dan LIMIT.

Perintah ORDER BY dan LIMIT ini sama dengan pembahasan kita pada Tutorial MySQL: Cara Menampilkan data dari tabel dengan query SELECTORDER BY dipakai untuk mengurutkan data, sedangkan LIMIT untuk membatasi hasil record.

Perintah opsional ORDER BY dan LIMIT disediakan untuk perintah penghapusan yang lebih spesifik, seperti: hapus 10 baris terakhir dari tabel dimulai dari tanggal transaksi paling awal. Hal ini biasa dilakukan tabel sudah melebihi batas maksimum record.

Sebagai contoh untuk tabel daftar_dosen, saya ingin “menghapus 3 baris terakhir nama dosen”.

Untuk keperluan ini, tabel daftar_dosen harus diurutkan berdasarkan kolom nama_dosen secara terbalik, lalu hapus 3 record paling awal.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
mysql> DELETE FROM daftar_dosen;
Query OK, 5 rows affected (0.04 sec)
 
mysql> LOAD DATA INFILE 'D:\\MySQL\\daftar_dosen.txt'
    -> INTO TABLE daftar_dosen
    -> FIELDS TERMINATED BY ','  LINES TERMINATED BY '\r\n';
Query OK, 8 rows affected (0.04 sec)
Records: 8  Deleted: 0  Skipped: 0  Warnings: 0
 
mysql> SELECT * FROM daftar_dosen ORDER BY nama_dosen;
+------------+----------------+------------+-----------+
| NIP_dosen  | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 1080432007 | Arif Budiman   | 0812456345 | Makasar   |
| 0576431001 | M. Siddiq      | 0812979005 | Jakarta   |
| 0260432002 | Maya Ari Putri | 0812345234 | Palembang |
| 0869437003 | Mustalifah     | 0812338877 | Aceh      |
| 0770435006 | Rubin Hadi     | 0812567678 | Papua     |
| 0160436012 | Sabrina Sari   | 0812349900 | Pekanbaru |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
| 0480432066 | Tia Santrini   | 0812451177 | Padang    |
+------------+----------------+------------+-----------+
8 rows in set (0.00 sec)
 
mysql> DELETE from daftar_dosen ORDER BY nama_dosen DESC LIMIT 3;
Query OK, 3 rows affected (0.04 sec)
 
mysql> SELECT * FROM daftar_dosen ORDER BY nama_dosen;
+------------+----------------+------------+-----------+
| NIP_dosen  | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 1080432007 | Arif Budiman   | 0812456345 | Makasar   |
| 0576431001 | M. Siddiq      | 0812979005 | Jakarta   |
| 0260432002 | Maya Ari Putri | 0812345234 | Palembang |
| 0869437003 | Mustalifah     | 0812338877 | Aceh      |
| 0770435006 | Rubin Hadi     | 0812567678 | Papua     |
+------------+----------------+------------+-----------+
5 rows in set (0.00 sec)

Karena tabel daftar_dosen hanya tinggal 5 record akibat praktek sebelumnya, maka saya menghapus seluruh record dengan query DELETE FROM daftar_dosen, lalu menginputnya kembali memakai query LOAD DATA INFILE.

Proses penghapusan dosen memakai perintah DELETE from daftar_dosen ORDER BY nama_dosen DESC LIMIT 3.

Dengan membandingkan hasil SELECT setelah dan sebelum query DELETE, kita bisa lihat bahwa 3 baris terakhir telah terhapus dari tabel.


Cara Menghapus Seluruh Isi dari Tabel

Untuk keperluan penghapusan seluruh isi dari tabel, cukup jalankan query DELETE tanpa menulis kondisi WHERE. Misalkan untuk menghapus keseluruhan tabel daftar_dosen, querynya adalah:

1
2
mysql> DELETE FROM daftar_dosen;
Query OK, 5 rows affected (0.04 sec)

Dari query diatas, MySQL juga menampilkan jumlah record/baris yang telah dihapus.

Namun jika informasi mengenai jumlah baris ini tidak kita butuhkan, MySQL menyediakan query TRUNCATE seperti contoh berikut:

1
2
3
4
5
mysql> TRUNCATE TABLE daftar_dosen;
Query OK, 0 rows affected (0.04 sec)
 
mysql> SELECT * FROM daftar_dosen;
Empty set (0.00 sec)

Secara internal, TRUNCATE dijalankan dengan cara menghapus tabel menggunakan query DROP, lalu membuat ulang tabel itu kembali.

Cara ini akan lebih cepat daripada perintah DELETE yang akan menghapus baris satu per satu. Namun perbedaan kecepatan eksekusi baru terasa jika tabel tersebut memiliki jumlah record yang sangat banyak.


Dalam tutorial MySQL kali ini kita telah membahas tentang cara penggunaan query DELETE untuk menghapus data tabel MySQL. Dalam tutorial selanjutnya, akan membahas tentang Cara Memperbaharui / Update data di dalam Tabel MySQL.


17. Mengubah Data

Tutorial Belajar MySQL Part 26: Cara Mengubah Data Tabel MySQL (query UPDATE)

Dalam tutorial belajar MySQL kali ini kita akan membahas tentang query UPDATE. Query ini digunakan untuk mengubah atau memperbarui data dalam sebuah tabel MySQL.


 Mempersiapkan Tabel Sample:  daftar_dosen

Untuk tabel contoh, saya masih memakai tabel daftar_dosen yang kita buat pada tutorial query SELECT MySQL. Namun jika anda mengikuti tutorial query DELETE sebelumnya, maka tabel daftar_dosen telah kosong sebagai efek dari query TRUNCATE.

Oleh karena itu silahkan buat ulang tabel daftar_dosen agar bisa mengikuti contoh dalam tutorial ini.

Isi tabel daftar_dosen:

NIPNama DosenNo HPAlamat
0160436012Sabrina Sari0812349900Pekanbaru
0260432002Maya Ari Putri0812345234Palembang
0275430005Susi Indriani0812656532Bogor
0480432066Tia Santrini0812451177Padang
0576431001M. Siddiq0812979005Jakarta
0770435006Rubin Hadi0812567678Papua
0869437003Mustalifah0812338877Aceh
1080432007Arif Budiman0812456345Makasar

Cara Mengubah Data Tabel Menggunakan Query UPDATE

Query UPDATE dipakai untuk melakukan perubahan data pada tabel MySQL, yakni proses update baris atau record. Format dasar query UPDATE adalah sebagai berikut:

UPDATE nama_tabel SET nama_kolom = data_baru WHERE kondisi
  • nama_tabel adalah nama dari tabel yang record/barisnya akan diperbaharui (update).
  • nama_kolom adalah nama kolom dari tabel yang akan diupdate.
  • data_baru adalah nilai data yang akan diinput sebagai nilai baru dari kolom
  • kondisi adalah kondisi atau syarat dari baris yang akan diubah, misalnya jika kolom nama dosenSabrina Sari maka lakukan update.

Sebagai contoh, jika ingin mengubah no HP milik dosen Sabrina Sari menjadi 085298710065 dari tabel daftar_dosen, maka querynya adalah sebagai berikut:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
mysql> SELECT * FROM daftar_dosen WHERE nama_dosen='Sabrina Sari';
+------------+--------------+------------+-----------+
| NIP_dosen  | nama_dosen   | no_hp      | alamat    |
+------------+--------------+------------+-----------+
| 0160436012 | Sabrina Sari | 0812349900 | Pekanbaru |
+------------+--------------+------------+-----------+
1 row in set (0.08 sec)
 
mysql> UPDATE daftar_dosen SET no_hp ='085298710065'
WHERE nama_dosen='Sabrina Sari';
Query OK, 1 row affected (0.07 sec)
Rows matched: 1  Changed: 1  Warnings: 0
 
mysql> SELECT * FROM daftar_dosen WHERE nama_dosen='Sabrina Sari';
+------------+--------------+--------------+-----------+
| NIP_dosen  | nama_dosen   | no_hp        | alamat    |
+------------+--------------+--------------+-----------+
| 0160436012 | Sabrina Sari | 085298710065 | Pekanbaru |
+------------+--------------+--------------+-----------+
1 row in set (0.00 sec)

Dari query diatas dapat dilihat bahwa kolom no_hp untuk nama dosen Sabrina Sari telah diupdate menjadi nomor baru.


Cara Mengupdate Lebih dari 1 Baris

Untuk query yang lebih rumit, kita bisa merubah beberapa kolom sekaligus. Syarat untuk kondisi juga dapat menggunakan operator logika seperti OR atau AND sekaligus:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
mysql> SELECT * FROM daftar_dosen;
+------------+----------------+------------+-----------+
| NIP_dosen  | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 0160436012 | Sabrina Sari   | 0812349900 | Pekanbaru |
| 0260432002 | Maya Ari Putri | 0812345234 | Palembang |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
| 0480432066 | Tia Santrini   | 0812451177 | Padang    |
| 0576431001 | M. Siddiq      | 0812979005 | Jakarta   |
| 0770435006 | Rubin Hadi     | 0812567678 | Papua     |
| 0869437003 | Mustalifah     | 0812338877 | Aceh      |
| 1080432007 | Arif Budiman   | 0812456345 | Makasar   |
+------------+----------------+------------+-----------+
8 rows in set (0.00 sec)
 
mysql> UPDATE daftar_dosen SET alamat ='Surabaya' WHERE
nama_dosen='Rubin Hadi' OR NIP_dosen='1080432007'
OR no_hp='0812345234';
Query OK, 3 rows affected (0.16 sec)
Rows matched: 3  Changed: 3  Warnings: 0
 
mysql> SELECT * FROM daftar_dosen;
+------------+----------------+------------+-----------+
| NIP_dosen  | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 0160436012 | Sabrina Sari   | 0812349900 | Pekanbaru |
| 0260432002 | Maya Ari Putri | 0812345234 | Surabaya  |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
| 0480432066 | Tia Santrini   | 0812451177 | Padang    |
| 0576431001 | M. Siddiq      | 0812979005 | Jakarta   |
| 0770435006 | Rubin Hadi     | 0812567678 | Surabaya  |
| 0869437003 | Mustalifah     | 0812338877 | Aceh      |
| 1080432007 | Arif Budiman   | 0812456345 | Surabaya  |
+------------+----------------+------------+-----------+
8 rows in set (0.00 sec)

Dari query diatas terlihat bahwa 3 baris/record telah berubah alamatnya menjadi Surabaya. Dalam satu statement UPDATE, kita membuat 3 buah logika OR.

Dalam manual MySQL, format penulisan lengkap dari query UPDATE adalah :

UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]

Penjelasan tentang penggunaan perintah ORDER BY dan LIMIT akan kita bahas sebentar lagi.


Cara Mengupdate Record dengan Query UPDATE..ORDER BY..LIMIT

Sama seperti query DELETE, query UPDATE juga memiliki perintah opsional ORDER BY..LIMIT untuk pemrosesan tingkat lanjut. Perintah ORDER BY..LIMIT bisa dipakai untuk membatasi perintah UPDATE dengan batas tertentu.

Misalkan ingin mengubah alamat dari 5 dosen pertama yang diurutkan berdasarkan nama, maka querynya:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
mysql> SELECT * FROM daftar_dosen ORDER BY nama_dosen;
+------------+----------------+------------+-----------+
| NIP_dosen  | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 1080432007 | Arif Budiman   | 0812456345 | Surabaya  |
| 0576431001 | M. Siddiq      | 0812979005 | Jakarta   |
| 0260432002 | Maya Ari Putri | 0812345234 | Surabaya  |
| 0869437003 | Mustalifah     | 0812338877 | Aceh      |
| 0770435006 | Rubin Hadi     | 0812567678 | Surabaya  |
| 0160436012 | Sabrina Sari   | 0812349900 | Pekanbaru |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
| 0480432066 | Tia Santrini   | 0812451177 | Padang    |
+------------+----------------+------------+-----------+
8 rows in set (0.00 sec)
 
mysql> UPDATE daftar_dosen SET alamat ='Bali' ORDER BY nama_dosen LIMIT 5;
Query OK, 5 rows affected (0.09 sec)
Rows matched: 5  Changed: 5  Warnings: 0
 
mysql> SELECT * FROM daftar_dosen ORDER BY nama_dosen;
+------------+----------------+------------+-----------+
| NIP_dosen  | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 1080432007 | Arif Budiman   | 0812456345 | Bali      |
| 0576431001 | M. Siddiq      | 0812979005 | Bali      |
| 0260432002 | Maya Ari Putri | 0812345234 | Bali      |
| 0869437003 | Mustalifah     | 0812338877 | Bali      |
| 0770435006 | Rubin Hadi     | 0812567678 | Bali      |
| 0160436012 | Sabrina Sari   | 0812349900 | Pekanbaru |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
| 0480432066 | Tia Santrini   | 0812451177 | Padang    |
+------------+----------------+------------+-----------+
8 rows in set (0.06 sec)

Dari hasil query tersebut kita bisa melihat 5 dosen awal alamatnya telah berubah menjadi Bali.


Cara Mengupdate Seluruh Kolom dari Tabel MySQL

Jika kita tidak hati-hati dan lupa memberikan kondisi pada perintah WHERE, maka query UPDATE kita akan merubah seluruh kolom dari tabel tersebut. Berikut contoh kasusnya:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
mysql> SELECT * FROM daftar_dosen;
+------------+----------------+------------+-----------+
| NIP_dosen  | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 0160436012 | Sabrina Sari   | 0812349900 | Pekanbaru |
| 0260432002 | Maya Ari Putri | 0812345234 | Bali      |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
| 0480432066 | Tia Santrini   | 0812451177 | Padang    |
| 0576431001 | M. Siddiq      | 0812979005 | Bali      |
| 0770435006 | Rubin Hadi     | 0812567678 | Bali      |
| 0869437003 | Mustalifah     | 0812338877 | Bali      |
| 1080432007 | Arif Budiman   | 0812456345 | Bali      |
+------------+----------------+------------+-----------+
8 rows in set (0.00 sec)
 
mysql> UPDATE daftar_dosen SET no_hp='085278790005';
Query OK, 8 rows affected (0.06 sec)
Rows matched: 8  Changed: 8  Warnings: 0
 
mysql> SELECT * FROM daftar_dosen;
+------------+----------------+--------------+-----------+
| NIP_dosen  | nama_dosen     | no_hp        | alamat    |
+------------+----------------+--------------+-----------+
| 0160436012 | Sabrina Sari   | 085278790005 | Pekanbaru |
| 0260432002 | Maya Ari Putri | 085278790005 | Bali      |
| 0275430005 | Susi Indriani  | 085278790005 | Bogor     |
| 0480432066 | Tia Santrini   | 085278790005 | Padang    |
| 0576431001 | M. Siddiq      | 085278790005 | Bali      |
| 0770435006 | Rubin Hadi     | 085278790005 | Bali      |
| 0869437003 | Mustalifah     | 085278790005 | Bali      |
| 1080432007 | Arif Budiman   | 085278790005 | Bali      |
+------------+----------------+--------------+-----------+
8 rows in set (0.00 sec)

Dapat dilihat dengan mengeliminasi kondisi WHERE, seluruh kolom tabel akan ter-update. Terkadang hasil seperti ini memang kita harapkan. Namun seperti contoh di atas, kesalahan dalam membuat logika WHERE bisa berdampak fatal terhadap keseluruhan tabel.


18. Mengganti Tampilan Nama Kolom & Tabel

Tutorial Belajar MySQL Part 27: Cara Mengganti Tampilan Nama Kolom & Tabel (Alias)

Dalam lanjutan Tutorial Belajar MySQL ini kita akan membahas Cara Mengganti Tampilan Nama Kolom & Tabel (Alias). Query yang akan kita pelajari adalah query AS.


Pengertian ALIAS (AS) dalam MySQL

MySQL menyediakan perintah tambahan AS untuk mengganti sementara nama tabel atau kolom. Disebut sementara karena pada dasarnya nama tabel tersebut tidak berubah, hanya di ganti pada saat ditampilkan dengan query SELECT.

Di dalam bahasa SQL, query AS  ini lebih dikenal sebagai alias dari nama tabel yang sebenarnya. Alias ditujukan untuk mempermudah penulisan query atau mempercantik tampilan hasil query.

Sebagai tabel contoh, saya akan memakai tabel daftar_dosen dan mata_kuliah seperti tutorial sebelumnya. Berikut isi dari kedua tabel:

Isi tabel daftar_dosen:

NIPNama DosenNo HPAlamat
0160436012Sabrina Sari0812349900Pekanbaru
0260432002Maya Ari Putri0812345234Palembang
0275430005Susi Indriani0812656532Bogor
0480432066Tia Santrini0812451177Padang
0576431001M. Siddiq0812979005Jakarta
0770435006Rubin Hadi0812567678Papua
0869437003Mustalifah0812338877Aceh
1080432007Arif Budiman0812456345Makasar

Isi tabel mata_kuliah:

Kode Mata KuliahNama MatakuliahJumlah SKSSemesterNip Dosen
MATDASMatematika Dasar410160436012
FISDASFisika Dasar210480432066
TEKKOMTeknik Kompilasi260480432066
JARKOMJaringan Komputer330770435006
DTBASEDatabase440275430005
SISOPRSistem Operasi240160436012
MIKROPMikro Prosesor250480432066

Cara Menggunakan ALIAS untuk Mengganti Nama Tabel

Perintah alias dengan query AS bukan query SQL yang dapat berdiri sendiri seperti SELECT, UPDATE, maupun DELETE. Perintah AS dipakai  sebagai penambah untuk query SQL lain.

Berikut adalah format dasar penulisan alias tabel:

…nama_tabel_asli AS nama_tabel_alias…
  • nama_tabel_asli adalah nama tabel sesungguhnya yang dipakai pada saat pembuatan tabel. Contohnya adalah tabel daftar_dosen dan mata_kuliah.
  • nama_tabel_alias adalah alias atau nama lain tabel yang ingin dipakai, misalnya tabel daftar_dosen di-aliaskan menjadi dosen saja.

Contoh sederhana penggunaan tabel alias adalah sebagai berikut:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> SELECT ds.nama_dosen, ds.no_hp, ds.alamat FROM
daftar_dosen AS ds;
 
+----------------+------------+-----------+
| nama_dosen     | no_hp      | alamat    |
+----------------+------------+-----------+
| Sabrina Sari   | 0812349900 | Pekanbaru |
| Maya Ari Putri | 0812345234 | Palembang |
| Susi Indriani  | 0812656532 | Bogor     |
| Tia Santrini   | 0812451177 | Padang    |
| M. Siddiq      | 0812979005 | Jakarta   |
| Rubin Hadi     | 0812567678 | Papua     |
| Mustalifah     | 0812338877 | Aceh      |
| Arif Budiman   | 0812456345 | Makasar   |
+----------------+------------+-----------+
8 rows in set (0.00 sec)

Dalam query SELECT di atas saya menampilkan kolom nama_dosenno_hp dan alamat dari tabel daftar_dosen.

Perhatikan di akhir query terdapat tambahan perintah daftar_dosen AS ds, dalam perintah inilah nama tabel daftar_dosen kita aliaskan menjadi ds. Lalu dengan format penulisan nama_tabel.nama_kolom, querynya menjadi SELECT ds.nama_dosen, ds.no_hp, ds.alamat

Query diatas tidak terlalu berguna karena kita bisa menggunakannya tanpa alias seperti berikut ini:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> SELECT nama_dosen, no_hp, alamat FROM daftar_dosen;
 
+----------------+------------+-----------+
| nama_dosen     | no_hp      | alamat    |
+----------------+------------+-----------+
| Sabrina Sari   | 0812349900 | Pekanbaru |
| Maya Ari Putri | 0812345234 | Palembang |
| Susi Indriani  | 0812656532 | Bogor     |
| Tia Santrini   | 0812451177 | Padang    |
| M. Siddiq      | 0812979005 | Jakarta   |
| Rubin Hadi     | 0812567678 | Papua     |
| Mustalifah     | 0812338877 | Aceh      |
| Arif Budiman   | 0812456345 | Makasar   |
+----------------+------------+-----------+
8 rows in set (0.00 sec)

Tapi setidaknya itulah cara penulisan alias sederhana.

Perintah AS akan lebih berguna untuk query yang sedikit rumit seperti INNER JOIN yang sudah kita bahas pada Tutorial Belajar MySQL Menggabungkan Tabel MySQL dengan INNER JOIN.

Berikut adalah query sebelum menggunakan alias:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> SELECT nama_matkul,jumlah_SKS,nama_dosen FROM mata_kuliah
INNER JOIN daftar_dosen
ON mata_kuliah.NIP_dosen=daftar_dosen.NIP_dosen;
 
+-------------------+------------+---------------+
| nama_matkul       | jumlah_SKS | nama_dosen    |
+-------------------+------------+---------------+
| Database          |          4 | Susi Indriani |
| Fisika Dasar      |          2 | Tia Santrini  |
| Jaringan Komputer |          3 | Rubin Hadi    |
| Matematika Dasar  |          4 | Sabrina Sari  |
| Mikro Prosesor    |          2 | Tia Santrini  |
| Sistem Operasi    |          2 | Sabrina Sari  |
| Teknik Kompilasi  |          2 | Tia Santrini  |
+-------------------+------------+---------------+
7 rows in set (0.05 sec)

Dan berikut setelah menggunakan alias:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> SELECT nama_matkul,jumlah_SKS,nama_dosen FROM mata_kuliah
AS ma INNER JOIN daftar_dosen AS da ON ma.NIP_dosen=da.NIP_dosen;
 
+-------------------+------------+---------------+
| nama_matkul       | jumlah_SKS | nama_dosen    |
+-------------------+------------+---------------+
| Database          |          4 | Susi Indriani |
| Fisika Dasar      |          2 | Tia Santrini  |
| Jaringan Komputer |          3 | Rubin Hadi    |
| Matematika Dasar  |          4 | Sabrina Sari  |
| Mikro Prosesor    |          2 | Tia Santrini  |
| Sistem Operasi    |          2 | Sabrina Sari  |
| Teknik Kompilasi  |          2 | Tia Santrini  |
+-------------------+------------+---------------+
7 rows in set (0.00 sec)

Query diatas akan berhasil dijalankan jika kedua kolom NIP dari tabel daftar_dosen dan mata_kuliah bernama NIP_dosen.

Perhatikan setelah perintah FROM, saya membuat alias untuk kedua tabel dengan perintah mata_kuliah AS ma INNER JOIN daftar_dosen AS da. Sehingga kita dapat menggunakannya pada perintah ON ma.NIP_dosen=da.NIP_dosen.


Cara Menggunakan ALIAS untuk Mengganti Nama Kolom Tabel MySQL

Selain dipakai untuk mengubah nama tabel, MySQL juga menyediakan ALIAS untuk nama kolom. Salah satu kegunaan alias kolom ini adalah agar tampilan nama kolom menjadi lebih rapi.

Sama seperti ALIAS untuk nama tabel, alias untuk nama kolom juga merupakan perintah tambahan dari query inti seperti SELECT.

Format dasar penulisan alias kolom:

…nama_kolom_asli AS nama_kolom_alias…
  • nama_kolom_asli adalah nama kolom sesungguhnya yang dipakai pada saat pembuatan tabel. Contohnya nama_dosen dan no_hp.
  • nama_kolom_alias adalah alias atau nama lain kolom yang kita gunakan, misalnya kolom no_hp kita aliaskan menjadi nomor_handphone

Berikut contoh sederhana penggunaan kolom alias:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> SELECT nama_dosen AS nama, no_hp AS nomor_handphone
FROM daftar_dosen;
 
+----------------+-----------------+
| nama           | nomor_handphone |
+----------------+-----------------+
| Sabrina Sari   | 0812349900      |
| Maya Ari Putri | 0812345234      |
| Susi Indriani  | 0812656532      |
| Tia Santrini   | 0812451177      |
| M. Siddiq      | 0812979005      |
| Rubin Hadi     | 0812567678      |
| Mustalifah     | 0812338877      |
| Arif Budiman   | 0812456345      |
+----------------+-----------------+
8 rows in set (0.09 sec)

Perhatikan hasil dari query tersebut. Pada bagian judul kolom akan berubah seperti yang tertera pada bagian AS. Kolom nama_dosen menjadi nama, dan kolom no_hp menjadi nomor_handphone.

Perintah AS sebagai alias dari nama kolom akan lebih berguna pada saat kita menggunakan fungsi untuk kolom. MySQL menyediakan berbagai fungsi untuk memanipulasi data (akan dibahas pada tutorial terpisah).

Sebagai contoh, MySQL menyediakan fungsi CONCAT (singkatan dari concatenates) untuk menyambung kata:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> SELECT CONCAT(nama_matkul, " jumlah SKS:", jumlah_SKS)
FROM mata_kuliah;
 
+-------------------------------------------------+
| CONCAT(nama_matkul, " jumlah SKS:", jumlah_SKS) |
+-------------------------------------------------+
| Database jumlah SKS:4                           |
| Fisika Dasar jumlah SKS:2                       |
| Jaringan Komputer jumlah SKS:3                  |
| Matematika Dasar jumlah SKS:4                   |
| Mikro Prosesor jumlah SKS:2                     |
| Sistem Operasi jumlah SKS:2                     |
| Teknik Kompilasi jumlah SKS:2                   |
+-------------------------------------------------+
7 rows in set (0.24 sec)

Dalam contoh di atas, fungsi CONCAT saya pakai untuk menggabung kolom nama_matkul dengan jumlah_SKS. Perhatikan juga judul dari kolom tersebut.

Untuk membuat tampilan query menjadi lebih cantik, saya akan ubah judul kolom dengan menggunakan ALIAS:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> SELECT CONCAT(nama_matkul, " jumlah SKS:", jumlah_SKS)
AS Mata_Kuliah FROM mata_kuliah;
 
+--------------------------------+
| Mata_Kuliah                    |
+--------------------------------+
| Database jumlah SKS:4          |
| Fisika Dasar jumlah SKS:2      |
| Jaringan Komputer jumlah SKS:3 |
| Matematika Dasar jumlah SKS:4  |
| Mikro Prosesor jumlah SKS:2    |
| Sistem Operasi jumlah SKS:2    |
| Teknik Kompilasi jumlah SKS:2  |
+--------------------------------+
7 rows in set (0.00 sec)

Sebagai catatan, panjang dari alias dibatasi sebanyak 255 karakter. Jika ingin memakai tanda spasi, koma, atau karakter lainnya, gunakan tanda kutip backticks (“) diantara nama kolom. Karakter backticks ini ada disebelah kiri angka 1 pada keyboard standar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
mysql> SELECT nama_dosen AS Nama Dosen, no_hp AS Nomor Handphone
FROM daftar_dosen;
 
ERROR 1064 (42000): You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version
for the right syntax to use near 'Dosen,
no_hp AS Nomor Handphone FROM daftar_dosen' at line 1
 
mysql> SELECT nama_dosen AS `Nama Dosen`, no_hp AS `Nomor Handphone`
FROM daftar_dosen;
 
+----------------+-----------------+
| Nama Dosen     | Nomor Handphone |
+----------------+-----------------+
| Sabrina Sari   | 0812349900      |
| Maya Ari Putri | 0812345234      |
| Susi Indriani  | 0812656532      |
| Tia Santrini   | 0812451177      |
| M. Siddiq      | 0812979005      |
| Rubin Hadi     | 0812567678      |
| Mustalifah     | 0812338877      |
| Arif Budiman   | 0812456345      |
+----------------+-----------------+
8 rows in set (0.00 sec)

Pada query pertama saya mencoba membuat alias nama_dosen menjadi ‘Nama Dosen’, tetapi MySQL mengeluarkan error karena tidak dapat menerima karakter spasi sebagai nama alias, namun setelah memberi tanda kutip backtick, query tersebut sukses berjalan.


Dalam Tutorial MySQL kali ini kita telah mempelajari Cara Mengganti Tampilan Nama Kolom & Tabel MySQL menggunakan query AS. Dalam tutorial berikutnya, akan dibahas tentang cara Menghapus Duplikasi dari tabel MySQL dengan query DISTINCT.


19. Menghapus Duplikasi Data

Tutorial Belajar MySQL Part 28: Menghapus Duplikasi Data dengan Query DISTINCT

Pada Tutorial Belajar MySQL kali ini kita akan membahas tentang query DISTINCT. Query ini bisa digunakan untuk menghapus atau mengeliminasi duplikasi dari hasil tampilan SELECT.

Sama seperti query AS, ORDER BY, dan LIMIT, query DISTINCT ini digunakan sebagai tambahan dari query utamanya, yakni SELECT.


Mempersiapkan Tabel Sample: daftar_dosen

Dikarenakan keperluan contoh tabel, saya akan mengupdate tabel daftar_dosen dengan data yang baru. Isi tabel daftar_dosen sekarang adalah:

Tabel daftar_dosen ver.2

NIPNama DosenNo HPAlamat
0160436012Sabrina Sari0812349900Pekanbaru
0260432002Maya Ari Putri0812342342Palembang
0275430005Susi Indriani0812656532Bogor
0480432066Tia Santrini0812451177Padang
0576431001M. Siddiq0812979005Jakarta
0770435006Rubin Hadi0812567678Papua
0869437003Mustalifah0812338877Aceh
1080432007Arif Budiman0812456345Makasar
0785531001Siswanto0852878006Padang
0867221006Rudi Arwana0823987598Jakarta
0173551078Aria Sulistya0880743523Jakarta
0360432014Suci Syuhada0812341122Palembang

Jika anda ingin memakai data tabel yang sama, silahkan input ke dalam tabel_daftar dosen secara manual, atau bisa juga menggunakan query LOAD DATA INFILE di bawah ini. Untuk file txt dapat diperoleh dari sample data tabel dari link berikut: daftar_dosen ver.2.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
mysql> TRUNCATE daftar_dosen;
Query OK, 0 rows affected (0.05 sec)
 
mysql> LOAD DATA INFILE 'D:\\MySQL\\daftar_dosen.txt'
INTO TABLE daftar_dosen
FIELDS TERMINATED BY ','  LINES TERMINATED BY '\r\n';
Query OK, 12 rows affected (0.04 sec)
Records: 12  Deleted: 0  Skipped: 0  Warnings: 0
 
mysql> SELECT * FROM daftar_dosen;
+------------+----------------+------------+-----------+
| NIP_dosen  | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 0160436012 | Sabrina Sari   | 0812349900 | Pekanbaru |
| 0173551078 | Aria Sulistya  | 0880743523 | Jakarta   |
| 0260432002 | Maya Ari Putri | 0812342342 | Palembang |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
| 0360432014 | Suci Syuhada   | 0812341122 | Palembang |
| 0480432066 | Tia Santrini   | 0812451177 | Padang    |
| 0576431001 | M. Siddiq      | 0812979005 | Jakarta   |
| 0770435006 | Rubin Hadi     | 0812567678 | Papua     |
| 0785531001 | Siswanto       | 0852878006 | Padang    |
| 0867221006 | Rudi Arwana    | 0823987598 | Jakarta   |
| 0869437003 | Mustalifah     | 0812338877 | Aceh      |
| 1080432007 | Arif Budiman   | 0812456345 | Makasar   |
+------------+----------------+------------+-----------+
12 rows in set (0.00 sec)

Cara Menggunakan Query DISTINCT Untuk Menghapus Duplikasi

Penekanan untuk judul diatas, query DISTINCT digunakan hanya untuk memanipulasi tampilan hasil dari tabel. Duplikasi yang dihapus adalah untuk tampilan data, bukan data asli yang ada di MySQL.

Misalkan dari tabel daftar_dosen kita ingin menampilkan asal kota dari seluruh dosen yang ada. Maka querynya adalah sebagai berikut:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mysql> SELECT alamat FROM daftar_dosen ORDER BY alamat;
+-----------+
| alamat    |
+-----------+
| Aceh      |
| Bogor     |
| Jakarta   |
| Jakarta   |
| Jakarta   |
| Makasar   |
| Padang    |
| Padang    |
| Palembang |
| Palembang |
| Papua     |
| Pekanbaru |
+-----------+
12 rows in set (0.00 sec)

Saya menambahkan perintah ORDER BY alamat agar tampilan lebih rapi (diurutkan berdasarkan alamat).

Dari hasil query, dapat dilihat bahwa nama kota yang sama akan tampil lebih dari sekali. Ini terjadi karena terdapat beberapa dosen yang beralamat di kota yang sama. Jika kita ingin setiap kota hanya muncul 1 kali saja, bisa menggunakan query DISTINCT.


Cara Penulisan Query DISTINCT MySQL

Berikut format dasar penulisan query DISTINCT:

SELECT DISTINCT nama_kolom FROM nama_tabel;
  • nama_kolom adalah nama kolom yang akan ditampilkan.
  • nama_tabel adalah nama tabel dari kolom yang akan ditampilkan.

Sehingga untuk menampilkan seluruh kota 1 kali saja bisa menggunakan query:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> SELECT DISTINCT alamat FROM daftar_dosen ORDER BY alamat;
+-----------+
| alamat    |
+-----------+
| Aceh      |
| Bogor     |
| Jakarta   |
| Makasar   |
| Padang    |
| Palembang |
| Papua     |
| Pekanbaru |
+-----------+
8 rows in set (0.00 sec)

Dengan penambahan perintah DISTINCT di awal query SELECT, maka hanya data yang unik saja yang akan tampil. Seandainya hasil query terdapat data yang sama lebih dari 1 kali tampil, perintah DISTINCT hanya akan menampilkannya 1 kali saja.

Namun jika kita menambah kolom nama_dosen, efeknya menjadi berbeda:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mysql> SELECT DISTINCT nama_dosen,alamat FROM daftar_dosen
ORDER BY alamat;
+----------------+-----------+
| nama_dosen     | alamat    |
+----------------+-----------+
| Mustalifah     | Aceh      |
| Susi Indriani  | Bogor     |
| Aria Sulistya  | Jakarta   |
| M. Siddiq      | Jakarta   |
| Rudi Arwana    | Jakarta   |
| Arif Budiman   | Makasar   |
| Siswanto       | Padang    |
| Tia Santrini   | Padang    |
| Maya Ari Putri | Palembang |
| Suci Syuhada   | Palembang |
| Rubin Hadi     | Papua     |
| Sabrina Sari   | Pekanbaru |
+----------------+-----------+
12 rows in set (0.06 sec)

Terlihat MySQL tetap menampilkan seluruh isi tabel tanpa ada yang dieliminasi. Ini disebabkan query DISTINCT hanya mengeliminasi query yang unik secara baris per baris (per record).

Dengan mengombinasikan nama_dosen dengan alamat, maka setiap baris dianggap unik, kecuali terdapat nama dosen dan alamat yang persis sama.


Query SELECT … DISTINCT yang kita pelajari kali ini cocok dipakai untuk laporan atau menampilkan sebagian data dari tabel MySQL.

Tutorial selanjutnya akan membahas tentang pengelolaan user, yang dimulai dari Mengenal Superuser root dan Pengertian Privileges MySQL.