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

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

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

Mempersiapkan Tabel Sample: daftar_dosen

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

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

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

Pencarian Data Tabel MySQL Menggunakan query SELECT..LIKE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Pencarian Untuk Huruf Besar dan Huruf Kecil?

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

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

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

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


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

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

68 Comments

  1. Ibnu Toha
    09 Dec 14
    • Andre
      09 Dec 14
  2. diian ristan
    20 Feb 15
    • Andre
      21 Feb 15
  3. fikri
    02 Mar 15
    • Anonymous
      19 May 22
  4. jamaludin
    24 Apr 15
    • Afif Ganteng
      19 May 22
  5. AfikRubik
    30 Sep 15
    • Andre
      30 Sep 15
  6. bianka
    06 Oct 15
    • Andre
      06 Oct 15
  7. Jefry
    12 Oct 15
    • Andre
      13 Oct 15
    • Andre
      15 Oct 15
  8. Yusuf Habibillah
    22 Oct 15
  9. iwan
    16 Dec 15
    • Andre
      16 Dec 15
  10. linda
    20 Mar 16
    • Andre
      21 Mar 16
  11. Wahyu Santoso
    05 May 16
    • Andre
      06 May 16
  12. jojo
    28 Jun 16
    • Andre
      28 Jun 16
  13. adhy
    28 Jun 16
    • Andre
      28 Jun 16
  14. Liwin
    15 Jul 16
  15. swito rizky
    17 Aug 16
    • Andre
      18 Aug 16
  16. imawan
    27 Sep 16
    • Andre
      28 Sep 16
  17. diqi
    02 Oct 16
    • Andre
      02 Oct 16
  18. ghaniy
    03 Oct 16
    • Andre
      03 Oct 16
  19. ANGGI RAMLAN
    16 Oct 16
    • Andre
      16 Oct 16
    • Andre
      27 Nov 16
  20. sugiarto
    21 Dec 16
    • Andre
      21 Dec 16
  21. Aji Bangun
    02 Mar 17
  22. Noname
    11 Mar 17
    • Andre
      15 Mar 17
  23. Winda
    29 Mar 17
  24. Winda
    30 Mar 17
    • Andre
      30 Mar 17
  25. Dea
    10 Jul 17
  26. sukri
    12 Jul 17
    • Andre
      13 Jul 17
  27. alfzm_
    07 Aug 17
  28. bumi
    08 Nov 17
  29. nadzifk
    12 Jul 18
  30. amel
    05 Sep 18
    • Andre
      12 May 19
  31. Anonymous
    10 May 19
    • Andre
      12 May 19
  32. Joko
    14 May 19
  33. Lazuardi
    02 Dec 19
  34. Dasrin
    22 May 20
  35. Makmur Makmur
    15 Nov 20
  36. Anonymous
    11 Dec 20
    • Andre
      12 Dec 20
  37. Sanmade
    20 Jan 21
  38. Anonymous
    31 Oct 22

Add Comment