Pemrograman Database MySQL
Pemrograman Database MySQL
PENDAHULUAN
MySQL (diucapkan / maɪ ˌ ɛskju ː ɛl / My SQL, atau "My sequel" / maɪsi ː kwəl /) adalah sistem
manajemen relasi database (RDBMS) yang telah lebih dari 6 juta instalasi. MySQL adalah
singkatan "My Structured Query Language". Program ini berjalan sebagai server menyediakan
multi-user mengakses ke sejumlah database.
Source code tersedia di bawah ketentuan GNU General Public License, serta dalam berbagai
perjanjian eksklusif. MySQL dimiliki dan disponsori oleh sebuah perusahaan, MySQL AB di
Swedia, yang kini merupakan anak perusahaan dari Sun Microsystems, yang memegang hak
cipta untuk sebagian besar source code-nya.
MySQL umumnya digunakan oleh perangkat lunak bebas yang memerlukan fitur penuh sistem
manajemen database, seperti Wordpress, phpBB dan perangkat lunak lain yang dibangun pada
perangkat lunak LAMP. Ia juga digunakan dalam skala sangat tinggi World Wide Web, termasuk
produk-produk Google dan Facebook
Menjalankan MySQL dapat dilakukan melalui menu Windows: Start -> Programs -> MySQL
-> MySQL Server 5.0 -> MySQL Command Line Client. Kemudian Anda masukkan
password yang telah Anda buat pada saat instalasi MySQL.
Enter password: ******
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 60
Server version: 5.0.45-community-nt MySQL Community Edition (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
1
Menampilkan database
Kita coba dengan perintah "SHOW DATABASES" yang akan menampilkan database yang ada
di dalam sistem MySQL kita.
Catatan: Istilah database perlu dipahami dengan baik. Database di dalam MySQL adalah
sekumpulan tabel-tabel. Jumlah tabel minimal satu buah, dan maksimalnya tidak terbatas.
Semakin banyak tabel, maka akan semakin besar ukuran database Anda. Yang membatasi
besarnya database adalah kemampuan sistem operasi kita, dan juga jumlah kapasitas ruang
dalam haarddisk dan memori komputer Anda. Keterangan selengkapnya mengenai hal ini dapat
dilihat pada situs MySQL (http://www.mysql.com).
Sudah ada 3 buah database di dalam sistem MySQL. Sekarang kita akan membuat sebuah
database untuk latihan kita. Gunakan perintah "CREATE DATABASE" untuk membuat
sebuah database.
Anda perhatikan dari dua perintah MySQL di atas,bahwa setiap perintah selalu diakhiri dengan
tanda ";" (titik-koma). Memang pada umumnya perintah-perintah MySQL diakhiri oleh tanda
";" ini. Perhatikan perintah dibawah ini bila ditulis tanpa tanda titik-koma ";'.
Sistem MySQL akan menampilkan tanda panah '->' yang menyatakan bahwa perintah MySQL
tersebut dianggap belum selesai (karena belum diakhiri dengan tanda titik-koma ';').
2
Nah, semuanya berjalan normal bukan? :) Mari kita lanjutkan tutorialnya...
Kita periksa lagi hasil dari perintah di atas dengan "SHOW DATABASE".
Menghapus database
Kita tidak memerlukan database latihan2, maka kita dapat menghapusnya dengan perintah
DROP DATABASE. Hati-hati dalam menggunakan perintah DROP DATABASE ini, karena
database beserta seluruh isinya akan lenyap dari muka bumi tanpa bisa kita kembalikan lagi!
Parahnya lagi, sistem MySQL tidak memberikan pertanyaan konfirmasi kepada Anda sebelum
melakukan proses penghapusan database ini!
mysql> drop database latihan2 ;
Query OK, 0 row affected (0.02 sec)
Anda bisa memeriksanya lagi hasil dari perintah di atas dengan "SHOW DATABASE".
Anda perhatikan, database latihan2 sudah menghilang. Sekali lagi, hati-hati dalam
menggunakan perintah DROP DATABASE!
Sekarang kita pilih database "latihan1" dan kita buka dengan perintah "USE"
mysql> use latihan1 ;
Database change
3
Melihat isi sebuah database
Untuk melihat apa isi dari sebuah database, kita gunakan perintah "SHOW TABLES". Mari
kita coba.
mysql> show tables ;
Empty set (0.00 sec)
Hasil dari perintah SHOW TABLES diatas adalah "Empty Set", yang berarti belum ada tabel
apapun didalam database latihan1.
Kita akan membuat sebuah tabel baru dengan menggunakan perintah "CREATE TABLE".
Contohnya sebagai berikut..
mysql> create table karyawan ;
ERROR 1113 (42000): A table must have at least 1 column
Ternyata ada kesalahan yang terjadi. Untuk membuat sebuah tabel di MySQL, kita harus
menentukan minimal satu buah field/kolom di dalamnya. Sekrang kita ubah perintah di atas
menjadi sebagai berikut...
Dari hasil perintah di atas, kita lihat bahwa database latihan1 telah memiliki sebuah tabel yang
bernama karyawan. Selanjutnya kita akan lihat apa struktur dari tabel karyawan tersebut.
4
Melihat struktur tabel
Untuk melihat struktur sebuah tabel dapat menggunakan perintah "DESCRIBE" atau bisa juga
menggunakan perintah "SHOW COLUMNS FROM". Contohnya berikut ini...
Tidak ada perbedaan hasil dari dua perintah di atas, bukan? Sekarang kita buat sebuah tabel baru
lagi, kita namakan saja tabel contoh1.
mysql> create table contoh1
-> (noid INT)
-> ;
Query OK, 0 rows affected (0.13 sec)
Sekarang kita lihat berapa tabel yang ada di dalam database latihan1:
mysql> show tables ;
+--------------------+
| Tables_in_latihan1 |
+--------------------+
| contoh1 |
| karyawan |
+--------------------+
2 rows in set (0.00 sec)
Menghapus tabel
Tabel contoh1 yang baru saja kita buat ini akan kita hapus kembali. Perintah untuk menghapus
sebuah tabel dalam MySQL adalah "DROP TABLE". Cukup mirip dengan perintah menghapus
database, bukan? Kita harus menggunakan perintah "DROP" ini dengan kehati-hatian yang
tinggi. Sistem MySQL tidak akan memberikan peringatan awal atau konfirmasi untuk proses
penghapusan tabel. Dan bila sudah dihapus, maka tabel tersebut tidak bisa lagi kita kembalikan.
Maka, berhati-hatilah!
mysql> drop table contoh1 ;
Query OK, 0 rows affected (0.03 sec)
5
| Tables_in_latihan1 |
+--------------------+
| karyawan |
+--------------------+
1 rows in set (0.00 sec)
Ada saatnya kita perlu mengubah struktur tabel yang pernah kita buat sebelumnya. Pengubahan
struktur bisa dalam hal penambahan kolom (ADD), pengubahan lebar dan jenis kolom
(MODIFY), atau bisa saja penghapusan kolom dan indeks (DROP), penggantian nama kolom
(CHANGE), pengantian nama tabel (RENAME), dan sebagainya. Apa pun juga yang anda
lakukan pada kolom tersebut tentu akan mempunyai dampak langsung pada data-data yang
sudah ada. Nah, sekarang kita perlu menambahkan beberapa kolom baru, yaitu kolom jenis
kelamin, kota, tanggal lahir dan kodepos pada tabel karyawan.
Perintah untuk mengubah struktur tabel adalah "ALTER TABLE". Mari kita coba...
mysql> alter table karyawan
-> ADD jenkelamin CHAR(2) NOT NULL,
-> ADD kota VARCHAR(25) NOT NULL,
-> ADD kodepos CHAR(5) NOT NULL,
-> ADD tgllahir DATE
-> ;
Query OK, 0 rows affected (0.20 sec)
Records: 0 Duplicates: 0 Warnings: 0
Mungkin ada baiknya kalau nama kolom nopeg kita ubah aja menjadi noid. Begitupun dengan
nama kolom jenkelamin, kita ubah namanya menjadi jenkel saja. Dalam pengubahan kolom ini
sebaiknya 'sifat-sifat' kolom yang asli tetap ditulis ulang. Misal bila kolom nopeg memiliki sifat
'auto_increment', maka selama sifat itu tetap dipertahankan, maka dia (auto_increment) harus
ditulis ulang. Begini caranya...
Mengubah kolom jenkelamin menjadi jenkel, sekaligus mengubah jenis datanya dari CHAR(2)
menjadi CHAR(1):
mysql> alter table karyawan
-> change jenkelamin jenkel char(1) ;
Query OK, 0 rows affected (0.24 sec)
Records: 0 Duplicates: 0 Warnings: 0
Mengubah kolom nopeg menjadi noid, tanpa mengubah jenis datanya (tetap INT(10), dan tetap
auto_increment):
6
mysql> alter table karyawan
-> change nopeg noid int(10) auto_increment
-> ;
Query OK, 0 rows affected (0.16 sec)
Records: 0 Duplicates: 0 Warnings: 0
Bagaimana, sudah sesuai dengan perubahan struktur yang kita inginkan, bukan? Nah, sekarang
bagaimana kalau kita ingin mengubah nama tabel karyawan menjadi tabel pegawai? Silakan
dicoba dibawah ini:
mysql> alter table karyawan
-> rename pegawai ;
Query OK, 0 rows affected (0.09 sec)
Nah, sampai sejauh ini tidak sulit kan untuk mempelajari MySQL? Sekarang kita lanjutkan
dengan cara-cara pengisian data. Yuuukk..
7
Mengisi data ke dalam tabel
Kita akan mulai mengisi data karyawan ke dalam tabel. Perintah yang digunakan adalah
"INSERT INTO". Caranya sebagai berikut:
mysql> insert into karyawan
-> (nama, jenkel, kota, kodepos, tgllahir)
-> values
-> ("Ahmad Zobari", "L", "Bandung","41011","1977-10-02")
-> ;
Query OK, 1 row affected (0.17 sec)
Anda perhatikan bahwa dalam pemasukkan data yang berjenis karakter, selalu diapit dengan
tanda kutip ganda ("). Bisa juga digunakan tanda kutip tunggal ('). Tetapi jangan dicampur
dengan tanda kutip ganda dan tanda kutip tunggal, misal: "Ahmad Sobari'. Perhatikan juga pada
penulisan tanggal lahir, menggunakan format "tahun-bulan-tanggal". Memang agak janggal.
Tapi begitulah memang standar MySQL untuk format penulisan tanggal. Kalau Anda perhatikan
lebih teliti, mengapa kita tidak memasukkan data untuk kolom "noid"? Ini karena sifat kolom
noid yang auto_increment, sehingga dia akan secara otomatis berisi dengan angka 1, dan terus
bertambah 1, seiring dengan penambahan data.
Nah, kita akan masukkan 4 buah record lagi dengan cara:
mysql> insert into karyawan
-> (nama, jenkel, kota, kodepos, tgllahir)
-> values
-> ("Sundariwati", "P", "Bandung", "40123", "1978-11-12"),
-> ("Ryan Cakep", "L", "Jakarta", "12111", "1981-03-21"),
-> ("Zukarman","L", "Bekasi", "17211", "1978-08-10"),
-> ("Yuliawati", "P", "Bogor", "00000", "1982-06-09")
-> ;
Query OK, 4 rows affected (0.05 sec)
Records: 4 Duplicates: 0 Warnings: 0
Sekarang kita coba memasukkan data dengan cara yang lain lagi:
Kita sudah memasukkan beberapa data. Bagaimana untuk melihat data-data yang sudah kita
masukkan tadi?
Kita bisa melihat data yang ada di dalam tabel dengan menggunakan perintah "SELECT".
Perintah SELECT adalah perintah yang akan sering kita gunakan nantinya. Kita mulai dengan
cara yang paling sederhana dulu yaa..
mysql> select * from karyawan ;
8
+------+--------------+--------+---------+---------+------------+
| noid | nama | jenkel | kota | kodepos | tgllahir |
+------+--------------+--------+---------+---------+------------+
| 1 | Ahmad Sobari | L | Bandung | 41011 | 1977-10-02 |
| 2 | Sundariwati | P | Bandung | 40123 | 1978-11-12 |
| 3 | Ryan Cakep | L | Jakarta | 12111 | 1981-03-21 |
| 4 | Zukarman | L | Bekasi | 17211 | 1978-08-10 |
| 5 | Yuliawati | P | Bogor | 00000 | 1982-06-09 |
| 6 | Mawar | P | Bogor | 12345 | 1985-07-07 |
+------+--------------+--------+---------+---------+------------+
6 rows in set (0.02 sec)
Perintah di atas menampilkan seluruh data yang ada di dalam tabel karyawan, karena
menggunakan tanda asterik "*" di dalam perintah SELECT. Bagaimana kalau kita hanya mau
menampilkan kolom nama dan jenis kelamin saja?
mysql> select nama, jenkel from karyawan
-> ;
+--------------+--------+
| nama | jenkel |
+--------------+--------+
| Ahmad Sobari | L |
| Sundariwati | P |
| Ryan Cakep | L |
| Zukarman | L |
| Yuliawati | P |
| Mawar | P |
+--------------+--------+
6 rows in set (0.00 sec)
Kalau kita hanya mau menampilkan data-data karyawan yang berjenis kelamin perempuan saja,
bagaimana caranya? Cukup dengan menambahkan perintah "WHERE" pada "SELECT"
mysql> select nama, jenkel from karyawan
-> where jenkel="P"
-> ;
+-------------+--------+
| nama | jenkel |
+-------------+--------+
| Sundariwati | P |
| Yuliawati | P |
| Mawar | P |
+-------------+--------+
3 rows in set (0.00 sec)
Kita tampilkan data berdasarkan urutan nama karyawan dengan menambahkan perintah
"ORDER BY" pada "SELECT":
mysql> select * from karyawan
-> order by nama ;
+------+--------------+--------+---------+---------+------------+
| noid | nama | jenkel | kota | kodepos | tgllahir |
+------+--------------+--------+---------+---------+------------+
| 1 | Ahmad Sobari | L | Bandung | 41011 | 1977-10-02 |
| 6 | Mawar | P | Bogor | 12345 | 1985-07-07 |
| 3 | Ryan Cakep | L | Jakarta | 12111 | 1981-03-21 |
| 2 | Sundariwati | P | Bandung | 40123 | 1978-11-12 |
| 5 | Yuliawati | P | Bogor | 00000 | 1982-06-09 |
| 4 | Zukarman | L | Bekasi | 17211 | 1978-08-10 |
+------+--------------+--------+---------+---------+------------+
6 rows in set (0.00 sec)
9
Atau diurut berdasarkan kota:
mysql> select * from karyawan
-> order by kota ;
+------+--------------+--------+---------+---------+------------+
| noid | nama | jenkel | kota | kodepos | tgllahir |
+------+--------------+--------+---------+---------+------------+
| 1 | Ahmad Sobari | L | Bandung | 41011 | 1977-10-02 |
| 2 | Sundariwati | P | Bandung | 40123 | 1978-11-12 |
| 4 | Zukarman | L | Bekasi | 17211 | 1978-08-10 |
| 5 | Yuliawati | P | Bogor | 00000 | 1982-06-09 |
| 6 | Mawar | P | Bogor | 12345 | 1985-07-07 |
| 3 | Ryan Cakep | L | Jakarta | 12111 | 1981-03-21 |
+------+--------------+--------+---------+---------+------------+
6 rows in set (0.00 sec)
Nah kalo yang sekarang diurut berdasarkan nama, tetapi dengan urutan terbalik (descending).
Cukup dengan menambahkan perintah "DESC" pada SELECT:
mysql> select * from karyawan
-> order by nama DESC ;
+------+--------------+--------+---------+---------+------------+
| noid | nama | jenkel | kota | kodepos | tgllahir |
+------+--------------+--------+---------+---------+------------+
| 4 | Zukarman | L | Bekasi | 17211 | 1978-08-10 |
| 5 | Yuliawati | P | Bogor | 00000 | 1982-06-09 |
| 2 | Sundariwati | P | Bandung | 40123 | 1978-11-12 |
| 3 | Ryan Cakep | L | Jakarta | 12111 | 1981-03-21 |
| 6 | Mawar | P | Bogor | 12345 | 1985-07-07 |
| 1 | Ahmad Sobari | L | Bandung | 41011 | 1977-10-02 |
+------+--------------+--------+---------+---------+------------+
6 rows in set (0.00 sec)
Bisa juga kalau yang diurutnya adalah tanggal lahir secara urutan terbalik (descending):
mysql> select * from karyawan
-> order by tgllahir DESC ;
+------+--------------+--------+---------+---------+------------+
| noid | nama | jenkel | kota | kodepos | tgllahir |
+------+--------------+--------+---------+---------+------------+
| 6 | Mawar | P | Bogor | 12345 | 1985-07-07 |
| 5 | Yuliawati | P | Bogor | 00000 | 1982-06-09 |
| 3 | Ryan Cakep | L | Jakarta | 12111 | 1981-03-21 |
| 2 | Sundariwati | P | Bandung | 40123 | 1978-11-12 |
| 4 | Zukarman | L | Bekasi | 17211 | 1978-08-10 |
| 1 | Ahmad Sobari | L | Bandung | 41011 | 1977-10-02 |
10
+------+--------------+--------+---------+---------+------------+
6 rows in set (0.00 sec)
Ternyata kita perlu menambahkan sebuah kolom field lagi, yaitu kolom gaji. Kolom Gaji
merupakan kolom numerik yang menampung data gaji pokok karyawan per bulannya. Jadi,
yang kita perlukan adalah jenis data INTeger dengan lebar data 12 digit. Penerapannya sebagai
berikut dengan menggunakan perintah ALTER.
mysql> alter table karyawan
-> ADD gaji INT(12) NOT NULL default 0
-> ;
Query OK, 6 rows affected (0.25 sec)
Records: 6 Duplicates: 0 Warnings: 0
Ya, kolom gaji sudah ditambahkan ke dalam tabel karyawan. Sekarang kita akan menambahkan
data gaji kepada tiap-tiap karyawan yang ada. Untuk memudahkan, kita tampilkan dulu semua
data yang ada di tabel karyawan:
mysql> select * from karyawan ;
+------+--------------+--------+---------+---------+------------+------+
| noid | nama | jenkel | kota | kodepos | tgllahir | gaji |
+------+--------------+--------+---------+---------+------------+------+
| 1 | Ahmad Sobari | L | Bandung | 41011 | 1977-10-02 | 0 |
| 2 | Sundariwati | P | Bandung | 40123 | 1978-11-12 | 0 |
| 3 | Ryan Cakep | L | Jakarta | 12111 | 1981-03-21 | 0 |
| 4 | Zukarman | L | Bekasi | 17211 | 1978-08-10 | 0 |
| 5 | Yuliawati | P | Bogor | 00000 | 1982-06-09 | 0 |
| 6 | Mawar | P | Bogor | 12345 | 1985-07-07 | 0 |
+------+--------------+--------+---------+---------+------------+------+
6 rows in set (0.00 sec)
Sekarang kita masukkan data gaji masing-masing karyawan dengan menggunakan perintah
UPDATE. Kita mulai dari Ahmad Sobari, dengan noid=1:
mysql> update karyawan
-> set gaji=1000000
-> where noid=1 ;
Query OK, 1 row affected (0.09 sec)
Rows matched: 1 Changed: 1 Warnings: 0
11
Periksa dulu hasilnya:
mysql> select * from karyawan
-> where noid=1 ;
+------+--------------+--------+---------+---------+------------+---------+
| noid | nama | jenkel | kota | kodepos | tgllahir | gaji |
+------+--------------+--------+---------+---------+------------+---------+
| 1 | Ahmad Sobari | L | Bandung | 41011 | 1977-10-02 | 1000000 |
+------+--------------+--------+---------+---------+------------+---------+
1 row in set (0.00 sec)
Kita lanjutkan dengan karyawan lainnya, seperti Sundariwati dengan noid=2, Ryan Cakep
dengan noid=3, dan seterusnya. Sayangnya, perintah ini hanya bisa dilakukan satu per satu. Jadi,
Anda harus sabar menjalankan perintah di bawah ini yaa..:
mysql> update karyawan
-> set gaji=1250000 where noid=2 ;
Query OK, 1 row affected (0.39 sec)
Rows matched: 1 Changed: 1 Warnings: 0
Cukup mudah kan? Nah, itulah dasar-dasar menggunakan perintah MySQL. Sekarang kita
membutuhkan lebih banyak data untuk latihan kita. Ya minimal sekitar 30-an data lagi. Tapi
apakah ada cara lain yang lebih mudah dibanding harus mengetikkan datanya satu per satu? Kan
kalo kita ketik satu per satu, faktor resiko kesalahan ketik karena faktor kelelahan, dan
12
sebagainya. Untungnya untuk pemasukan data masal kita bisa menggunakan cara yang lebih
mudah.
Untuk pemasukan data secara masal, kita menggunakan data-data yang telah ditulis dalam
sebuah file teks biasa. File ini kita namakan tambahdata.txt, dan untuk contoh ini kita simpan
di dalam folder C:\Data\. Anda dapat mengunduh (download) file tambahdata.txt dari situs ini.
Silakan saja klik disini untuk download file tambahdata.txt.
Perintah yang kita gunakan adalah "".
13
| 15 | The Cute | L | Jakarta | 12111 | 1977-03-21 | 1700000
|
| 16 | Marpaung | L | Surabaya | 17211 | 1988-08-10 | 1800000
|
| 17 | Yono | P | Bogor | 00000 | 1989-06-09 | 1900000
|
| 18 | Dian | P | Jakarta | 12345 | 1980-07-07 | 1650000
|
| 19 | Donno | L | Bandung | 41011 | 1971-10-02 | 1850000
|
| 20 | Ratu | P | Yogyakarta | 40123 | 1972-11-12 | 1950000
|
| 21 | Bambang | L | Jakarta | 12111 | 1982-03-21 | 2100000
|
| 22 | Dadang | L | Surabaya | 17211 | 1977-08-10 | 2200000
|
| 23 | Yuliawati | P | Bogor | 00000 | 1974-06-09 | 2300000
|
| 24 | Miranda | P | Bogor | 12345 | 1980-07-07 | 2400000
|
| 25 | Subur | L | Bandung | 41011 | 1977-10-02 | 2150000
|
| 26 | Banowati | P | Malang | 40123 | 1978-11-12 | 2350000
|
| 27 | Gungun | L | Jakarta | 12111 | 1981-03-21 | 2450000
|
| 28 | Gunadi | L | Bekasi | 17211 | 1978-08-10 | 2125000
|
| 29 | Yossy | P | Bogor | 00000 | 1982-06-09 | 2225000
|
| 30 | Melia | P | Malang | 12345 | 1981-07-07 | 2325000
|
| 31 | Anwar | L | Purwakarta | 41011 | 1972-10-02 | 2425000
|
| 32 | Susilowati | P | Bandung | 40123 | 1973-11-12 | 1125000
|
| 33 | Rahmat | L | Jakarta | 12111 | 1977-03-21 | 1225000
|
| 34 | Zamzam | L | Bekasi | 17211 | 1974-08-10 | 1325000
|
| 35 | Nenny | P | Medan | 00000 | 1972-06-09 | 1425000
|
| 36 | Mardiatun | P | Bogor | 12345 | 1975-07-07 | 1625000
|
| 37 | Andika | L | Bandung | 41011 | 1978-10-02 | 1725000
|
| 38 | Siti | P | Medan | 40123 | 1988-11-12 | 1825000
|
| 39 | Rohimat | L | Jakarta | 12111 | 1980-03-21 | 1925000
|
| 40 | Beno | L | Bekasi | 17211 | 1978-08-10 | 1175000
|
| 41 | Yanti | P | Jakarta | 00000 | 1981-06-09 | 1275000
|
| 42 | Miranti | P | Medan | 12345 | 1975-07-07 | 1375000
|
+------+--------------+--------+------------+---------+------------+---------
+
42 rows in set (0.00 sec)
Kita sudah memiliki lebih banyak data. Cukuplah untuk bahan latihan-latihan berikutnya...
14
Operator Pembanding dan Operator Logika
Sudah saatnya kita melangkah ke permainan data yang lebih mengasyikan lagi dengan
menggunakan dua operator, yaitu Operator Pembanding dan Operator Logika. Kedua jenis
operator ini akan sering digunakan dalam proses "query" data.
Operator Pembanding
Operator Pembanding Keterangan
Lebih besar >
Lebih kecil <=
Lebih besar atau sama dengan >=
Lebih kecil atau sama dengan <=
Sama dengan =
Tidak sama dengan <>
Operator Logika
Operator Logika Keterangan
Dan AND atau &&
Atau OR atau ||
Lebih besar atau sama
NOT atau !
dengan
Lebih kecil atau sama dengan <=
Tidak sama dengan <>
15
| Maman | L | 1977-08-10 |
| Mardiatun | P | 1975-07-07 |
| Melia | P | 1979-11-12 |
| Miranti | P | 1975-07-07 |
| Nenny | P | 1972-06-09 |
| Rahmat | L | 1977-03-21 |
| Ratu | P | 1972-11-12 |
| Sobari | L | 1976-10-02 |
| Subur | L | 1977-10-02 |
| Sundariwati | P | 1978-11-12 |
| Susilowati | P | 1973-11-12 |
| The Cute | L | 1977-03-21 |
| Wawan | P | 1971-11-12 |
| Yuliawati | P | 1974-06-09 |
| Zamzam | L | 1974-08-10 |
| Zukarman | L | 1978-08-10 |
+--------------+--------+------------+
25 rows in set (0.00 sec)
MySQL memiliki kelonggaran dalam penulisan tanggal selama formatnya mengikuti aturan
"tahun-bulan-tanggal". Misal "1971-11-12" dapat ditulis 1971-11-12, atau 1971#11#12, atau
19711112, atau 711112.
Kita lihat contohnya dibawah ini dimana tanggal "1980-01-01" ditulis dengan 19800101
mysql> select nama, jenkel, tgllahir
-> from karyawan
-> where tgllahir < 19800101
-> and jenkel="L"
-> order by nama ;
+--------------+--------+------------+
| nama | jenkel | tgllahir |
+--------------+--------+------------+
| Ahmad Sobari | L | 1977-10-02 |
| Andika | L | 1978-10-02 |
| Anwar | L | 1972-10-02 |
| Beno | L | 1978-08-10 |
| Dadan | L | 1975-10-02 |
| Dadang | L | 1977-08-10 |
| Donno | L | 1971-10-02 |
| Gunadi | L | 1978-08-10 |
| Maman | L | 1977-08-10 |
| Rahmat | L | 1977-03-21 |
| Sobari | L | 1976-10-02 |
| Subur | L | 1977-10-02 |
| The Cute | L | 1977-03-21 |
| Zamzam | L | 1974-08-10 |
| Zukarman | L | 1978-08-10 |
+--------------+--------+------------+
15 rows in set (0.00 sec)
Kita lihat contohnya di bawah ini bila tanggal "1980-01-01" ditulis dengan cara 800101.
mysql> select nama, jenkel, tgllahir
-> from karyawan
-> where tgllahir < 800101
-> and jenkel="L"
-> order by nama;
+--------------+--------+------------+
| nama | jenkel | tgllahir |
16
+--------------+--------+------------+
| Ahmad Sobari | L | 1977-10-02 |
| Andika | L | 1978-10-02 |
| Anwar | L | 1972-10-02 |
| Beno | L | 1978-08-10 |
| Dadan | L | 1975-10-02 |
| Dadang | L | 1977-08-10 |
| Donno | L | 1971-10-02 |
| Gunadi | L | 1978-08-10 |
| Maman | L | 1977-08-10 |
| Rahmat | L | 1977-03-21 |
| Sobari | L | 1976-10-02 |
| Subur | L | 1977-10-02 |
| The Cute | L | 1977-03-21 |
| Zamzam | L | 1974-08-10 |
| Zukarman | L | 1978-08-10 |
+--------------+--------+------------+
15 rows in set (0.00 sec)
Kita lihat contohnya di bawah ini bila tanggal "1980-01-01" ditulis dengan cara "1980#01#01".
mysql> select nama, jenkel, tgllahir
-> from karyawan
-> where tgllahir < "1980#01#01"
-> and jenkel="L"
-> order by nama ;
+--------------+--------+------------+
| nama | jenkel | tgllahir |
+--------------+--------+------------+
| Ahmad Sobari | L | 1977-10-02 |
| Andika | L | 1978-10-02 |
| Anwar | L | 1972-10-02 |
| Beno | L | 1978-08-10 |
| Dadan | L | 1975-10-02 |
| Dadang | L | 1977-08-10 |
| Donno | L | 1971-10-02 |
| Gunadi | L | 1978-08-10 |
| Maman | L | 1977-08-10 |
| Rahmat | L | 1977-03-21 |
| Sobari | L | 1976-10-02 |
| Subur | L | 1977-10-02 |
| The Cute | L | 1977-03-21 |
| Zamzam | L | 1974-08-10 |
| Zukarman | L | 1978-08-10 |
+--------------+--------+------------+
15 rows in set (0.00 sec)
Kita lihat contohnya di bawah ini bila tanggal "1980-01-01" ditulis dengan cara "1980.01.01".
mysql> select nama,jenkel, tgllahir
-> from karyawan
-> where tgllahir < "1980.01.01"
-> and jenkel="L"
-> order by nama ;
+--------------+--------+------------+
| nama | jenkel | tgllahir |
+--------------+--------+------------+
| Ahmad Sobari | L | 1977-10-02 |
| Andika | L | 1978-10-02 |
| Anwar | L | 1972-10-02 |
| Beno | L | 1978-08-10 |
| Dadan | L | 1975-10-02 |
17
| Dadang | L | 1977-08-10 |
| Donno | L | 1971-10-02 |
| Gunadi | L | 1978-08-10 |
| Maman | L | 1977-08-10 |
| Rahmat | L | 1977-03-21 |
| Sobari | L | 1976-10-02 |
| Subur | L | 1977-10-02 |
| The Cute | L | 1977-03-21 |
| Zamzam | L | 1974-08-10 |
| Zukarman | L | 1978-08-10 |
+--------------+--------+------------+
15 rows in set (0.00 sec)
Perhatikan semua hasil di atas sama walaupun cara penulisan tanggalnya berbeda-beda (tetapi
formatnya tetap mengikuti "tahun-bulan-tanggal").
Sekarang kita tampilkan data karyawan yang tanggal lahirnya antara tanggal 1 Januari 1980
dan 31 Desember 1985, dan tampilan data diurut berdasarkan nama. Cukup hanya kolom nama,
jenis kelamin dan tanggal lahir saja yang ditampilkan:
mysql> select nama, jenkel, tgllahir
-> from karyawan
-> where tgllahir >= "1980-01-01"
-> and tgllahir <= "1985-12-31"
-> order by nama ;
+------------+--------+------------+
| nama | jenkel | tgllahir |
+------------+--------+------------+
| Bambang | L | 1982-03-21 |
| Dian | P | 1980-07-07 |
| Gungun | L | 1981-03-21 |
| Mawar | P | 1985-07-07 |
| Melia | P | 1981-07-07 |
| Miranda | P | 1980-07-07 |
| Rohimat | L | 1980-03-21 |
| Ryan Cakep | L | 1981-03-21 |
| Yanti | P | 1981-06-09 |
| Yenny | P | 1985-06-09 |
| Yossy | P | 1982-06-09 |
| Yuliawati | P | 1982-06-09 |
| Zanda Cute | L | 1980-03-21 |
+------------+--------+------------+
13 rows in set (0.00 sec)
Sekarang kita tampilkan data karyawan yang tanggal lahirnya antara tanggal 1 Januari 1980
dan 31 Desember 1985, dan tampilan data diurut berdasarkan nama. Cukup hanya kolom nama,
jenis kelamin dan tanggal lahir saja, serta hanya yang berjenis kelamin laki-laki yang
ditampilkan:
mysql> select nama, jenkel, tgllahir
-> from karyawan
-> where tgllahir >= "1980-01-01"
-> and tgllahir <= "1985-12-31"
-> and jenkel="L"
-> order by nama ;
+------------+--------+------------+
| nama | jenkel | tgllahir |
+------------+--------+------------+
| Bambang | L | 1982-03-21 |
18
| Gungun | L | 1981-03-21 |
| Rohimat | L | 1980-03-21 |
| Ryan Cakep | L | 1981-03-21 |
| Zanda Cute | L | 1980-03-21 |
+------------+--------+------------+
5 rows in set (0.00 sec)
Bagaimana, semakin menarik kan? Kita lanjutkan dengan menampilkan semua data karyawan
dengan usianya pada saat ini. Untuk masalah ini memang cukup panjang solusinya. Tidak apa-
apa, kita coba saja ya. Disini kita memerlukan bantuan beberapa fungsi-fungsi yang sudah
disediakan oleh MySQL. Kita lihat dulu ya..:
mysql> select nama, tgllahir,
-> current_date AS SEKARANG,
-> (year(current_date) - year(tgllahir))
-> - (right(current_date,5) < right(tgllahir,5)) AS USIA
-> from karyawan ;
+--------------+------------+------------+------+
| nama | tgllahir | SEKARANG | USIA |
+--------------+------------+------------+------+
| Ahmad Sobari | 1977-10-02 | 2007-08-30 | 29 |
| Sundariwati | 1978-11-12 | 2007-08-30 | 28 |
| Ryan Cakep | 1981-03-21 | 2007-08-30 | 26 |
| Zukarman | 1978-08-10 | 2007-08-30 | 29 |
| Yuliawati | 1982-06-09 | 2007-08-30 | 25 |
| Mawar | 1985-07-07 | 2007-08-30 | 22 |
| Sobari | 1976-10-02 | 2007-08-30 | 30 |
| Melia | 1979-11-12 | 2007-08-30 | 27 |
| Zanda Cute | 1980-03-21 | 2007-08-30 | 27 |
| Maman | 1977-08-10 | 2007-08-30 | 30 |
| Yenny | 1985-06-09 | 2007-08-30 | 22 |
| Rossa | 1987-07-07 | 2007-08-30 | 20 |
| Dadan | 1975-10-02 | 2007-08-30 | 31 |
| Wawan | 1971-11-12 | 2007-08-30 | 35 |
| The Cute | 1977-03-21 | 2007-08-30 | 30 |
| Marpaung | 1988-08-10 | 2007-08-30 | 19 |
| Yono | 1989-06-09 | 2007-08-30 | 18 |
| Dian | 1980-07-07 | 2007-08-30 | 27 |
| Donno | 1971-10-02 | 2007-08-30 | 35 |
| Ratu | 1972-11-12 | 2007-08-30 | 34 |
| Bambang | 1982-03-21 | 2007-08-30 | 25 |
| Dadang | 1977-08-10 | 2007-08-30 | 30 |
| Yuliawati | 1974-06-09 | 2007-08-30 | 33 |
| Miranda | 1980-07-07 | 2007-08-30 | 27 |
| Subur | 1977-10-02 | 2007-08-30 | 29 |
| Banowati | 1978-11-12 | 2007-08-30 | 28 |
| Gungun | 1981-03-21 | 2007-08-30 | 26 |
| Gunadi | 1978-08-10 | 2007-08-30 | 29 |
| Yossy | 1982-06-09 | 2007-08-30 | 25 |
| Melia | 1981-07-07 | 2007-08-30 | 26 |
| Anwar | 1972-10-02 | 2007-08-30 | 34 |
| Susilowati | 1973-11-12 | 2007-08-30 | 33 |
| Rahmat | 1977-03-21 | 2007-08-30 | 30 |
| Zamzam | 1974-08-10 | 2007-08-30 | 33 |
| Nenny | 1972-06-09 | 2007-08-30 | 35 |
| Mardiatun | 1975-07-07 | 2007-08-30 | 32 |
| Andika | 1978-10-02 | 2007-08-30 | 28 |
| Siti | 1988-11-12 | 2007-08-30 | 18 |
| Rohimat | 1980-03-21 | 2007-08-30 | 27 |
| Beno | 1978-08-10 | 2007-08-30 | 29 |
19
| Yanti | 1981-06-09 | 2007-08-30 | 26 |
| Miranti | 1975-07-07 | 2007-08-30 | 32 |
+--------------+------------+------------+------+
42 rows in set (0.00 sec)
Kita lanjutkan dengan menampilkan data karyawan yang usianya sama atau dibawah 25
tahun. Nah bagaimana caranya?:
mysql> select nama, tgllahir,
-> current_date AS SEKARANG,
-> (year(current_date) - year(tgllahir))
-> - (right(current_date,5) < right(tgllahir,5))
-> AS USIA
-> from karyawan
-> where ((year(current_date) - year(tgllahir))
-> - (right(current_date,5) < right(tgllahir,5)))
-> <= 25 ;
+-----------+------------+------------+------+
| nama | tgllahir | SEKARANG | USIA |
+-----------+------------+------------+------+
| Yuliawati | 1982-06-09 | 2007-08-30 | 25 |
| Mawar | 1985-07-07 | 2007-08-30 | 22 |
| Yenny | 1985-06-09 | 2007-08-30 | 22 |
| Rossa | 1987-07-07 | 2007-08-30 | 20 |
| Marpaung | 1988-08-10 | 2007-08-30 | 19 |
| Yono | 1989-06-09 | 2007-08-30 | 18 |
| Bambang | 1982-03-21 | 2007-08-30 | 25 |
| Yossy | 1982-06-09 | 2007-08-30 | 25 |
| Siti | 1988-11-12 | 2007-08-30 | 18 |
+-----------+------------+------------+------+
9 rows in set (0.00 sec)
Cukup panjang perintahnya ya. Disini kita menggunakan fungsi CURRENT_DATE yang
mengambil nilai dari tanggal saat ini pada sistem komputer Anda. YEAR adalah fungsi yang
mengambil nilai tahun. Kemudian AS adalah singkatan dari AliaS, yang seolah-olah
memberikan nama lain (alias name) pada kolom atau pada hasil suatu proses. Sedangkan
RIGHT adalah fungsi yang mengambil nilai dari sekian karakter dari sisi kanan sebuah target.
Misal RIGHT("TOMAT", 3) maka akan menghasilkan karakter "MAT".
Perintah di atas dapat juga menggunakan tanda "<>', dan hasilnya tetap sama dengan di atas:
mysql> select * from karyawan
-> where kota <> "bandung" ;
+------+------------+--------+------------+---------+------------+---------+
| noid | nama | jenkel | kota | kodepos | tgllahir | gaji |
+------+------------+--------+------------+---------+------------+---------+
| 3 | Ryan Cakep | L | Jakarta | 12111 | 1981-03-21 | 1500000 |
| 4 | Zukarman | L | Bekasi | 17211 | 1978-08-10 | 1750000 |
| 5 | Yuliawati | P | Bogor | 00000 | 1982-06-09 | 2000000 |
| 6 | Mawar | P | Bogor | 12345 | 1985-07-07 | 2250000 |
| 7 | Sobari | L | Jakarta | 41011 | 1976-10-02 | 1100000 |
| 9 | Zanda Cute | L | Jakarta | 12111 | 1980-03-21 | 1300000 |
| 10 | Maman | L | Bekasi | 17211 | 1977-08-10 | 1400000 |
| 11 | Yenny | P | Bogor | 00000 | 1985-06-09 | 1150000 |
| 12 | Rossa | P | Jakarta | 12345 | 1987-07-07 | 1350000 |
| 14 | Wawan | P | Semarang | 40123 | 1971-11-12 | 1600000 |
| 15 | The Cute | L | Jakarta | 12111 | 1977-03-21 | 1700000 |
| 16 | Marpaung | L | Surabaya | 17211 | 1988-08-10 | 1800000 |
| 17 | Yono | P | Bogor | 00000 | 1989-06-09 | 1900000 |
21
| 18 | Dian | P | Jakarta | 12345 | 1980-07-07 | 1650000 |
| 20 | Ratu | P | Yogyakarta | 40123 | 1972-11-12 | 1950000 |
| 21 | Bambang | L | Jakarta | 12111 | 1982-03-21 | 2100000 |
| 22 | Dadang | L | Surabaya | 17211 | 1977-08-10 | 2200000 |
| 23 | Yuliawati | P | Bogor | 00000 | 1974-06-09 | 2300000 |
| 24 | Miranda | P | Bogor | 12345 | 1980-07-07 | 2400000 |
| 26 | Banowati | P | Malang | 40123 | 1978-11-12 | 2350000 |
| 27 | Gungun | L | Jakarta | 12111 | 1981-03-21 | 2450000 |
| 28 | Gunadi | L | Bekasi | 17211 | 1978-08-10 | 2125000 |
| 29 | Yossy | P | Bogor | 00000 | 1982-06-09 | 2225000 |
| 30 | Melia | P | Malang | 12345 | 1981-07-07 | 2325000 |
| 31 | Anwar | L | Purwakarta | 41011 | 1972-10-02 | 2425000 |
| 33 | Rahmat | L | Jakarta | 12111 | 1977-03-21 | 1225000 |
| 34 | Zamzam | L | Bekasi | 17211 | 1974-08-10 | 1325000 |
| 35 | Nenny | P | Medan | 00000 | 1972-06-09 | 1425000 |
| 36 | Mardiatun | P | Bogor | 12345 | 1975-07-07 | 1625000 |
| 38 | Siti | P | Medan | 40123 | 1988-11-12 | 1825000 |
| 39 | Rohimat | L | Jakarta | 12111 | 1980-03-21 | 1925000 |
| 40 | Beno | L | Bekasi | 17211 | 1978-08-10 | 1175000 |
| 41 | Yanti | P | Jakarta | 00000 | 1981-06-09 | 1275000 |
| 42 | Miranti | P | Medan | 12345 | 1975-07-07 | 1375000 |
+------+------------+--------+------------+---------+------------+---------+
34 rows in set (0.00 sec)
Sekarang kita tampilkan karyawan dengan kota kelahiran bukan di Bandung, Jakarta dan Bekasi.
Tampilan data diurut berdasarkan nama kota. Bagaimana bentuk perintahnya?
mysql> select * from karyawan
-> where kota <> "bandung"
-> and kota <> "Jakarta"
-> and kota <> "Bekasi"
-> order by kota ;
+------+-----------+--------+------------+---------+------------+---------+
| noid | nama | jenkel | kota | kodepos | tgllahir | gaji |
+------+-----------+--------+------------+---------+------------+---------+
| 5 | Yuliawati | P | Bogor | 00000 | 1982-06-09 | 2000000 |
| 36 | Mardiatun | P | Bogor | 12345 | 1975-07-07 | 1625000 |
| 29 | Yossy | P | Bogor | 00000 | 1982-06-09 | 2225000 |
| 24 | Miranda | P | Bogor | 12345 | 1980-07-07 | 2400000 |
| 23 | Yuliawati | P | Bogor | 00000 | 1974-06-09 | 2300000 |
| 17 | Yono | P | Bogor | 00000 | 1989-06-09 | 1900000 |
| 6 | Mawar | P | Bogor | 12345 | 1985-07-07 | 2250000 |
| 11 | Yenny | P | Bogor | 00000 | 1985-06-09 | 1150000 |
| 30 | Melia | P | Malang | 12345 | 1981-07-07 | 2325000 |
| 26 | Banowati | P | Malang | 40123 | 1978-11-12 | 2350000 |
| 38 | Siti | P | Medan | 40123 | 1988-11-12 | 1825000 |
| 35 | Nenny | P | Medan | 00000 | 1972-06-09 | 1425000 |
| 42 | Miranti | P | Medan | 12345 | 1975-07-07 | 1375000 |
| 31 | Anwar | L | Purwakarta | 41011 | 1972-10-02 | 2425000 |
| 14 | Wawan | P | Semarang | 40123 | 1971-11-12 | 1600000 |
| 16 | Marpaung | L | Surabaya | 17211 | 1988-08-10 | 1800000 |
| 22 | Dadang | L | Surabaya | 17211 | 1977-08-10 | 2200000 |
| 20 | Ratu | P | Yogyakarta | 40123 | 1972-11-12 | 1950000 |
+------+-----------+--------+------------+---------+------------+---------+
18 rows in set (0.00 sec)
Hampir mirip dengan perintah di atas, tetapi selain diurut berdasarkan kota, nama karyawan pun
ikut diurut. Kita coba dengan perintah dibawah:
22
mysql> select * from karyawan
-> where kota <> "bandung"
-> and kota <> "Jakarta"
-> and kota <> "Bekasi"
-> order by kota and nama ;
+------+-----------+--------+------------+---------+------------+---------+
| noid | nama | jenkel | kota | kodepos | tgllahir | gaji |
+------+-----------+--------+------------+---------+------------+---------+
| 5 | Yuliawati | P | Bogor | 00000 | 1982-06-09 | 2000000 |
| 38 | Siti | P | Medan | 40123 | 1988-11-12 | 1825000 |
| 36 | Mardiatun | P | Bogor | 12345 | 1975-07-07 | 1625000 |
| 35 | Nenny | P | Medan | 00000 | 1972-06-09 | 1425000 |
| 31 | Anwar | L | Purwakarta | 41011 | 1972-10-02 | 2425000 |
| 30 | Melia | P | Malang | 12345 | 1981-07-07 | 2325000 |
| 29 | Yossy | P | Bogor | 00000 | 1982-06-09 | 2225000 |
| 26 | Banowati | P | Malang | 40123 | 1978-11-12 | 2350000 |
| 24 | Miranda | P | Bogor | 12345 | 1980-07-07 | 2400000 |
| 23 | Yuliawati | P | Bogor | 00000 | 1974-06-09 | 2300000 |
| 22 | Dadang | L | Surabaya | 17211 | 1977-08-10 | 2200000 |
| 20 | Ratu | P | Yogyakarta | 40123 | 1972-11-12 | 1950000 |
| 17 | Yono | P | Bogor | 00000 | 1989-06-09 | 1900000 |
| 16 | Marpaung | L | Surabaya | 17211 | 1988-08-10 | 1800000 |
| 14 | Wawan | P | Semarang | 40123 | 1971-11-12 | 1600000 |
| 11 | Yenny | P | Bogor | 00000 | 1985-06-09 | 1150000 |
| 6 | Mawar | P | Bogor | 12345 | 1985-07-07 | 2250000 |
| 42 | Miranti | P | Medan | 12345 | 1975-07-07 | 1375000 |
+------+-----------+--------+------------+---------+------------+---------+
18 rows in set (0.00 sec)
Coba perhatikan hasilnya. Apakah ini hasil yang kita inginkan? Keliatannya ada yang tidak
beres... Kita coba lagi dengan menambah tanda kurung ( dan ) pada bagian perintah "ORDER
BY", siapa tahu berhasil:
mysql> select * from karyawan
-> where kota <> "bandung"
-> and kota <> "Jakarta"
-> and kota <> "Bekasi"
-> order by (kota and nama) ;
+------+-----------+--------+------------+---------+------------+---------+
| noid | nama | jenkel | kota | kodepos | tgllahir | gaji |
+------+-----------+--------+------------+---------+------------+---------+
| 5 | Yuliawati | P | Bogor | 00000 | 1982-06-09 | 2000000 |
| 38 | Siti | P | Medan | 40123 | 1988-11-12 | 1825000 |
| 36 | Mardiatun | P | Bogor | 12345 | 1975-07-07 | 1625000 |
| 35 | Nenny | P | Medan | 00000 | 1972-06-09 | 1425000 |
| 31 | Anwar | L | Purwakarta | 41011 | 1972-10-02 | 2425000 |
| 30 | Melia | P | Malang | 12345 | 1981-07-07 | 2325000 |
| 29 | Yossy | P | Bogor | 00000 | 1982-06-09 | 2225000 |
| 26 | Banowati | P | Malang | 40123 | 1978-11-12 | 2350000 |
| 24 | Miranda | P | Bogor | 12345 | 1980-07-07 | 2400000 |
| 23 | Yuliawati | P | Bogor | 00000 | 1974-06-09 | 2300000 |
| 22 | Dadang | L | Surabaya | 17211 | 1977-08-10 | 2200000 |
| 20 | Ratu | P | Yogyakarta | 40123 | 1972-11-12 | 1950000 |
| 17 | Yono | P | Bogor | 00000 | 1989-06-09 | 1900000 |
| 16 | Marpaung | L | Surabaya | 17211 | 1988-08-10 | 1800000 |
| 14 | Wawan | P | Semarang | 40123 | 1971-11-12 | 1600000 |
| 11 | Yenny | P | Bogor | 00000 | 1985-06-09 | 1150000 |
| 6 | Mawar | P | Bogor | 12345 | 1985-07-07 | 2250000 |
| 42 | Miranti | P | Medan | 12345 | 1975-07-07 | 1375000 |
+------+-----------+--------+------------+---------+------------+---------+
18 rows in set (0.00 sec)
23
Hm, masih belum tepat juga. Kita coba lagi:
mysql> select * from karyawan
-> where kota <> "bandung"
-> and kota <> "Jakarta"
-> and kota <> "Bekasi"
-> order by kota, nama ;
+------+-----------+--------+------------+---------+------------+---------+
| noid | nama | jenkel | kota | kodepos | tgllahir | gaji |
+------+-----------+--------+------------+---------+------------+---------+
| 36 | Mardiatun | P | Bogor | 12345 | 1975-07-07 | 1625000 |
| 6 | Mawar | P | Bogor | 12345 | 1985-07-07 | 2250000 |
| 24 | Miranda | P | Bogor | 12345 | 1980-07-07 | 2400000 |
| 11 | Yenny | P | Bogor | 00000 | 1985-06-09 | 1150000 |
| 17 | Yono | P | Bogor | 00000 | 1989-06-09 | 1900000 |
| 29 | Yossy | P | Bogor | 00000 | 1982-06-09 | 2225000 |
| 5 | Yuliawati | P | Bogor | 00000 | 1982-06-09 | 2000000 |
| 23 | Yuliawati | P | Bogor | 00000 | 1974-06-09 | 2300000 |
| 26 | Banowati | P | Malang | 40123 | 1978-11-12 | 2350000 |
| 30 | Melia | P | Malang | 12345 | 1981-07-07 | 2325000 |
| 42 | Miranti | P | Medan | 12345 | 1975-07-07 | 1375000 |
| 35 | Nenny | P | Medan | 00000 | 1972-06-09 | 1425000 |
| 38 | Siti | P | Medan | 40123 | 1988-11-12 | 1825000 |
| 31 | Anwar | L | Purwakarta | 41011 | 1972-10-02 | 2425000 |
| 14 | Wawan | P | Semarang | 40123 | 1971-11-12 | 1600000 |
| 22 | Dadang | L | Surabaya | 17211 | 1977-08-10 | 2200000 |
| 16 | Marpaung | L | Surabaya | 17211 | 1988-08-10 | 1800000 |
| 20 | Ratu | P | Yogyakarta | 40123 | 1972-11-12 | 1950000 |
+------+-----------+--------+------------+---------+------------+---------+
18 rows in set (0.00 sec)
Nah, ternyata sekarang baru berhasil. Coba sekali lagi perhatikan permintaannya: "tampilkan
karyawan dengan kota kelahiran bukan di Bandung, Jakarta dan Bekasi. Tampilan data diurut
berdasarkan nama kota dan juga nama karyawan." Walaupun ada kata "dan" di sini, tetapi
tidak semata-mata kita bisa menggunakan operator logika AND. Memang diperlukan kejelian
dan coba-coba dalam permainan logika ini.
Sekarang siapa saja yang gajinya diantara Rp 1.500.000 dan Rp 2.500.000? Tampilan data
diurut berdasarkan kolom gaji dan nama karyawan
mysql> select * from karyawan
-> where gaji >= 1500000
-> and gaji <= 2500000
-> order by gaji, nama ;
+------+------------+--------+------------+---------+------------+---------+
| noid | nama | jenkel | kota | kodepos | tgllahir | gaji |
+------+------------+--------+------------+---------+------------+---------+
| 3 | Ryan Cakep | L | Jakarta | 12111 | 1981-03-21 | 1500000 |
| 14 | Wawan | P | Semarang | 40123 | 1971-11-12 | 1600000 |
| 36 | Mardiatun | P | Bogor | 12345 | 1975-07-07 | 1625000 |
| 18 | Dian | P | Jakarta | 12345 | 1980-07-07 | 1650000 |
| 15 | The Cute | L | Jakarta | 12111 | 1977-03-21 | 1700000 |
| 37 | Andika | L | Bandung | 41011 | 1978-10-02 | 1725000 |
| 4 | Zukarman | L | Bekasi | 17211 | 1978-08-10 | 1750000 |
24
| 16 | Marpaung | L | Surabaya | 17211 | 1988-08-10 | 1800000 |
| 38 | Siti | P | Medan | 40123 | 1988-11-12 | 1825000 |
| 19 | Donno | L | Bandung | 41011 | 1971-10-02 | 1850000 |
| 17 | Yono | P | Bogor | 00000 | 1989-06-09 | 1900000 |
| 39 | Rohimat | L | Jakarta | 12111 | 1980-03-21 | 1925000 |
| 20 | Ratu | P | Yogyakarta | 40123 | 1972-11-12 | 1950000 |
| 5 | Yuliawati | P | Bogor | 00000 | 1982-06-09 | 2000000 |
| 21 | Bambang | L | Jakarta | 12111 | 1982-03-21 | 2100000 |
| 28 | Gunadi | L | Bekasi | 17211 | 1978-08-10 | 2125000 |
| 25 | Subur | L | Bandung | 41011 | 1977-10-02 | 2150000 |
| 22 | Dadang | L | Surabaya | 17211 | 1977-08-10 | 2200000 |
| 29 | Yossy | P | Bogor | 00000 | 1982-06-09 | 2225000 |
| 6 | Mawar | P | Bogor | 12345 | 1985-07-07 | 2250000 |
| 23 | Yuliawati | P | Bogor | 00000 | 1974-06-09 | 2300000 |
| 30 | Melia | P | Malang | 12345 | 1981-07-07 | 2325000 |
| 26 | Banowati | P | Malang | 40123 | 1978-11-12 | 2350000 |
| 24 | Miranda | P | Bogor | 12345 | 1980-07-07 | 2400000 |
| 31 | Anwar | L | Purwakarta | 41011 | 1972-10-02 | 2425000 |
| 27 | Gungun | L | Jakarta | 12111 | 1981-03-21 | 2450000 |
+------+------------+--------+------------+---------+------------+---------+
26 rows in set (0.00 sec)
25
| 1000000 |
+-----------+
1 row in set (0.00 sec)
Operator Precedence
Semakin keatas posisi operator, maka semakin tinggi tingkat hirarki operator tersebut. Begitu
pula sebaliknya, semakin rendah posisinya maka akan semakin lemah hirarkinya.
Untuk operator yang sama kuat, misal + dan - digabung dengan operator * / %, maka akan
ditentukan hirarkinya tergantung dari posisi mana yang paling kiri/paling awal ditemukan. Dan
untungnya posisi hirarki ini dapat diubah dengan bantuan tanda kurung "(" dan ")". Sekarang
kita lihat penerapannya.
mysql> select 10+15-11*2, (10+15-11)*2,
-> 2*6-5, 2*(6-5) ;
+------------+--------------+-------+---------+
| 10+15-11*2 | (10+15-11)*2 | 2*6-5 | 2*(6-5) |
+------------+--------------+-------+---------+
| 3 | 28 | 7 | 2 |
+------------+--------------+-------+---------+
1 row in set (0.00 sec)
26
Anda bisa perhatikan bahwa walaupun angka dan operatornya sama, tapi hasilnya bisa berbeda.
Dan itu karena adanya peranan dari tanda kurung "(" dan ")" yang akan mengubah peta posisi
hirarki operator....
Operator LIKE, NOT LIKE, REGEXP akan banyak kita gunakan terutama dalam operasi
karakter.
Sekarang kita kan coba menggunakan operator LIKE. Operator LIKE ini digunakan untuk
mencari data yang "menyerupai" atau "hampir sama" dengan kriteria tertentu. Biasanya untuk
mencari data string/teks. Simbol "%" digunakan untuk membantu pelaksanaan operator LIKE.
Posisi "%" sangat berpengaruh dalam menentukan kriteria. Kita langsung dengan contoh-
contohnya saja ya biar lebih jelas penggunaannya...
Tampilkan data karyawan yang namanya berawalan huruf "a": (perhatikan posisi simbol
persennya "%")
mysql> select noid, nama
-> from karyawan
-> where nama LIKE "a%" ;
+------+--------------+
| noid | nama |
+------+--------------+
| 1 | Ahmad Sobari |
| 31 | Anwar |
| 37 | Andika |
+------+--------------+
3 rows in set (0.00 sec)
Tampilkan data karyawan yang namanya berakhiran huruf "i". Perhatikan posisi penulisan
tanda "%".:
mysql> select noid, nama
-> from karyawan
-> where nama LIKE "%i" ;
+------+--------------+
| noid | nama |
+------+--------------+
| 1 | Ahmad Sobari |
27
| 2 | Sundariwati |
| 5 | Yuliawati |
| 7 | Sobari |
| 23 | Yuliawati |
| 26 | Banowati |
| 28 | Gunadi |
| 32 | Susilowati |
| 38 | Siti |
| 41 | Yanti |
| 42 | Miranti |
+------+--------------+
11 rows in set (0.00 sec)
Bagaimana caranya agar operator LIKE dapat membedakan huruf besar dan kecil... Sederhana
saja, cukup dengan menambahkan kata BINARY saja setelah perintah LIKE (sehingga
perintahnya menjadi LIKE BINARY). Kita lihat contohnya...
mysql> select noid, nama
-> from karyawan
-> where nama LIKE BINARY "a%" ;
Empty set (0.34 sec)
Kenapa hasilnya menjadi "Empty set"? Kita coba dengan mengubah perintah tadi menjadi:
mysql> select noid, nama
-> from karyawan
-> where nama LIKE BINARY "A%" ;
+------+--------------+
| noid | nama |
+------+--------------+
| 1 | Ahmad Sobari |
| 31 | Anwar |
| 37 | Andika |
+------+--------------+
3 rows in set (0.00 sec)
Ya dengan menggunakan LIKE BINARY, penulisan huruf "a" akan dibedakan artinya dengan
"A". Jelas kan?
Sekarang bagaimana kalau kita ingin menampilkan data, dengan kriteria bukan diawal atau
diakhir kalimat, tapi berada diantara sebuah kata/kalimat? Misal ada berapa nama karyawan
yang memiliki kata "lia"?
28
mysql> select noid, nama
-> from karyawan
-> where nama LIKE BINARY "%lia%" ;
+------+-----------+
| noid | nama |
+------+-----------+
| 5 | Yuliawati |
| 8 | Melia |
| 23 | Yuliawati |
| 30 | Melia |
+------+-----------+
4 rows in set (0.00 sec)
Operator REGEXP (singkatan dari REGular EXPressions) merupakan bentuk lain dari
operator LIKE, dengan fungsi yang lebih disempurnakan. Operator REGEXP biasanya ditemani
juga dengan simbol-simbol tertentu dalam melaksanakan tugasnya, seperti:
Simbol Keterangan
Satu tanda titik (.) untuk mewakili satu
.
karakter
Untuk mewakili beberapa karakter atau
[?]
range yang ditentukan.
Untuk posisi awal dari sebuah kriteria
^
yang ditentukan
Untuk posisi akhir dari sebuah kriteria
$
yang ditentukan
Kita langsung saja pada contohnya. Tampilkan nama karyawan yang berawalan huruf 'a':
mysql> select noid, nama
-> from karyawan
-> where nama REGEXP "^a" ;
+------+--------------+
| noid | nama |
+------+--------------+
| 1 | Ahmad Sobari |
| 31 | Anwar |
| 37 | Andika |
+------+--------------+
3 rows in set (0.00 sec)
29
mysql> select noid, nama
-> from karyawan
-> where nama REGEXP "^d" ;
+------+--------+
| noid | nama |
+------+--------+
| 13 | Dadan |
| 18 | Dian |
| 19 | Donno |
| 22 | Dadang |
+------+--------+
4 rows in set (0.00 sec)
Tampilkan nama karyawan yang berawalan huruf 'a' sampai dengan huruf 'd':
mysql> select noid, nama
-> from karyawan
-> where nama REGEXP "^[a-d]"
-> order by nama ;
+------+--------------+
| noid | nama |
+------+--------------+
| 1 | Ahmad Sobari |
| 37 | Andika |
| 31 | Anwar |
| 21 | Bambang |
| 26 | Banowati |
| 40 | Beno |
| 13 | Dadan |
| 22 | Dadang |
| 18 | Dian |
| 19 | Donno |
+------+--------------+
10 rows in set (0.00 sec)
30
mysql> select noid, nama
-> from karyawan
-> where nama REGEXP "wati$"
-> order by nama ;
+------+-------------+
| noid | nama |
+------+-------------+
| 26 | Banowati |
| 2 | Sundariwati |
| 32 | Susilowati |
| 5 | Yuliawati |
| 23 | Yuliawati |
+------+-------------+
5 rows in set (0.00 sec)
Nah, kurang lebih itulah dasar-dasar MySQL. Ini baru tutorial perkenalan.
31