Untuk pencarian sederhana, query SELECT..LIKE seperti yang telah kita bahas pada Tutorial Belajar MySQL: Pencarian Data dari Tabel MySQL (SELECT..LIKE) sebelumnya sudah mencukupi.
Namun untuk teknik pencarian yang lebih rumit, MySQL menyediakan query SELECT..REGEXP untuk pencarian menggunakan Regular Expression dari tabel MySQL.
Mempersiapkan Tabel Sample: daftar_dosen
Sebagai tabel sample untuk tutorial ini saya akan menggunakan tabel dari Tutorial Belajar MySQL: Menampilkan Data dari Tabel MySQL (SELECT). Jika anda ingin mencoba langsung query yang akan dibahas, silahkan mengikuti petunjuk pembuatan tabel sample yang ada di tutorial tersebut.
Tabel kita akan terdiri dari tabel mata_kuliah dan tabel daftar_dosen. Dalam tutorial kali ini kita hanya akan memakai tabel daftar_dosen saja. Berikut isi dari tabel tersebut:
mysql> SELECT * FROM daftar_dosen; +------------+----------------+------------+-----------+ | NIP | nama_dosen | no_hp | alamat | +------------+----------------+------------+-----------+ | 0160436012 | Sabrina Sari | 0812349900 | Pekanbaru | | 0260432002 | Maya Ari Putri | 0812345234 | Palembang | | 0275430005 | Susi Indriani | 0812656532 | Bogor | | 0480432066 | Tia Santrini | 0812451177 | Padang | | 0576431001 | M. Siddiq | 0812979005 | Jakarta | | 0770435006 | Rubin Hadi | 0812567678 | Papua | | 0869437003 | Mustalifah | 0812338877 | Aceh | | 1080432007 | Arif Budiman | 0812456345 | Makasar | +------------+----------------+------------+-----------+ 8 rows in set (0.266 sec)
Pengertian Regular Expression
Bagi yang sudah pernah mengenal bahasa pemrograman lain, mungkin sudah mengenal Reguler Expression yang kadang disingkat dengan RexExp, atau hanya RE saja.
Dalam bahasa sederhana, Regular Expression adalah kumpulan huruf atau karakter yang digunakan untuk pencocokan pola (pattern matching). Pola disini contohnya 'pola untuk kata yang diawali dengan huruf a dan diakhiri dengan huruf j', atau yang sedikit rumit seperti 'pola untuk kata yang diawali huruf a,b, c dengan panjang maksimal 5 huruf, mengandung minimal sebuah angka'.
Cakupan Regular Expression cukup luas dan tidak terbatas hanya pada MySQL saja. Hampir semua bahasa pemrograman komputer menyediakan fungsi khusus untuk regular expression. Dalam tutorial ini saya hanya membahas sebagian kecil dari RegExp.
Jika pada query SELECT..LIKE kita menggunakan pola 's%' sebagai kata kunci yang berarti 'kata yang diawali dengan huruf s dan memiliki banyak huruf 1 atau lebih' dalam regular expression, penulisannya menjadi '^S.*'. Terlihat sedikit rumit, tapi mari kita pelajari aturan penulisan RegExp:
- . : tanda titik dalam RegExp berarti sebuah karakter apa saja
- [ … ]: tanda kurung siku ini berarti kumpulan karakter. Misalkan [abc] akan cocok dengan 'a', 'b', atau 'c'. kita bisa juga menggunakan jangkauan (range), contohnya [a-z] akan cocok dengan seluruh huruf, [0-9] akan cocok dengan seluruh angka.
- *: tanda bintang ini akan cocok dengan 0 atau lebih karakter sebelumnya. Misalkan 'a*' berarti akan cocok dengan seluruh kata yang mengandung 0 atau lebih a.
- ^: tanda pangkat atau topi ini menandakan berada di awal kata.
- $: tanda dollar ini berarti bahwa pola berada di akhir kata.
Berikut contoh penerapan dari pola RegExp ini:
- 'ab*': Pola ini berarti akan cocok dengan seluruh kata yang mengandung a dan diikuti oleh b atau tidak sama sekali. Contohnya: 'a', 'ab', 'abbbbbb', dan juga 'kebab', karena untuk RegExp, kita harus menyatakan dimana karakter itu muncul.
- '^ab*': Pola ini sama artinya dengan 'ab*' seperti diatas, namun tanda ^ menyatakan bahwa pola ini harus berada di awal kata, sehingga 'kebab' tidak akan cocok.
- '^s..i$': Pola ini akan cocok dengan seluruh kata yang diawali dengan s, dan diakhiri dengan i, terdiri dari 4 huruf. Contohnya: susi, sapi, dan siti.
Pencarian Data Tabel MySQL Menggunakan SELECT..REGEXP
Format dasar dari query pencarian menggunakan Regular Expression adalah:
SELECT nama_kolom_tampil FROM nama_tabel WHERE nama_kolom_cari REGEXP keyword_reguler_expression
- nama_kolom_tampil adalah nama dari kolom yang akan kita tampilkan, bisa semua kolom dalam tabel, atau hanya kolom tertentu saja.
- nama_tabel adalah nama tabel dimana nama_kolom_tampil berada.
- nama_kolom_cari adalah kolom yang akan kita gunakan untuk pencarian.
- keyword_regular_expression adalah kata kunci dalam bentuk regular expression yang digunakan untuk pencarian.
Sebagai perbandingan dengan query SELECT..LIKE yang telah kita pelajari pada Tutorial Belajar MySQL: Pencarian Data dari Tabel MySQL (SELECT..LIKE), jika menggunakan Regular Expression pencarian nama_dosen yang diawali dengan huruf 's' adalah sebagai berikut:
mysql> SELECT * FROM daftar_dosen WHERE nama_dosen REGEXP '^s.*'; +------------+---------------+------------+-----------+ | NIP       | nama_dosen   | no_hp     | alamat   | +------------+---------------+------------+-----------+ | 0160436012 | Sabrina Sari | 0812349900 | Pekanbaru | | 0275430005 | Susi Indriani | 0812656532 | Bogor    | +------------+---------------+------------+-----------+ 2 rows in set (0.00 sec)
Penggunaan Regular Expression diperlukan jika kita butuh pencarian yang lebih rumit. Contohnya jika ingin mencari nama_dosen yang diawali dengan huruf 'm' atau 's', dan diakhiri dengan huruf vocal.
Pencarian seperti ini bisa saja dilakukan dengan SELECT..LIKE, namun butuh operator OR yang cukup banyak. Karena untuk huruf vocal berarti nama_dosen dapat berakhir dengan huruf a, i, u, e dan o.
Dalam Regular Expression, pola huruf vokal tersebut akan berbentuk '^[ms].*[aiueo]$' seperti contoh berikut:
mysql> SELECT * FROM daftar_dosen WHERE nama_dosen REGEXP '^[ms].*[aiueo]$'; +------------+----------------+------------+-----------+ | NIP       | nama_dosen    | no_hp     | alamat   | +------------+----------------+------------+-----------+ | 0160436012 | Sabrina Sari  | 0812349900 | Pekanbaru | | 0260432002 | Maya Ari Putri | 0812345234 | Palembang | | 0275430005 | Susi Indriani | 0812656532 | Bogor    | +------------+----------------+------------+-----------+ 3 rows in set (0.00 sec)
Perhatikan bahwa dosen Mustalifah dan M. Siddiq walaupun berawalan M, namun tidak diakhiri dengan huruf vocal.
Untuk pemakaian database sederhana, memakai query SELECT..LIKE untuk metode pencarian sudah mencukupi. Namun MySQL juga menyediakan Regular Expression untuk pencarian tingkat lanjut.
Dalam tutorial belajar MySQL selanjutnya kita akan membahas cara menggabungkan tabel MySQL dengan query JOIN.
kalau membuat inisialisasi huruf konsonan atau vokal dengan php bagaimana?
misalnya inputan "saya makan"
hasilnya
array 1. saya = kvkv
array 2. makan = kvkvk
ket:
k = konsonan
v = vokal
terimakasi
duniailkom, kalau di versi PHP yang paling baru fungsi REGEX sudah tidak ada lagi ya kan? tapi lain halnya dengan di MYSQL ya. ternyata fungsi ini masih bisa ya?
Setahu saya fungsi regular expression di PHP masih ada kok gan, malah menurut saya Regex adalah fitur 'standar' yang harus tersedia dalam setiap bahasa pemrograman :), sebagai contoh di PHP tersedia fungsi preg_match.
wah saya kembali baca tutorial ini lagi nih. oh iya ebook mysql di duniailkom udah jadi belum ya? saya pengen beli lah kalau udah ada. biar kalau gak ada jaringan internet tetep bisa baca tutorial di dunia ilkom
Untuk saat ini masih belum ada gan, tapi saya memang berencana untuk membuat versi ebook-nya dengan pembahasan yang lebih lengkap. Tapi karena ada kesibukan lain, jadi tertunda.. mungkin akan saya mulai menulisnya di bulan depan. Semoga berkenan menunggu :)
kalau saya ingin mencari data pada field1 yang mirip A dan field2 yang mirip B secara bersamaan, bisa tidak ??
Bisa gan, tinggal menambahkan perintah AND atau OR, seperti contoh berikut:
SELECT * FROM daftar_dosen WHERE nama_dosen REGEXP '^s.*'
AND alamat REGEXP '^P.*';
itu kutipnya harusnya ' ' ya di REGEXP nya baru bisa. kalo yg ini miring kutipnya '^s.*' :
SELECT * FROM daftar_dosen WHERE nama_dosen REGEXP '^s.*'
-> AND alamat REGEXP '^b.*';
Min, kalau misalkan mau menampilkan hanya field yang ada isinya saja bagaimana ya min? ^trims
Nanti tabelnya mau ditampilkan dimana gan? kalau pakai PHP, lebih mudah disortir di sisi PHPnya…
Maksudnya dimana min? hmm misalnya ada 5 kolom nih, nah di kolom ketiga saya mau harus ada data, kalau tidak ada data maka satu baris per-ID tidak muncul, cuma kolom ketiga aja yg wajib ada data, yg lain bebas, gitu min. Maap kalo ga jelas, rada bingung jelasinnya min hehe maklum masih belajar
Di PHP min ditampilinnya hehee
pake NOT NULL kayannya..
Baru tau ternyata di query bisa dipakai regexp,. btw thanks info nya min :)
Siip gan, semoga bisa bermanfaat..
Permisi gan. Kalo misalkan kita mau mencari Kata Doni Dona Sambuaga. Hanya dengan menuliskan Doni Sambuaga nama tengahnya bisa teridentifikasi dengan sendirinya gmna ya bro?
kak mau tanya kalau menampilkan nama yang huruf depannya bukan a atau yang lain itu gimana??
gan kalo misanya kita mau mencari kata yang berada di tengah2 gimana ya gan,contoh nih,saya mau cari data 2020 bulan februari,itu codingnya gimana ya gan? format tanggal di kolomnya "2020-02-'tanggal'",itu gimana ya gan?
Kalu mau mengganti 4 digit angka menjadi tanda bintang "****" gimana ya, perintah query d mysql nya contoh
NIM: 32123345 menjadi
NIM: 3212****
Coba di baca lagi gan, kalo hanya satu digit gunakan simbol "." maka kalo mau 4 digit contoh nya '^3212….'
Catatan:
Tanda "^" untuk menandakan awal huruf harus 3212
Nah kalo agan pake simbol "3212****" nanti yg keluar bukan hanya 4 digit di belakang tapi bisa lebih banyak
Mas Andre di artikel ini ada typo di awal pembahasan yaitu pada bagian
"Reguler Expression yang kadang disingkat dengan RexExp…".
seharusnya RegExp
MOhon pencerahannya gan cara hilangkan tanda baca baik titik,koma dll
NIM: 3.212,33;45 menjadi
NIM: 32123345