Manajemen Database Dengan MySQL
Manajemen Database Dengan MySQL
Ternyata banyak juga yang mengirim email kepada penulis menanyakan tentang tutorial
MySQL ini. Mohon maaf kalo baru saat ini saya bisa 'mencicil' menuliskan tutorial MySQL. Dari
email-email yang masuk, rata-rata menanyakan apa sih keunggulan MySQL dibanding dengan
database yang lain, dan ada juga yang berencana migrasi dari database yang lain ke MySQL.
Tentu saja, keunggulan MySQL bukan bahasan dari tutorial ini. Masalah-masalah seperti itu,
ada baiknya dilirik di situs-situs Internet lainnya. Atau bisa juga langsung ke situs MySQL
(http://www.mysql.com). Nah, sekarang kita mulai saja tutorial kita ini yach...
Apa Itu MySQL?
MySQL (bisa dibaca dengan mai-es-ki-el atau bisa juga mai-se-kuel, terserah anda) adalah
suatu perangkat lunak database relasi (bahasa kerennya Relational Database Management
System atau RDBMS), seperti halnya ORACLE, Postgresql, ASP, dsb. Jangan disalah-artikan
dengan SQL. SQL (singkatan dari Structured Query Language) sendiri didefinisikan sebagai
suatu sintaks perintah-perintah tertentu atau bahasa (program?) yang digunakan untuk
mengelola suatu database. Jadi, MySQL dan SQL adalah dua 'mahluk' yang berbeda.
Mudahnya, MySQL adalah softwarenya, dan SQL adalah bahasa perintahnya. Jelas kan?
Sejarah MySQL dan SQL
Wah.. yang ini mah silakan diklik aja disini. Dibahas lengkap di situs MySQL.COM
MySQL platform OS-nya apa?
Awalnya MySQL dijalankan pada sistem operasi Unix dan Linux. Tapi, bagi para penggemar
Windows pun sekarang sudah tersedia MySQL versi Windowsnya. Mereka yang
menggunakan Linux (RedHat, Mandrake, dsb), biasanya MySQL sudah terinstall secara
default. Bila belum bisa diinstall maka dengan cukup mudah dapat menginstalnya
menggunakan RPM (Redhat Package Manager, merupakan prosedur instalasi software yang
menjadi standar de facto untuk Linux, walaupun anda tidak menggunakan Linux redhat). Cara
instalasi ini akan dibahas pada artikel tutorial selanjutnya.
Nah, bagi mereka yang menggunakan OS Windows, tidak usah berkecil hati, karena sudah
ada paket software yang merangkum MySQL, Apache webserver dan PHP yang sangat
mudah untuk diinstall. Software tersebut namanya PHPTriad (phptriad2-2-1.exe,ukuran file 13
MB). Berhubung keterbatasan ruang dan kecepatan, saya tidak menyediakan software
tersebut disini. Tapi, anda bisa mendapatkannya pada CD yang disertakan pada majalah
Master Web edisi November 2001, terbitan Jakarta dengan judul laporan utama tentang
"PHP" (http://www.mwmag.com). Pada hal 32 majalah tersebut anda akan mendapatkan
panduan instalasi paket PHPTriad.
Anda dapat juga memperoleh software PHPTriad, MySQL pada majalah Neotek, No.III - 03,
bulan Desember 2002 yang dilengkapi CD.
Bila sulit untuk mendapatkan majalah tsb, karena terbit setahun yang lalu, anda bisa juga
mencoba untuk men-download-nya di situs Download.Com (http://www.download.com).
Gunakan fasilitas pencarian (search) yang ada di situs tersebut. Happy download!
Bila anda sudah melakukan instalasi MySQL dan Apache dengan benar, silakan lanjutkan
tutorial ini. Kalo belum, coba periksa kembali tahapan instalasi atau install ulang aja dech...
Bagaimana, kita lanjutkan..??
Catatan:
Untuk tutorial ini saya menggunakan paket PHPTriad 2.2, dengan sistem operasi Windows
XP. Saya pernah juga menjalankan PHPTriad in pada OS Windows ME, Windows 98SE dan
semuanya berjalan dengan baik. Bagi mereka yang menggunakan Linux, tidak usah khawatir.
Perbedaan tampilan sangat sedikit diantara kedua OS tersebut. Sedangkan hasil dari perintah-
perintah MySQLnya adalah sama saja.
Menjalankan SQL Pertama Kali
Paket PHPTriad biasanya di instal pada direktori/folder C:\Apache. Karena PHPTriad
merupakan kumpulan paket dari Apache (versi 1.3.23), MySQL (versi 3.23.48) dan PHP
(versi 4.1.1) dan masing-masing software tersimpan pada direktori khusus. Untuk MySQL ada
pada direktori C:\apahe\mysql. Sedangkan untuk file-file eksekusinya ada di direktori
C:\apache\mysql\bin.
Pada sistem prompt masuklah ke direktori mysql\bin
C:\>CD apache\mysql\bin <Enter>
Jalankan dahulu program MySQL server (pada saat ini komputer kita bertindak seolah-olah
sebagai sebuah server).
C:\apache\mysql\bin>mysqld --console <enter>
Bila perintah ini berjalan dengan baik,maka pada layar akan ditampilkan pesan:
mysqld: ready for connections
Perhatikan pada 'connections' dengan bentuk jamak, dengan demikian komputer kita tersebut
telah menjalankan fungsinya sebagai mysql server dan dapat melayani lebih dari satu
koneksi.
Jangan tutup jendela layar tersebut! Jika anda menutup jendela tersebut, maka program
MySQL server akan dihentikan juga oleh sistem. Kemudian, bukalah sebuah jendela system
prompt (atau DOS prompt) yang baru. Dan masuklah ke direktori c:\apache\mysql\bin
C:\>cd apache\mysq\bin <enter>
C:\apache\mysql\bin>
Kemudian jalankan program mysql client dengan mengetikkan mysql pada sistem prompt.
c:\apache\mysql\bin\> mysql <enter>
Bila perintah tersebut berhasil, maka pada layar akan tampil ucapan selamat datang dari
mysql:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is xx to server version: 3.23.47-nt.
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>_
SELAMAT! Berarti anda sekarang sudah berhasil menjalankan mysql dan berhasil masuk
kedalam sistem mysql. Pesan tersebut berisi ucapan selamat datang, pemberitahuan tentang
penulisan perintah MySQL yang SELALU diakhiri dengan simbol ; Versi MySQL yang kita
gunakan (3.23.47-nt), dan connection id yang berupa nomor urut kita masuk ke server.
OK, sementara kita ambil nafas dulu yach... Kita lanjut besok pagi lagi. OK?!
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>_
Pada MySQL prompt ketikkan sbb:
mysql>SHOW DATABASES ;
+-----------+
| Database |
|-----------|
| mysql |
| test |
+-----------+
2 rows in set (0.00 sec)
Perintah diatas menampilkan database apa saja yang sudah ada sejak MySQL
pertama kali diinstal. Disini ada 2 database, yaitu database mysql dan test.
Database mysql berisi data-data tentang user, password, nama host, dsb
(nanti kita lihat isinya yach..sabar..). Dan database test merupakan database
untuk latihan bagi siapa saja yang mau. Kalau tidak diperlukan, kita bisa hapus
database test ini.
Sekarang kita lihat apa saja isi dari database mysql tersebut.
Aktifkan database mysql:
mysql>USE mysql ;
Database changed
Kita sudah mengaktifkan database mysql dan sistem memberi respon dengan
pesan 'Database changed'.
Tampilkan isi database mysql:
mysql>SHOW TABLES ;
+--------------------+
| Tables_in_mysql |
+--------------------+
| columns_priv |
| db |
| func |
| host |
| tables_priv |
| user |
+--------------------+
6 rows in set (0.00 sec)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>_
Ah...selamat kita. Ternyata sudah bisa masuk nih. Lega rasanya. Sekarang semuanya sudah
jelaskan? Tidak ada lagi seorang pun yang tidak terdaftar dapat nyelonong ke sistem kita.
Sekarang, kita coffee break dulu yach...:) Nanti, saya akan jelaskan soal apa sih maksudnya
'localhost', apa sih maksudnya tanda '%'... Tapi itu nanti yach...
Localhost atau %?
Masih ingat dengan penggunaan localhost dan %? Tidak? Wah.. kita lihat lagi deh:
mysql> SELECT user, host, password FROM user ;
+------+-----------+--------------+
| user | host | password |
+------+-----------+--------------+
| root | localhost | xxxxxxxxxxx |
| root | % | xxxxxxxxxxx |
+------+-----------+--------------+
2 rows in set (0.00 sec)
Nah, tampilan diatas adalah isi dari tabel user. Kita cuma punya satu user saat ini, yaitu root
(yang tidak lain adalah anda sendiri...:)). Passwordnya..ada tuch (tapi diacak). Host, bisa
diartikan nama server dimana kita mengakses MySQL. Isi host ada dua, yaitu localhost dan
%. Kita telaah satu per satu yach...
Localhost berarti tempat dimana program MySQL server berada. Kalau anda menyimpan
program-program MySQL di komputer anda saat ini dan anda langsung mengaksesnya dari
sana, itu berarti komputer anda adalah localhost.
Tanda % itu maksudnya anda melakukan pengaksesan MySQL dari mana saja (tidak selalu
dari localhost). Misalkan, anda sering bepergian ke luar negeri,sedangkan anda harus rutin
untuk mengakses server MySQL tersebut, maka anda harus diberikan tanda % pada nama
hostnya.
Konsep persen (%) ini agak membingungkan pada awalnya. Karena, sebenarnya kita bisa saja
mengakses server MySQL kita dengan program TELNET yang berarti seolah-olah langsung
mengakses server dari tempat kita duduk, berarti konsepnya akan sama dengan localhost.
Bagaimana cara kita untuk membuat user baru, dan menentukan lokasi dimana dia bisa
mengakses akan kita bahas pada bab-bab berikutnya: Manajemen User pada MySQL. Untuk
selanjutnya, yang akan kita bahas adalah: Perintah-perintah Dasar MySQL. Setuju?!
Contoh:
mysql latih1db -u arbie -h localhost -p <enter>
Enter password:
Hal diatas kalau anda sudah memiliki sebuah database dengan nama latih1db. Bila anda memang
mengakses komputer yang berada satu tempat dengan server MySQL, kata 'localhost' bisa dihilangkan
menjadi:
mysql -u arbie -p <enter>
Enter password:
Bila anda sebagai root pada komputer tersebut, maka nama 'root' juga bisa dihilangkan menjadi:
mysql -p <enter>
Enter password:
Tetapi, anda jangan sekali-kali mengetikkan kata sandi langsung setelah perintah -p, seperti:
mysql -pkata_sandi <enter>
Ini SANGAT berbahaya sekali! Kemungkinannya sangat besar bagi orang lain untuk 'mencuri pandang'
pada password yang diketikkan tersebut. Terutama bagi mereka yang menggunakan Unix/Linux, perintah
ps dapat dilakukan oleh siapa saja yang bisa menghasilkan/memonitoring proses apa yang sedang
dilakukan oleh user lain. Jadi, tetaplah pada bentuk yang lebih aman, yaitu:
mysql nama_database -u nama_user -h nama_host -p <enter>
Catatan (terutama bagi non-windows):
Bagaimana kalau program mysql server berada pada komputer yang berbeda dengan komputer kita
mengaksesnya? Sebenarnya sederhana saja, ganti saja kata localhost dengan nama server atau alamat
server dimana mysql tersebut berada.
Contoh:
mysql latih1db -u arbie -h 202.155.10.10 -p <enter>
Enter password:
Perintah Quit atau Exit merupakan perintah yang tidak perlu diakhiri tanda ; sebagai akhiran perintah.
Contoh:
mysql>quit
atau
mysql>exit
Memilih Database
Bentuk Umum
USE nama_database
Contoh:
mysql>USE test ;
mysql>USE mysql ;
Atau dengan cara lain, anda bisa langsung mengaktifkan database mulai dari saat anda login ke MySQL, dengan
cara:
mysql test -u nama_user -h localhost -p <enter>
mysql mysql -u nama_user -h localhost -p <enter>
Dengan perintah diatas, begitu anda masuk ke mysql maka akan langsung memilih dan mengaktifkan database test
atau database mysql.
Melihat Isi Database
Bentuk Umum
SHOW TABLES ;
Bila di dalam database tersebut telah berisi tabel, maka nama-nama tabel akan ditampilkan di layar. Tapi,
bila databasenya masih kosong, maka sistem akan menampilkan pesan:
Empty set (0.01 sec)
Melihat Struktur Table
Bentuk Umum
SHOW COLUMNS FROM nama_tabel ;
atau
DESCRIBE nama_tabel ;
Contoh:
mysql>SHOW COLUMNS FROM user;
mysql>SHOW COLUMNS FROM db ;
atau
mysql>DESCRIBE user ;
mysql>DESCRIBE db ;
Bagaimana? Mau istirahat dulu atau kita lanjutkan pada membuat database baru, membuat tabel baru,
dsb? Kalau mau melanjutkan... ya mari kita lanjutkan....
Manajemen Database Dengan MySQL, Sesi 7
Ditulis oleh arbie
Contoh:
mysql>CREATE DATABASE latih1db ;
mysql>CREATE DATABASE karyawandb ;
mysql>CREATE DATABASE personalia ;
Menghapus Database
Bentuk Umum
DROP DATABASE nama_database ;
Menghapus dalam MySQL diberi nama 'DROP'. Hati-hati dengan perintah ini, karena sistem MySQL
tidak akan memberi peringatan atau konfirmasi dahulu kepada kita untuk melanjutkan proses atau
membatalkan proses. Begitu perintah ini dilaksanakan, seluruh isi database (semua tabel-tabel yang ada
didalam dan semua recordnya) akan dihapus dan tidak bisa dibatalkan. Menghilang tertelan bumi!
Contoh:
mysql>DROP DATABASE latih1db ;
mysql>DROP DATABASE karyawandb ;
mysql>DROP DATABASE personalia ;
Membuat Tabel Baru
Bentuk Umum
CREATE TABLE nama_tabel (nama_kolom1 spek_kolom1, ..., nama_kolom_berikutnya
spek_kolom_berikutnya) ;
Sebelumnya, kita ulangi pembuatan database baru dan kita beri nama personaliadb. Setelah database
baru tersebut ada, kita aktifkan dengan perintah use.
Contoh:
mysql>CREATE DATABASE personaliadb ;
Query OK, 1 row affected (0.02 sec)
Kalau anda mau memeriksa ada tidaknya database personaliadb, silakan periksa dengan perintah
SHOW DATABASES. Masih ingat kan caranya? Kalau lupa, silakan intip dech disini.
mysql>USE personaliadb ;
Database changed
Baru sekarang kita coba bikin sebuah tabel yang kita beri nama tabel karyawan.
mysql>CREATE TABLE karyawan ;
ERROR 1113: A table must have at least 1 column.
Kenapa error? Ya, karena untuk membuat sebuah tabel kita harus mempunyai minimal 1 kolom (atau 1
field) saja. Kita coba lagi sebagai berikut:
mysql>CREATE TABLE karyawan
-> (noid INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
-> nama VARCHAR(35) NOT NULL)
-> ;
Query OK, 0 rows affected (0.01 sec)
Agak menakutkan perintahnya? Jangan gentar dulu. Ini baru membuat sebuah tabel yang sangat
sederhana, terdiri dari dua kolom (field) noid dan nama. Kita akan bahas sepintas tentang perintahnya
sebagai berikut:
Kolom noid, merupakan nomor identitas karyawan, yang bersifat INT (bilangan integer atau bilangan
bulat), UNSIGNED maksudnya selalu bernilai positif (tidak ada tanda - atau negatif), AUTO_INCREMENT
berarti nilai selanjutnya merupakan nilai sebelumnya ditambah nilai satu, PRIMARY KEY berarti kolom
noid merupakan kolom indeks. Dalam satu tabel hanya boleh ada satu PRIMARY KEY.
Kemudian pada kolom nama, diberi lebar sebanyak 35 karakter (bisa menampung nama sepanjang
maksimum 35 karakter, kurang dari 35 karakter juga OK-OK aja), Pembahasan lebih detail mengenai hal
diatas akan kita bahas di bagian Konsep Database. Jangan takut, semuanya bisa dan mudah dipelajari
kok...:).
Untuk meyakinkan bahwa tabel karyawan sudah berhasil kita buat, silakan diperiksa dengan perintah
dibawah ini:
mysql>SHOW TABLES ;
+---------------------------+
| Tables_in_personaliadb |
+---------------------------+
| karyawan |
+---------------------------+
1 row in set (0.00 sec)
Melihat Struktur Table
Bentuk Umum
SHOW COLUMNS FROM nama_tabel ;
atau
DESCRIBE nama_tabel ;
Contoh:
mysql>DESCRIBE karyawan ;
atau
mysql>SHOW COLUMNS FROM karyawan ;
Hasilnya akan sama saja:
+------+-----------------+-----+-----+---------+-----------------+
|Field | Type |Null | Key | Default |Extra |
+------+-----------------+-----+-----+---------+-----------------+
|noid |int(10) unsigned | | PRI | NULL | auto_increment |
|nama |varchar(35) | | | | |
+------+-----------------+-----+-----+---------+-----------------+
2 rows in set (0.02 sec)
Menghapus Tabel
Bentuk Umum
DROP TABLES nama_tabel ;
Untuk menghapus tabel, bentuk perintahnya mirip dengan menghapus database. Kehati-hatian (extra)
pun sangat diperlukan disini. Karena sistem MySQL tidak akan menanyakan konfirmasi ulang kepada
anda untuk menghapus maupun membatalkan penghapusan tabel. Tabel beserta dengan seluruh isinya
akan dihapus tanpa bisa dibatalkan (undelete atau undo kalau di Windows).
Sebagai contoh kita buat dulu tabel lain, namakan saja tabel contoh1:
mysql> CREATE TABLE contoh1
-> (noid INT )
-> ;
Query OK, 0 rows affected (0.00 sec)
Kemudian kita hapus:
mysql> DROP TABLE contoh1 ;
Query OK, 0 rows affected (0.00 sec)
Kita periksa lagi:
mysql> SHOW TABLES ;
Empty set (0.01 sec)
Ah... topik hari ini kita cukupkan sekian dulu yach... Selanjutnya, akan kita bahas cara pengisian tabel
dengan data-data, pengeditan record, dan sebagainya...
Manajemen Database Dengan MySQL, Sesi 8
Ditulis oleh arbie
Contoh:
mysql> INSERT INTO karyawan
-> (nama, kelamin, kota, tgllahir)
-> VALUES ("Ahmad Subari","L","Bandung","1977-01-01")
-> ;
Query OK, 1 row affected (0.03 sec)
Jangan lupa kita periksa. Eh... tapi perintah untuk menampilkan data di tabel apa yach?
Menampilkan Data
Bentuk Umum
SELECT nama_kolom1, nama_kolom2, ... FROM nama_tabel
WHERE kriteria SORT BY kriteria
Contoh:
mysql> SELECT noid, nama, kelamin, kota, tgllahir
-> FROM karyawan
-> ;
+------+--------------+---------+---------+------------+
| noid | nama | kelamin | kota | tgllahir |
+------+--------------+---------+---------+------------+
| 1 | Ahmad Subari | L | Bandung | 1977-01-01 |
+------+--------------+---------+---------+------------+
1 row in set (0.01 sec)
Perintah untuk menampilkan seluruh kolom dapat juga diberikan dengan simbol * (asterik
atau bintang), sehingga perintah diatas dapat juga kita tuliskan:
mysql> SELECT * FROM karyawan ;
+------+--------------+---------+---------+------------+
| noid | nama | kelamin | kota | tgllahir |
+------+--------------+---------+---------+------------+
| 1 | Ahmad Subari | L | Bandung | 1977-01-01 |
+------+--------------+---------+---------+------------+
1 row in set (0.01 sec)
Pengisian data diatas baru menggunakan bentuk pertama, bentuk lainnya kita coba sama-
sama yach...
Mengisi Data Baru (bentuk lainnya)
Bentuk Umum 2
INSERT INTO nama_tabel SET nama_kolom1 = data_kolom1,
nama_kolom2 = data_kolom2, ..
Contoh:
mysql> INSERT INTO karyawan
-> SET nama= "Rini Suwandito",
-> kelamin= "P",
-> kota= "Jakarta",
-> tgllahir ="1978-01-02",
-> ;
Query OK, 1 row affected (0.03 sec)
Dibanding dengan cara pertama, maka cara kedua ini lebih jelas posisi data akan
diletakkan pada kolom (field) mana saja. Hanya saja, bila jumlah data yang akan kita
masukkan banyak, maka dengan cara kedua ini sangat merepotkan sekali..(paling
tidak akan membuat otot-otot jari anda membesar...hehe). Baiklah, sekarang kita lihat
hasil dari peritah kedua ini..
mysql> SELECT * FROM karyawan ;
+------+----------------+---------+---------+------------+
| noid | nama | kelamin | kota | tgllahir |
+------+----------------+---------+---------+------------+
| 1 | Ahmad Subari | L | Bandung | 1977-01-01 |
| 2 | Rini Suwandito | P | Jakarta | 1978-01-02 |
+------+----------------+---------+---------+------------+
2 row in set (0.01 sec)
Ya, semua data sudah masuk ke dalam database. Sekarang kita coba pemasukkan
data dengan cara Ketiga.
Bentuk Umum 3
INSERT INTO nama_tabel VALUES
(data1, data2, ..., data_ke_n)
Contoh:
mysql> INSERT INTO karyawan
-> VALUES ("Boy Sungkar","L","Cimahi","1979-03-01")
-> ;
ERROR 1136: Column count doesn't match value count at row
1
Lho, kok error? Kenapa nich? Perhatikan pada pesan error yang terjadi. Disana
dinyatakan bahwa jumlah kolom tidak sesuai dengan jumlah masukan data yang ada.
OK..OK.. pelan-pelan yach...
Kita ingat kalo jumlah kolom ada 5, yaitu noid, nama, kelamin, kota dan tgllahir.
Sedangkan data yang kita masukkan untuk 4 kolom saja, yaitu nama, kelamin, kota
dan tgllahir. Jadi, gimana duonk dengan nasibnya kolom noid? Masa dicuekin aja
sich? Itu sebabnya jadi error... Walaupun kolom noid ini sifatnya AUTO_INCREMENT,
khusus untuk bentuk ketiga ini dia harus diisi juga dengan nilai DEFAULTNYA yaitu
"NULL". Sehingga perintah diatas kita ubah sedikit menjadi...
Jenis pengubahan yang dapat dilakukan antara lain penambahan kolom (ADD), penghapusan kolom dan
indeks (DROP), penggantian nama kolom sekaligus jenis kolomnya (RENAME), dan pengubahan jenis
kolom (MODIFY). Nanti kita jelaskan secara rinci yach...
Menggunakan Perintah MySQL dalam file teks untuk membuat tabel dan isinya.
Dari sesi sebelumnya, kita sudah melakukan pengisian data dengan menggunakan file teks yang berisi
perintah-perintah untuk mengisi data masl. Kalo diperhatikan, semua perintah-perintah tersebut dapat
juga kita gunakan untuk membuat tabel dan sekaligus mengisi tabel tersebut. Nah, sekarang perintah-
perintah apa saja yang akan kita gunakan?
Urutan langkah-langkahnya dapat diuraikan sebagai berikut:
Pertama, kita periksa dahulu apakah tabel karyawan2 sudah ada atau belum di dalam database
personaliadb. Kalau sudah ada, maka tabel karyawan kita hapus dulu (ini sengaja, karena struktur tabel
karyawan yang kita gunakan sekarang lebih komplit dari versi sebelumnya). Perintah yang digunakan
adalah:
DROP TABLE IF EXISTS karyawan2;
Kedua, kita buat tabel karyawan yang baru dengan perintah:
CREATE TABLE karyawan2
(
noid INT(4) UNSIGNED NOT NULL PRIMARY KEY,
nama VARCHAR(50) NOT NULL,
kelamin ENUM("L","P") NOT NULL,
tempatlahir VARCHAR(35),
tgllahir DATE NOT NULL DEFAULT "0000-00-00",
alamat1 VARCHAR(35),
alamat2 VARCHAR(35),
kota VARCHAR(35),
kodepos CHAR(5),
telprmh VARCHAR(20),
ponsel VARCHAR(20)
);
Ketiga, baru kita isikan data-datanya antara lain dengan perintah:
INSERT INTO karyawan2
(noid, nama, kelamin, tempatlahir, tgllahir, alamat1, alamat2,
kota, kodepos, telprumah, ponsel)
VALUES
("NULL","Suwanto Dipura","L","Majalengka","03-02-1967",
"Jl. Madangkara No.11","RT.01 RW.01","Jakarta","12121",
"021-999999","NULL"),
("NULL","Mayangsariwati","P","Bogor","01-06-1977",
"Jl. Rawasari 12","RT 03 RW 02","Bandung","40256",
"022-0099909","0814-000100"), dst....
Secara lengkapnya, semua perintah-perintah tersebut saya simpan dalam file teks dengan nama
buatdanisitabel.sql. Silakan di download saja di sini....(thanks to me... hehehe)
Keempat, kita jalankan file buatdanisitabel.sql tersebut dengan perintah....
[SYSTEM PROMPT]mysql -h localhost -u root -p personaliadb <
buatdanisitabel.sql
Enter Password: **********
Kelima, jangan lupa untuk memeriksa (selalu) hasil kerjaan kita barusan....
mysql>SELECT * FROM karyawan2 ;
Keenam, kita lanjutkan nanti yach..... (mo lunch dulu nich....:))
Manajemen Database Dengan MySQL, Sesi 14
Ditulis oleh arbie
Selamat pagi...:) Bagaimana dengan liburan akhir pekannya? Berkesan kan? OK... di Senin pagi ini kita
akan lanjutkan tutorial kita. Masih dengan topik menampilkan data dengan perintah SELECT, tapi dengan
dengan variasi yang berbeda...
Operator Pembanding dan Operator Logika
Didalam MySQL ada operator pembanding yang sering digunakan seperti:
Operator Pembanding Keterangan
> Lebih besar
< Lebih kecil
>= Lebih besar atau sama dengan
<= Lebih kecil atau sama dengan
= Sama dengan
<> Tidak sama dengan
Pada sesi kita yang ke-14, sudah dibahas mengenai menampilkan data dengan pengurutan
(pengurutan? pijet maksudnya?)... Wah gak enak nih kalimatnya.. hehehe. Maksudnya, dengan urutan
dari A-Z (atau istilah kerennya Ascending). Masih ingat kan perintah: "Select * From karyawan2 Order
By Nama"? Pertanyaannya, bagaimana kalo kita menginginkan dengan urutan dari Z-A (ato istilah
kerennya Descending)?
Kita ulangi perintah di atas dech biar ingat lagi...
mysql>SELECT noid, nama, kelamin, tempatlahir
->FROM karyawan2
->ORDER BY nama ;
+------+---------------------+---------+----------------+
| noid | nama | kelamin | tempatlahir |
+------+---------------------+---------+----------------+
| 11 | Achmad Widjaja | L | Jakarta |
| 17 | Ahmaddin Sudin | L | Banda Aceh |
| 7 | Charlie Simanjuntak | L | Medan |
| 13 | Dadang Sukandar | L | Cianjur |
| 24 | Deemas Sudirman | L | Batam |
| 12 | Delima Rahayu | P | Demak |
| 8 | Desi Sukmini | P | Jakarta |
| 23 | Jumanto Dipuro | L | Tegal |
| 22 | Magda Magdalena | P | Bandar Lampung |
| 2 | Mayangsariwati | P | Bogor |
| 16 | Noeri Sakti | P | Jakarta |
| 3 | Purwanto Rojolele | L | Yogyakarta |
| 10 | Ratih Sanggar | P | Solo |
| 6 | Ratna Sari | P | Cianjur |
| 21 | Rendi Ganteng | L | Bogor |
| 4 | Rita Sariwati | P | Cibinong |
| 5 | Suseno Mangun | L | Ciamis |
| 1 | Suwanto Dipura | L | Majalengka |
| 9 | Thomas Eng | L | Hongkong |
| 19 | Wanto Sukarno | L | Surabaya |
| 18 | Wati Sutinah | P | Mojokerto |
| 20 | Wawan Wanisar | L | Bogor |
| 14 | Winda Sukma | P | Yogyakarta |
| 15 | Zaenal Nur | L | Denpasar |
| 25 | Zulailah Zulha | P | Demak |
+------+---------------------+---------+----------------+
25 rows in set (0.01 sec)
Sekarang kita akan terapkan dengan cara yang sedikit berbeda. Perhatikan bentuk perintahnya yach...
mysql>SELECT noid, nama, kelamin, tempatlahir
->FROM karyawan2
->ORDER BY nama DESC ;
+------+---------------------+---------+----------------+
| noid | nama | kelamin | tempatlahir |
+------+---------------------+---------+----------------+
| 25 | Zulailah Zulha | P | Demak |
| 15 | Zaenal Nur | L | Denpasar |
| 14 | Winda Sukma | P | Yogyakarta |
| 20 | Wawan Wanisar | L | Bogor |
| 18 | Wati Sutinah | P | Mojokerto |
| 19 | Wanto Sukarno | L | Surabaya |
| 9 | Thomas Eng | L | Hongkong |
| 1 | Suwanto Dipura | L | Majalengka |
| 5 | Suseno Mangun | L | Ciamis |
| 4 | Rita Sariwati | P | Cibinong |
| 21 | Rendi Ganteng | L | Bogor |
| 6 | Ratna Sari | P | Cianjur |
| 10 | Ratih Sanggar | P | Solo |
| 3 | Purwanto Rojolele | L | Yogyakarta |
| 16 | Noeri Sakti | P | Jakarta |
| 2 | Mayangsariwati | P | Bogor |
| 22 | Magda Magdalena | P | Bandar Lampung |
| 23 | Jumanto Dipuro | L | Tegal |
| 8 | Desi Sukmini | P | Jakarta |
| 12 | Delima Rahayu | P | Demak |
| 24 | Deemas Sudirman | L | Batam |
| 13 | Dadang Sukandar | L | Cianjur |
| 7 | Charlie Simanjuntak | L | Medan |
| 17 | Ahmaddin Sudin | L | Banda Aceh |
| 11 | Achmad Widjaja | L | Jakarta |
+------+---------------------+---------+----------------+
25 rows in set (0.01 sec)
Ya, cukup dengan menambahkan kata "DESC" maka anda akan mendapatkan urutan Z-A, bukan?
Contoh-contoh di atas kebanyakan menggunakan data-data dengan jenis karakter. Sekarang bagaimana
kalau yang menjadi objeknya adalah data-data yang bukan karakter? Misalnya, tanggal. Ayo, bagaimana
dong contohnya.....?!
OK, kita coba tampilkan dulu data dengan kolom tanggal...
mysql>SELECT nama, kelamin, tgllahir
->FROM karyawan2
->ORDER BY nama ;
+---------------------+---------+----------------+
| nama | kelamin | tgllahir |
+---------------------+---------+----------------+
| Achmad Widjaja | L | 0000-00-00 |
| Ahmaddin Sudin | L | 0000-00-00 |
| Charlie Simanjuntak | L | 0000-00-00 |
| Dadang Sukandar | L | 0000-00-00 |
| Deemas Sudirman | L | 0000-00-00 |
| Delima Rahayu | P | 0000-00-00 |
| Desi Sukmini | P | 0000-00-00 |
| Jumanto Dipuro | L | 0000-00-00 |
| Magda Magdalena | P | 0000-00-00 |
| Mayangsariwati | P | 0000-00-00 |
| Noeri Sakti | P | 0000-00-00 |
| Purwanto Rojolele | L | 0000-00-00 |
| Ratih Sanggar | P | 0000-00-00 |
| Ratna Sari | P | 0000-00-00 |
| Rendi Ganteng | L | 0000-00-00 |
| Rita Sariwati | P | 0000-00-00 |
| Suseno Mangun | L | 0000-00-00 |
| Suwanto Dipura | L | 0000-00-00 |
| Thomas Eng | L | 0000-00-00 |
| Wanto Sukarno | L | 0000-00-00 |
| Wati Sutinah | P | 0000-00-00 |
| Wawan Wanisar | L | 0000-00-00 |
| Winda Sukma | P | 0000-00-00 |
| Zaenal Nur | L | 0000-00-00 |
| Zulailah Zulha | P | 0000-00-00 |
+---------------------+---------+----------------+
25 rows in set (0.01 sec)
Lho..lho... kok kolom tgllahirnya kosong semua? Kenapa isinya 0000-00-00 yach? Seingat saya, pada file
buatdanisitabel.sql sudah disiapkan semua data tanggal lahirnya.. Lalu kenapa jadi begini? Coba, kita
periksa lagi perintah-perintah pada file buatdanisitabel.sql , terutama perintah untuk memasukkan data
tanggal.
Bagaimana, sudah ketemu apa penyebabnya? Kalo, belum tolong dicari dulu yach... anggap aja PR buat
anda-anda semua... Saya mo coffee-break dulu... hehehe... Bagi yang udah gak sabar, ayo kita ngopi
bersama dulu... :)
Manajemen Database Dengan MySQL, Sesi 17
Ditulis oleh arbie
Udah segeran kan setelah ngopi bersama? Ok kita lanjutkan... Gimana dengan PR nya? Udah
ketauan apa penyakitnya sehingga data pada kolom tanggal isinya 0000-00-00? Padahal, kita
sudah memasukkan data sesuai dengan file nuatdanisitabel.sql.
Ok...perhatikan perintah pengisian data yang saya ambil dari file buatdanisitabel.sql sebagai
berikut:
.... ................ ...........
INSERT INTO karyawan2
(noid, nama, kelamin, tempatlahir, tgllahir, alamat1, alamat2,
kota, kodepos, telprumah, ponsel)
VALUES
("NULL","Suwanto Dipura" ,"L","Majalengka","03-02-1967","Jl.
Madangkara No.11", "RT.01 RW.01","Jakarta","12121","021-
999999","NULL"),
("NULL","Mayangsariwati" ,"P","Bogor", "01-06-1977","Jl.
Rawasari 12", "RT 03 RW 02","Bandung","40256","022-
0099909","0814-000100"),
................. dst ...................
Ya, anda betul. Perhatikan bahwa format tanggal pada MySQL HARUS ditulis dengan bentuk:
TAHUN-BULAN-TANGGAL (0000-00-00). Misal, 12 Januari 2003 ditulis dengan format
2003-01-12, dsb.
Sedangkan, pengisian data yang kita lakukan adalah TANGGAL-BULAN-TAHUN
Jelas dong, gak bakalan mau MySQL menerima data tanggal dengan urutan yang TIDAK
PROSEDURAL. (hehehe...gaya bahasa pejabat nich...)
Lalu, gimana dong solusinya? Gampang aja... kita tulis ulang aja lagi perintah pemasukan
tanggal tapi dengan urutan format tanggal yang benar. Yaitu: TAHUN-BULAN-TANGGAL Oh
ya, anda gak usah khawatir, silakan download aja file revbuatdanisitanggal.sql yang sudah
saya siapkan... Selanjutkan lakukan hal yang sama seperti pada sesi ke-13.
Oh, ya jangan khawatir juga ... Kesalahan diatas memang disengaja kok...:)
[SYSTEM PROMPT]mysql -h localhost -u root -p personaliadb <
revbuatdanisitabel.sql
Enter Password: **********
Jangan lupa untuk memeriksanya kembali:
mysql>SELECT * FROM karyawan3 ;
Sambil menunggu anda melakukan kembali pemasukkan data, saya mau santai-santai dulu
yach....:)
Selamat pagi... Gimana udah selesai PR-nya? Kalo udah mari kita periksa bersama...
mysql>SHOW TABLES ;
+------------------------+
| Tabels_in_personaliadb |
+------------------------+
| karyawan |
| karyawan2 |
| karyawan3 |
+------------------------+
3 rows in set (0.00 sec)
Hasil dari file revbuatdanisitabel.sql adalah tabel karyawan3. Sekarang kita periksa isi di dalam tabel
karyawan3.
mysql>SELECT nama, kelamin, tgllahir
->FROM karyawan3
->ORDER BY nama ;
+---------------------+---------+----------------+
| nama | kelamin | tgllahir |
+---------------------+---------+----------------+
| Achmad Widjaja | L | 1968-12-12 |
| Ahmaddin Sudin | L | 1972-09-27 |
| Charlie Simanjuntak | L | 1969-11-15 |
| Dadang Sukandar | L | 1971-07-03 |
| Deemas Sudirman | L | 1979-06-19 |
| Delima Rahayu | P | 1972-06-24 |
| Desi Sukmini | P | 1981-09-13 |
| Jumanto Dipuro | L | 1969-09-03 |
| Magda Magdalena | P | 1978-06-01 |
| Mayangsariwati | P | 1977-06-01 |
| Noeri Sakti | P | 1983-06-01 |
| Purwanto Rojolele | L | 1968-07-03 |
| Ratih Sanggar | P | 1982-11-22 |
| Ratna Sari | P | 1981-04-22 |
| Rendi Ganteng | L | 1969-06-03 |
| Rita Sariwati | P | 1977-05-10 |
| Suseno Mangun | L | 1964-09-11 |
| Suwanto Dipura | L | 1967-02-03 |
| Thomas Eng | L | 1969-09-09 |
| Wanto Sukarno | L | 1974-07-03 |
| Wati Sutinah | P | 1975-09-19 |
| Wawan Wanisar | L | 1977-06-01 |
| Winda Sukma | P | 1969-08-01 |
| Zaenal Nur | L | 1973-01-03 |
| Zulailah Zulha | P | 1972-11-01 |
+---------------------+---------+----------------+
25 rows in set (0.01 sec)
Ya, sekarang nampaknya sudah sesuai dengan skenario..:) Selamat buat anda...
Kita coba perintah lainnya.....
mysql>SELECT nama, kelamin, tgllahir
->FROM karyawan3
->ORDER BY tgllahir ;
+---------------------+---------+----------------+
| nama | kelamin | tgllahir |
+---------------------+---------+----------------+
| Suseno Mangun | L | 1964-09-11 |
| Suwanto Dipura | L | 1967-02-03 |
| Purwanto Rojolele | L | 1968-07-03 |
| Achmad Widjaja | L | 1968-12-12 |
| Rendi Ganteng | L | 1969-06-03 |
| Winda Sukma | P | 1969-08-01 |
| Jumanto Dipuro | L | 1969-09-03 |
| Thomas Eng | L | 1969-09-09 |
| Charlie Simanjuntak | L | 1969-11-15 |
| Dadang Sukandar | L | 1971-07-03 |
| Delima Rahayu | P | 1972-06-24 |
| Ahmaddin Sudin | L | 1972-09-27 |
| Zulailah Zulha | P | 1972-11-01 |
| Zaenal Nur | L | 1973-01-03 |
| Wanto Sukarno | L | 1974-07-03 |
| Wati Sutinah | P | 1975-09-19 |
| Rita Sariwati | P | 1977-05-10 |
| Mayangsariwati | P | 1977-06-01 |
| Wawan Wanisar | L | 1977-06-01 |
| Magda Magdalena | P | 1978-06-01 |
| Deemas Sudirman | L | 1979-06-19 |
| Ratna Sari | P | 1981-04-22 |
| Desi Sukmini | P | 1981-09-13 |
| Ratih Sanggar | P | 1982-11-22 |
| Noeri Sakti | P | 1983-06-01 |
+---------------------+---------+----------------+
25 rows in set (0.01 sec)
Sekarang dengan urutan descending...
mysql>SELECT nama, kelamin, tgllahir
->FROM karyawan3
->ORDER BY tgllahir ;
+---------------------+---------+----------------+
| nama | kelamin | tgllahir |
+---------------------+---------+----------------+
| Noeri Sakti | P | 1983-06-01 |
| Ratih Sanggar | P | 1982-11-22 |
| Desi Sukmini | P | 1981-09-13 |
| Ratna Sari | P | 1981-04-22 |
| Deemas Sudirman | L | 1979-06-19 |
| Magda Magdalena | P | 1978-06-01 |
| Wawan Wanisar | L | 1977-06-01 |
| Mayangsariwati | P | 1977-06-01 |
| Rita Sariwati | P | 1977-05-10 |
| Wati Sutinah | P | 1975-09-19 |
| Wanto Sukarno | L | 1974-07-03 |
| Zaenal Nur | L | 1973-01-03 |
| Zulailah Zulha | P | 1972-11-01 |
| Ahmaddin Sudin | L | 1972-09-27 |
| Delima Rahayu | P | 1972-06-24 |
| Dadang Sukandar | L | 1971-07-03 |
| Charlie Simanjuntak | L | 1969-11-15 |
| Thomas Eng | L | 1969-09-09 |
| Jumanto Dipuro | L | 1969-09-03 |
| Winda Sukma | P | 1969-08-01 |
| Rendi Ganteng | L | 1969-06-03 |
| Achmad Widjaja | L | 1968-12-12 |
| Purwanto Rojolele | L | 1968-07-03 |
| Suwanto Dipura | L | 1967-02-03 |
| Suseno Mangun | L | 1964-09-11 |
+---------------------+---------+----------------+
25 rows in set (0.01 sec)
Coba lagi dengan kombinasi perintah yang lain....
mysql>SELECT nama, kelamin, tgllahir
->FROM karyawan3
->WHERE tgllahir > "1970-01-01"
->ORDER BY tgllahir ;
+---------------------+---------+----------------+
| nama | kelamin | tgllahir |
+---------------------+---------+----------------+
| Dadang Sukandar | L | 1971-07-03 |
| Delima Rahayu | P | 1972-06-24 |
| Ahmaddin Sudin | L | 1972-09-27 |
| Zulailah Zulha | P | 1972-11-01 |
| Zaenal Nur | L | 1973-01-03 |
| Wanto Sukarno | L | 1974-07-03 |
| Wati Sutinah | P | 1975-09-19 |
| Rita Sariwati | P | 1977-05-10 |
| Mayangsariwati | P | 1977-06-01 |
| Wawan Wanisar | L | 1977-06-01 |
| Magda Magdalena | P | 1978-06-01 |
| Deemas Sudirman | L | 1979-06-19 |
| Ratna Sari | P | 1981-04-22 |
| Desi Sukmini | P | 1981-09-13 |
| Ratih Sanggar | P | 1982-11-22 |
| Noeri Sakti | P | 1983-06-01 |
+---------------------+---------+----------------+
16 rows in set (0.01 sec)
Thanks GOD it's Friday! Walau pun mo weekend, eh yang namanya nyare elmu tetep jalan terus donk!
Yuk.. kita lanjutin lagi nyang kemaren yach...
Kita coba perintah lainnya:
mysql> SELECT noid, nama, telprumah, ponsel
-> FROM karyawan3 ;
+------+---------------------+--------------+---------------+
| noid | nama | telprumah | ponsel |
+------+---------------------+--------------+---------------+
| 1 | Suwanto Dipura | 021-999999 | NULL |
| 2 | Mayangsariwati | 022-0099909 | 0814-000100 |
| 3 | Purwanto Rojolele | 021-111111 | NULL |
| 4 | Rita Sariwati | 021-0099909 | 0084-000100 |
| 5 | Suseno Mangun | NULL | NULL |
| 6 | Ratna Sari | 021-00999909 | NULL |
| 7 | Charlie Simanjuntak | 021-0009090 | NULL |
| 8 | Desi Sukmini | NULL | NULL |
| 9 | Thomas Eng | 021-44224422 | NULL |
| 10 | Ratih Sanggar | 021-90099909 | NULL |
| 11 | Achmad Widjaja | 021-8888889 | NULL |
| 12 | Delima Rahayu | 021-80099909 | NULL |
| 13 | Dadang Sukandar | 021-098088 | NULL |
| 14 | Winda Sukma | 022-0099909 | 0814-000200 |
| 15 | Zaenal Nur | 021-8999999 | NULL |
| 16 | Noeri Sakti | 021-10099909 | 0814-0001100 |
| 17 | Ahmaddin Sudin | 021-1999999 | NULL |
| 18 | Wati Sutinah | 021-10019909 | 0814-0030100 |
| 19 | Wanto Sukarno | 021-92999999 | NULL |
| 20 | Wawan Wanisar | 021-0099909 | 0814-0200100 |
| 21 | Rendi Ganteng | 021-11999999 | NULL |
| 22 | Magda Magdalena | 021-9009009 | 0814-99000100 |
| 23 | Jumanto Dipuro | 021-9919999 | NULL |
| 24 | Deemas Sudirman | 021-02099909 | 0814-0001011 |
| 25 | Zulailah Zulha | 021-21999999 | NULL |
+------+---------------------+--------------+---------------+
25 rows in set (0.01 sec)
Perhatikan pada kolom telprumah dan ponsel, ternyata tidak semua data terisi atau diketahui (NULL).
Sekarang kita periksa siapa saja yang benar-benar tidak memiliki nomor telepon, baik di rumah maupun
ponsel...
mysql> SELECT noid, nama, telprumah, ponsel
-> FROM karyawan3 ;
-> WHERE telprumah=NULL
-> AND ponsel=NULL
-> ;
Empty set (0.02 sec)
Lho kok Empty set? Bukannya kolom yang NULL itu sebenarnya ada beberapa data? Apa yang salah
yach? Kita coba lagi ach...
mysql> SELECT noid, nama, telprumah, ponsel
-> FROM karyawan3 ;
-> WHERE telprumah='NULL'
-> AND ponsel='NULL'
-> ;
+------+---------------------+--------------+---------------+
| noid | nama | telprumah | ponsel |
+------+---------------------+--------------+---------------+
| 5 | Suseno Mangun | NULL | NULL |
| 8 | Desi Sukmini | NULL | NULL |
+------+---------------------+--------------+---------------+
2 rows in set (0.01 sec)
Nah... ternyata sekarang bisa...:) Barusan kita lupa untuk mengapit kata NULL dengan tanda kutip,
bukan? Udah jelaskan masalahnya? Kita lanjut...
Kita ubah sedikiiit saja perintah yang barusan. Operator AND kita ganti dengan OR.. Lihat hasilnya...
mysql> SELECT noid, nama, telprumah, ponsel
-> FROM karyawan3 ;
-> WHERE telprumah='NULL'
-> OR ponsel='NULL'
-> ;
+------+---------------------+--------------+---------------+
| noid | nama | telprumah | ponsel |
+------+---------------------+--------------+---------------+
| 1 | Suwanto Dipura | 021-999999 | NULL |
| 3 | Purwanto Rojolele | 021-111111 | NULL |
| 5 | Suseno Mangun | NULL | NULL |
| 6 | Ratna Sari | 021-00999909 | NULL |
| 7 | Charlie Simanjuntak | 021-0009090 | NULL |
| 8 | Desi Sukmini | NULL | NULL |
| 9 | Thomas Eng | 021-44224422 | NULL |
| 10 | Ratih Sanggar | 021-90099909 | NULL |
| 11 | Achmad Widjaja | 021-8888889 | NULL |
| 12 | Delima Rahayu | 021-80099909 | NULL |
| 13 | Dadang Sukandar | 021-098088 | NULL |
| 15 | Zaenal Nur | 021-8999999 | NULL |
| 17 | Ahmaddin Sudin | 021-1999999 | NULL |
| 19 | Wanto Sukarno | 021-92999999 | NULL |
| 21 | Rendi Ganteng | 021-11999999 | NULL |
| 23 | Jumanto Dipuro | 021-9919999 | NULL |
| 25 | Zulailah Zulha | 021-21999999 | NULL |
+------+---------------------+--------------+---------------+
17 rows in set (0.01 sec)
Nah itulah hasilnya.. Eh, apa? Salah? Bukan itu yang anda maksud? Oh, maksudnya data karyawan
yang punya 2 nomor, nomor telp rumah dan nomor ponsel... Wah, kalo gitu tadi kita memang salah
ngasih perintah dong...
Mestinya sih gini:
mysql> SELECT noid, nama, telprumah, ponsel
-> FROM karyawan3 ;
-> WHERE telprumah != 'NULL'
-> AND ponsel != 'NULL'
-> ;
+------+---------------------+--------------+---------------+
| noid | nama | telprumah | ponsel |
+------+---------------------+--------------+---------------+
| 2 | Mayangsariwati | 022-0099909 | 0814-000100 |
| 4 | Rita Sariwati | 021-0099909 | 0084-000100 |
| 14 | Winda Sukma | 022-0099909 | 0814-000200 |
| 16 | Noeri Sakti | 021-10099909 | 0814-0001100 |
| 18 | Wati Sutinah | 021-10019909 | 0814-0030100 |
| 20 | Wawan Wanisar | 021-0099909 | 0814-0200100 |
| 22 | Magda Magdalena | 021-9009009 | 0814-99000100 |
| 24 | Deemas Sudirman | 021-02099909 | 0814-0001011 |
+------+---------------------+--------------+---------------+
8 rows in set (0.01 sec)
Nah... ini baru bener... Iya kan? Gimana, mau nyoba perintah apa lagi sekarang? Oh. hanya orang-orang
yang punya no.telp rumah saja,, tapi tidak punya ponsel?.. OK..boss, bisa lah itu.. Kita coba sama-sama
deh...
mysql> SELECT noid, nama, telprumah, ponsel
-> FROM karyawan3 ;
-> WHERE telprumah != 'NULL'
-> AND ponsel='NULL'
-> ;
+------+---------------------+--------------+---------------+
| noid | nama | telprumah | ponsel |
+------+---------------------+--------------+---------------+
| 1 | Suwanto Dipura | 021-999999 | NULL |
| 3 | Purwanto Rojolele | 021-111111 | NULL |
| 6 | Ratna Sari | 021-00999909 | NULL |
| 7 | Charlie Simanjuntak | 021-0009090 | NULL |
| 9 | Thomas Eng | 021-44224422 | NULL |
| 10 | Ratih Sanggar | 021-90099909 | NULL |
| 11 | Achmad Widjaja | 021-8888889 | NULL |
| 12 | Delima Rahayu | 021-80099909 | NULL |
| 13 | Dadang Sukandar | 021-098088 | NULL |
| 15 | Zaenal Nur | 021-8999999 | NULL |
| 17 | Ahmaddin Sudin | 021-1999999 | NULL |
| 19 | Wanto Sukarno | 021-92999999 | NULL |
| 21 | Rendi Ganteng | 021-11999999 | NULL |
| 23 | Jumanto Dipuro | 021-9919999 | NULL |
| 25 | Zulailah Zulha | 021-21999999 | NULL |
+------+---------------------+--------------+---------------+
15 rows in set (0.01 sec)
Gampang kan ternyata? Sekarang mo apa lagi? Kebalikan dari yang di atas? Jadi, cuma data orang-
orang yang hanya punya ponsel tapi tidak punya telp rumah? Haa... kalo itu mah gantian anda atuh untuk
berlatih... Silakan dicoba sendiri dulu dech...
Nanti kita samakan jawabannya yach....
Manajemen Database Dengan MySQL, Sesi 20
Ditulis oleh arbie
Terakhir anda minta supaya data yang muncul hanya orang-orang yang punya ponsel saja, tapi tidak
punya no.telp rumah.. Udah dapat kan jawabannya? Kalo belum, kita samakan aja deh jawabannya
dengan yang dibawah ini:
mysql> SELECT noid, nama, telprumah, ponsel
-> FROM karyawan3 ;
-> WHERE telprumah = 'NULL'
-> AND ponsel != 'NULL'
-> ;
Empty set (0.02 sec)
Lho kenapa terjadi lagi nich Empty set-nya? Coba, kita pikir-pikir lagi.... Hanya punya ponsel, kan itu
berarti tidak punya telp rumah. Iya kan? Kita lihat logikanya: tidak punya telp rumah, berarti
telprumah='NULL'. OK. Punya ponsel, berarti ponsel != 'NULL'
Lha.. perintah di atas kan secara logika udah bener? Tapi kenapa hasilnya tidak benar? Wahhh..pusing!!!
Eit..., jangan panik dulu donk! Mari kita uraikan benang kusut ini satu persatu... Sekarang kita coba aja
dulu menampilkan data yang tidak punya telp rumah (telprumah='NULL'). Kolom ponsel kita abaikan
dulu....
mysql> SELECT noid, nama, telprumah, ponsel
-> FROM karyawan3 ;
-> WHERE telprumah = 'NULL'
-> ;
Empty set (0.02 sec)
+------+---------------------+--------------+---------------+
| noid | nama | telprumah | ponsel |
+------+---------------------+--------------+---------------+
| 5 | Suseno Mangun | NULL | NULL |
| 8 | Desi Sukmini | NULL | NULL |
+------+---------------------+--------------+---------------+
2 rows in set (0.01 sec)
Ya, sampai disini masih benar. Telprumahnya NULL semua tuch. Sekarang kita coba yang ponselnya
bukan NULL:
mysql> SELECT noid, nama, telprumah, ponsel
-> FROM karyawan3 ;
-> WHERE ponsel != 'NULL'
-> ;
Empty set (0.02 sec)
+------+---------------------+--------------+---------------+
| noid | nama | telprumah | ponsel |
+------+---------------------+--------------+---------------+
| 2 | Mayangsariwati | 022-0099909 | 0814-000100 |
| 4 | Rita Sariwati | 021-0099909 | 0084-000100 |
| 14 | Winda Sukma | 022-0099909 | 0814-000200 |
| 16 | Noeri Sakti | 021-10099909 | 0814-0001100 |
| 18 | Wati Sutinah | 021-10019909 | 0814-0030100 |
| 20 | Wawan Wanisar | 021-0099909 | 0814-0200100 |
| 22 | Magda Magdalena | 021-9009009 | 0814-99000100 |
| 24 | Deemas Sudirman | 021-02099909 | 0814-0001011 |
+------+---------------------+--------------+---------------+
8 rows in set (0.01 sec)
Ok juga... semua data yang punya ponsel udah muncul tuch! Sekarang anda perhatikan baik-baik
hasil dari 2 perintah terakhir!
Dari kedua perintah di atas, sudah jelas bahwa memang tidak ada satu pun data yang memenuhi
kriteria: punya ponsel saja, tapi tidak punya no.telp rumah. Semua orang yang punya ponsel, di
rumahnya juga ada telepon kok..(lihat hasil perintah kedua terakhir). Ya, kan?
Lalu, kenapa kita capek-capek kesini?
Tujuan dari capek-capek kesini adalah: hati-hati dengan operator logika, apalagi kalau kita sudah
menggunakannya secara 'keroyokan' seperti di atas. Ada suatu aturan baku mengenai tingkat derajat
operator, dimana operator yang satu akan mengalahkan operator lainnya. Tingkat derajat ini bahasa
kerennya adalah 'Operator Precedence'.... Nanti akan kita bahas pada sesi berikutnya...
Sementara ini kita break dulu... saya ngerti kok anda udah cape,,,(apa lagi saya...hehehe).... Met
istirahat....:)
Nah ..bagi nyang mo lanjut...ok dech kita lanjutin...
Manajemen Database Dengan MySQL, Sesi 21
Ditulis oleh arbie
Kemaren kita udah utak-atik masalah operator ganda. Udah disinggung juga tentang operator
precedence. Kalo kita lihat lagi operator-operator yang bisa digunakan di dalam MySQL pada sesi ke-15,
maka dibawah ini adalah urutan otoritas dari para operator tersebut:
Paling Tinggi BINARY
NOT !
- (unary minus)
*/%
+-
<< >>
&
|
< <= = <=> != <> >= > IN IS LIKE REGEXP RLIKE
BETWEEN
AND &&
Paling Rendah OR ||
Bisa kita lihat, semakin keatas posisi operator, maka semakin tinggi tingkat kekuasaan operator tersebut.
Begitu pula sebaliknya, semakin rendah posisinya maka akan semakin lemah.
Untuk operator yang sama kuat, misal + dan - digabung dengan operator * / %, maka akan ditentukan
kekuatannya tergantung dari posisi mana yang paling kiri/paling awal ditemukan. Dan untungnya posisi
kekuatan ini dapat diubah dengan bantuan tanda kurung "(" dan ")". Perlu bukti?
Contoh:
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)
Nah, 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 kekuatan
operator....
Perlu bukti lainnya? Silakan saja anda coba sendiri..sementara saya akan memberikan contoh
penggunaan operrator lainnya seperti LIKE, NOT LIKE, REGEXP, dan sebagainya setelah yang satu
ini...