LIKE memeriksa apakah teks cocok dengan sebuah pola, di mana % mewakili deretan karakter apa pun dan _ mewakili tepat satu karakter. Inilah cara mencari nilai yang mengandung, diawali, atau diakhiri dengan teks tertentu. Contoh-contohnya berlaku di PostgreSQL, MySQL, SQLite, dan SQL Server.
Cara menggunakan LIKE
LIKE membandingkan sebuah nilai dengan pola. Pola harus cocok dengan seluruh nilai, dengan dua wildcard untuk mengisi celahnya: % cocok dengan berapa pun jumlah karakter (termasuk nol) dan _ cocok dengan tepat satu karakter. NOT LIKE mengembalikan kebalikannya.
expression [NOT] LIKE pattern [ESCAPE escape_character]
-- In SQL Server, LIKE only works in a condition, such as a WHERE clause
SELECT 'Joe Bloggs' LIKE 'Jo%';
-- Output: true
SELECT 'Joe Bloggs' LIKE 'J_e%';
-- Output: true
SELECT 'Joe Bloggs' LIKE 'Bloggs';
-- Output: false
Yang terakhir bernilai false karena tanpa wildcard, pola harus sama persis dengan seluruh nilai. Dalam query, LIKE biasanya ditempatkan di klausa WHERE:
-- Input: customers
-- id | name
-- ---+-------------
-- 1 | Joe Bloggs
-- 2 | Jane Doe
-- 3 | Joanna Smith
-- 4 | Bob Jones
SELECT name
FROM customers
WHERE name LIKE 'Jo%';
-- Output:
-- name
-- ------------
-- Joe Bloggs
-- Joanna Smith
Aturan yang perlu diketahui
-
LIKE di PostgreSQL peka huruf besar-kecil. Database lain mengabaikan huruf besar-kecil secara default, tetapi di PostgreSQL
'Smith' LIKE 'smith'bernilai false. Ubah kedua sisi menjadi huruf kecil, sepertiLOWER(name) LIKE '%smith%', jika huruf besar-kecil tidak penting. -
NULL tidak pernah cocok.
NULL LIKE '%'bernilai NULL, bukan true, sehingga baris dengan kolom NULL tidak diikutkan baik oleh LIKE maupun NOT LIKE. TambahkanOR column IS NULLjika Anda ingin menyertakannya.
SELECT NULL LIKE '%';
-- Output: NULL
-
Escape
%dan_untuk mencocokkannya secara harfiah. Letakkan karakter escape di depan wildcard dan tentukan denganESCAPE:
-- Input: discounts
-- id | description
-- ---+---------------------
-- 1 | 50% off winter coats
-- 2 | Spend 50, save 10
-- 3 | Up to 25% off shoes
-- Without escaping, the % after 50 is a wildcard
SELECT * FROM discounts
WHERE description LIKE '%50%%';
-- Output:
-- id | description
-- ---+---------------------
-- 1 | 50% off winter coats
-- 2 | Spend 50, save 10
-- With ESCAPE '\', the \% matches a real percent sign
-- (in MySQL, write ESCAPE '\\': a single backslash escapes the quote)
SELECT * FROM discounts
WHERE description LIKE '%50\%%' ESCAPE '\';
-- Output:
-- id | description
-- ---+---------------------
-- 1 | 50% off winter coats
-
%di awal pola tidak bisa memakai index. Pencarian awalan sepertiLIKE 'INV-2026-%'bisa memakai index pada kolom, tetapiLIKE '%widget%'harus memeriksa setiap baris. Untuk mencari kata dalam teks berukuran besar, gunakan full-text search dari database Anda.
Sintaks alternatif
Anda juga akan menemui tambahan khusus database berikut:
-- PostgreSQL: ILIKE ignores case
SELECT 'SMITH' ILIKE 'smith';
-- Output: true
-- SQL Server: [ ] in a LIKE pattern matches one character from a set or range
SELECT CASE WHEN 'B12' LIKE '[A-C]%' THEN 'match' ELSE 'no match' END;
-- Output: match
-- MySQL: REGEXP for regular expressions (PostgreSQL uses ~)
SELECT 'A12-345' REGEXP '^A[0-9]{2}-[0-9]{3}$';
-- Output: 1
Untuk memeriksa apakah teks mengandung string tetap, tanpa pola, cari posisinya. Hasilnya 0 jika string tersebut tidak ada:
SELECT INSTR('FinTech Corp', 'Tech');
-- Output: 4
-- PostgreSQL: POSITION('Tech' IN 'FinTech Corp')
-- SQL Server: CHARINDEX('Tech', 'FinTech Corp')
CONTAINS() di SQL Server bukan pengecekan substring: ini adalah predikat full-text search yang membutuhkan full-text index.
Kapan sebaiknya menggunakan LIKE?
Gunakan LIKE saat Anda tahu sebagian nilai, tapi tidak seluruhnya. Sebagian besar penggunaannya termasuk salah satu dari empat kasus berikut.
Mencari teks yang mengandung sebuah kata
Letakkan % di kedua sisi kata. '%Tech%' cocok dengan “Tech Solutions Inc”, “FinTech Corp”, dan “Technology Partners”, karena pola ini juga cocok di dalam kata yang lebih panjang.
Mencocokkan awal atau akhir nilai
Letakkan % hanya di akhir untuk mencocokkan awalan, seperti 'INV-2026-%', atau hanya di awal untuk mencocokkan akhiran, seperti '%.pdf' atau '%@gmail.com'. Pencarian awalan adalah yang bisa dipercepat dengan index.
Mencocokkan format tetap
_ mewakili tepat satu karakter, sehingga pola bisa menggambarkan bentuk sebuah nilai: '___-___-____' untuk nomor telepon, 'A__-___' untuk kode produk. Dengan NOT LIKE, pola yang sama akan menemukan nilai yang tidak sesuai format.
Mencari tanpa memedulikan huruf besar-kecil
Pengguna mengetik “smith”; datanya tertulis “Smith”. Ubah kedua sisi menjadi huruf kecil dengan LOWER() dan pencarian akan mengabaikan huruf besar-kecil, bahkan di PostgreSQL.
Contoh nyata LIKE
Mencari salah satu dari beberapa kata
Gabungkan pola dengan OR untuk menemukan produk yang cocok dengan salah satunya:
-- Input: products
-- id | name
-- ---+-----------------
-- 1 | Gaming laptop
-- 2 | Spiral notebook
-- 3 | Desk lamp
-- 4 | Desktop computer
SELECT * FROM products
WHERE name LIKE '%laptop%'
OR name LIKE '%notebook%'
OR name LIKE '%computer%';
-- Output:
-- id | name
-- ---+-----------------
-- 1 | Gaming laptop
-- 2 | Spiral notebook
-- 4 | Desktop computer
Mencari invoice tahun ini
Nomor invoice diawali dengan jenis dan tahun, sehingga pola awalan bisa memilih invoice tahun 2026 dan melewatkan nota kredit:
-- Input: invoices
-- invoice_no | customer
-- --------------+----------
-- INV-2026-0012 | Northwind
-- INV-2025-0981 | Contoso
-- CN-2026-0003 | Northwind
-- INV-2026-0040 | Fabrikam
SELECT * FROM invoices
WHERE invoice_no LIKE 'INV-2026-%';
-- Output:
-- invoice_no | customer
-- --------------+----------
-- INV-2026-0012 | Northwind
-- INV-2026-0040 | Fabrikam
Mencari nomor telepon dengan format yang salah
Satu _ per karakter menggambarkan format yang Anda harapkan, dan NOT LIKE menampilkan baris yang perlu dibersihkan:
-- Input: customers
-- name | phone
-- ----------+---------------
-- Ana Lima | 555-010-1234
-- Ben Ode | (555) 010-9876
-- Cara Diaz | 5550104321
-- Dev Rao | 555-010-5555
SELECT name, phone FROM customers
WHERE phone NOT LIKE '___-___-____';
-- Output:
-- name | phone
-- ----------+---------------
-- Ben Ode | (555) 010-9876
-- Cara Diaz | 5550104321
Mencari nama keluarga tanpa memedulikan huruf besar-kecil
Nama yang diketik dengan huruf kapital atau huruf kecil tetap ditemukan jika kedua sisi diubah menjadi huruf kecil:
-- Input: customers
-- id | name
-- ---+------------
-- 1 | Anna Smith
-- 2 | BEN SMITH
-- 3 | Dana Jones
-- 4 | carla smith
SELECT * FROM customers
WHERE LOWER(name) LIKE '%smith%';
-- Output:
-- id | name
-- ---+------------
-- 1 | Anna Smith
-- 2 | BEN SMITH
-- 4 | carla smith
Bacaan lanjutan tentang LIKE
Di blog ini:
- Panduan SQL SUBSTRING: ambil sebagian string setelah Anda menemukannya
- Panduan SQL not equal: NOT LIKE beserta cara lain untuk mengecualikan baris
- Panduan SQL CASE statement: beri label pada baris dengan kondisi, termasuk pola LIKE
- Membuat index di PostgreSQL: index yang membuat pencarian awalan jadi cepat
- Tutorial MySQL CREATE INDEX: hal yang sama untuk MySQL
Dokumentasi resmi:
- PostgreSQL: LIKE
- MySQL: LIKE
- SQLite: Operator LIKE, GLOB, REGEXP, MATCH, dan extract
- SQL Server: LIKE
Beekeeper Studio Adalah GUI Database Gratis & Open Source
Tool query & editor SQL terbaik yang pernah saya pakai. Semua yang saya butuhkan untuk mengelola database ada di sini. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio cepat, intuitif, dan mudah digunakan. Beekeeper mendukung banyak sekali database, dan berjalan mulus di Windows, Mac, dan Linux.
Apa Kata Pengguna Tentang Beekeeper Studio
"Beekeeper Studio sepenuhnya menggantikan alur kerja SQL lama saya. Cepat, intuitif, dan membuat pekerjaan database kembali menyenangkan."
"Saya sudah mencoba banyak GUI database, tapi Beekeeper punya keseimbangan sempurna antara fitur dan kesederhanaan. Langsung berfungsi."