Operator LIKE SQL: Cari Teks dengan Wildcard % dan _
TL;DR
Operator LIKE di SQL dipakai buat nyari teks yang cocok dengan pola, bukan yang sama persis. Ada dua wildcard: tanda persen (%) mewakili nol karakter atau lebih, dan underscore (_) mewakili tepat satu karakter. Di PostgreSQL, LIKE membedakan huruf besar dan kecil, jadi pakai ILIKE atau bungkus kolomnya dengan LOWER() kalau kamu mau pencarian yang nggak peduli kapitalisasi.
Operator LIKE di SQL dipakai buat nyari teks yang mirip pola tertentu, bukan yang sama persis.
SELECT nama FROM pelanggan
WHERE nama LIKE 'Budi%';
Tanda sama dengan (=) cuma nemu yang identik huruf per huruf. LIKE bisa nemu yang cuma cocok sebagian.
Tapi query di atas punya dua bug yang nggak kelihatan. Nanti aku tunjukin.
Apa itu operator LIKE di SQL?
LIKE adalah operator perbandingan teks yang cocokin isi kolom sama sebuah pola. Polanya ditulis pakai wildcard — karakter khusus yang mewakili karakter lain. Ada dua wildcard di LIKE: tanda persen (%) mewakili nol karakter atau lebih, dan underscore (_) mewakili tepat satu karakter.
LIKE dipakai di klausa WHERE, tempat yang sama kayak operator biasa.
Gimana cara pakai wildcard % dan _?
| Pola | Artinya | Contoh yang cocok |
|---|---|---|
'Budi%' | Diawali Budi | Budi, Budiman, Budi Santoso |
'%Budi' | Diakhiri Budi | Ahmad Budi, Budi |
'%Budi%' | Mengandung Budi | Ketiganya di atas |
'B_di' | 4 huruf: B, 1 karakter apa aja, d, i | Budi, Bodi |
'%@gmail.com' | Email gmail | rina@gmail.com |
'08%' | Nomor HP Indonesia | 08123456789 |
Bedanya % dan _ gampang diinget: persen itu serakah (berapa pun karakternya, termasuk nol), underscore itu pelit (tepat satu, nggak boleh kurang atau lebih).
LIKE 'B_di' cocok sama "Budi" tapi nggak cocok sama "Budiman" — soalnya polanya cuma 4 karakter, sementara Budiman ada 7.
Contoh kasus: nyari pelanggan bernama Budi di toko_berkah
Tabel pelanggan toko_berkah, 8 baris.
| id | nama | kota | |
|---|---|---|---|
| 1 | Budi Santoso | budi.santoso@gmail.com | Bandung |
| 2 | Budiman | budiman@yahoo.co.id | Bandung |
| 3 | Siti Aminah | siti@tokoberkah.co.id | Surabaya |
| 4 | Ahmad Budi | ahmad.budi@gmail.com | Medan |
| 5 | Rina Kopiah | rina@gmail.com | Bandung |
| 6 | budi hartono | BUDI.H@Gmail.com | Jakarta |
| 7 | Dewi Lestari | dewi@corp.co.id | Surabaya |
| 8 | Toni_Wijaya | toni@gmail.com | Medan |
Ada 4 orang yang namanya mengandung "budi": Budi Santoso, Budiman, Ahmad Budi, dan budi hartono.
Sekarang lihat apa yang kejadian.
SELECT nama FROM pelanggan WHERE nama LIKE 'Budi%';
-- Budi Santoso
-- Budiman
-- 2 baris
Dari 4 pelanggan bernama Budi di tabel toko_berkah,
LIKE 'Budi%'cuma nemu 2. Ahmad Budi kelewat karena namanya di belakang. budi hartono kelewat karena huruf b-nya kecil.
Dua bug, satu query. Ini kenapa laporan "jumlah pelanggan bernama Budi" sering salah.
Gimana cara bikin LIKE nggak peduli huruf besar-kecil?
Di PostgreSQL, LIKE membedakan huruf besar dan kecil. 'Budi%' nggak cocok sama 'budi hartono'.
Di MySQL dengan collation bawaan, LIKE justru nggak peduli. Query yang sama, hasil beda — tergantung databasenya.
Cara paling aman yang jalan di mana pun: samain hurufnya dulu.
SELECT nama FROM pelanggan
WHERE LOWER(nama) LIKE '%budi%';
-- Budi Santoso
-- Budiman
-- Ahmad Budi
-- budi hartono
-- 4 baris ✅
Sekarang keempatnya kena. Perhatiin polanya juga aku ubah jadi huruf kecil semua — kalau nggak, nggak akan ada yang cocok.
Khusus PostgreSQL ada jalan pintas: ILIKE.
SELECT nama FROM pelanggan
WHERE nama ILIKE '%budi%';
Hasilnya sama. Tapi ILIKE cuma ada di PostgreSQL, jadi kalau query kamu harus portabel, pakai LOWER. Fungsi teks lain yang sering dipakai bareng ada di panduan fungsi string SQL.
Gimana cara nyari karakter % atau _ secara harfiah?
Pelanggan nomor 8 namanya Toni_Wijaya, pakai underscore beneran. Coba cari.
-- SALAH: underscore dianggap wildcard
SELECT nama FROM pelanggan WHERE nama LIKE '%_%';
-- hasilnya SEMUA 8 baris 😵
Underscore di situ diartikan sebagai "satu karakter apa aja", dan semua nama punya minimal satu karakter. Jadi semuanya kena.
Solusinya: kasih tau database bahwa underscore itu karakter biasa, pakai ESCAPE.
SELECT nama FROM pelanggan
WHERE nama LIKE '%\_%' ESCAPE '\';
-- Toni_Wijaya
-- 1 baris ✅
Aturannya sama buat tanda persen. Kalau kamu nyari produk bernama "Diskon 50%", pakai LIKE '%50\%%' ESCAPE '\'.
Aturan lengkap wildcard dan escape ada di dokumentasi PostgreSQL untuk pattern matching.
Kenapa query LIKE bisa lambat banget?
Ini bagian yang bikin LIKE punya reputasi jelek di tim engineering.
WHERE nama LIKE 'Budi%' -- bisa pakai index, cepat
WHERE nama LIKE '%Budi%' -- nggak bisa pakai index, lambat
Index di database itu urut secara alfabet. Kalau kamu tau awalan katanya, database bisa langsung loncat ke bagian yang bener — sama kayak nyari kata di kamus.
Tapi kalau polanya diawali %, database nggak tau harus mulai dari mana. Dia terpaksa baca semua baris satu per satu. Di tabel 10 baris, nggak kerasa. Di tabel 10 juta baris, query bisa jalan berpuluh detik.
Yang aku lakuin di tabel besar:
- Pakai
LIKE 'awalan%'kalau memungkinkan — index tetap kepakai. - Kalau butuh nyari di tengah teks, bikin trigram index (
pg_trgmdi PostgreSQL). - Buat pencarian teks yang beneran serius, pindah ke full-text search.
Catatan: LOWER(nama) LIKE ... juga matiin index biasa. Kalau kamu sering pakai pola ini, bikin functional index di LOWER(nama).
Kesalahan umum waktu pakai LIKE
- Lupa huruf besar-kecil. Query jalan, hasilnya kurang. Nggak ada error yang ngasih tau.
- Pakai
=padahal maunya LIKE.WHERE nama = 'Budi%'nyari nama yang literal-nya "Budi%", termasuk tanda persennya. - Lupa ESCAPE di kolom yang ada underscore. Hasilnya semua baris kena, dan kamu ngira datanya emang gitu.
- Pakai
%di depan padahal nggak perlu. Kalau kamu cuma nyari awalan, jangan pakai'%Budi%'. Buang%depannya. - NOT LIKE ketemu NULL. Baris yang nilainya NULL nggak akan pernah lolos NOT LIKE. Tambahin
OR nama IS NULLkalau kamu mau dia ikut.
Yang terakhir ini sama persis kayak jebakan NOT IN. Perilaku NULL lengkapnya ada di glosarium NULL.
FAQ
Apa bedanya % dan _ di LIKE?
Persen mewakili nol karakter atau lebih. Underscore mewakili tepat satu karakter. 'B%' cocok sama Budi dan Budiman. 'B_di' cuma cocok sama kata 4 huruf kayak Budi.
Apakah LIKE membedakan huruf besar-kecil?
Di PostgreSQL, iya. Di MySQL dengan collation bawaan, nggak. Cara aman yang jalan di mana pun: bungkus pakai LOWER() di dua sisi.
Kenapa query LIKE lambat?
Pola yang diawali % bikin database nggak bisa pakai index, jadi dia baca semua baris. Di tabel jutaan baris, ini kerasa banget.
Apa alternatif LIKE kalau polanya rumit?
Regular expression. PostgreSQL punya operator ~, MySQL punya REGEXP. Pakai buat pola kayak nomor HP yang harus 10–13 digit — yang nggak bisa ditulis pakai LIKE.
Rangkuman
%= nol karakter atau lebih._= tepat satu karakter.- LIKE peka huruf besar-kecil di PostgreSQL. Pakai
LOWER()biar aman — di tabel toko_berkah, ini yang bikin hasil naik dari 2 jadi 4 baris. %di depan pola bikin index nggak kepakai. Hindari kalau tabelnya besar.
Semua query di sini udah dites dan siap copy-paste. Latihan langsung di halaman operator LIKE — editornya jalan di browser.
Lanjut baca: Operator IN dan BETWEEN SQL buat nyaring daftar nilai dan rentang.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Artikel Terkait
7 SQL Client Gratis Terbaik buat Analis Data (2026)
Nggak perlu bayar buat nulis query. Ini 7 SQL client gratis yang beneran dipakai analis, plus kelebihan dan kekurangannya masing-masing.
SQL Style Guide: Cara Nulis Query yang Enak Dibaca Tim
Sepuluh aturan SQL style guide yang bikin query kamu kebaca sama tim — dan sama kamu sendiri 6 bulan lagi. Lengkap dengan contoh sebelum-sesudah.
Take-Home Test SQL Data Analyst: Contoh Soal + Cara Ngerjainnya
Contoh soal take-home test SQL yang beneran dipakai perusahaan, dikerjain step by step — dari baca soal, nulis query, sampai nyusun insight yang bikin recruiter nengok.