Dalam SQL, LIKE
operator memungkinkan Anda untuk melakukan pencocokan pola. Ini menentukan apakah string karakter tertentu cocok dengan pola tertentu.
Sebuah pola dapat menyertakan karakter reguler dan karakter wildcard.
Tabel Sumber
Tabel berikut digunakan untuk contoh di halaman ini.
SELECT * FROM Owners;
Hasil:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Contoh
Berikut adalah contoh untuk mendemonstrasikan bagaimana LIKE
operator bekerja.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '%.com';
Hasil:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | [email protected] | | Bart | Pitt | [email protected] | | Woody | Eastwood | [email protected] | +-------------+------------+-------------------+
Dalam contoh ini, saya menggunakan LIKE
operator bersama dengan %
operator wildcard untuk mengembalikan pemilik yang alamat emailnya diakhiri dengan .com
.
LIKE
dapat digunakan dengan operator string lain juga, seperti _
, []
, dan [^]
.
%
Operator Wildcard
%
operator wildcard cocok dengan string apa pun dari nol atau lebih karakter. Ini dapat digunakan sebagai awalan atau akhiran, dan juga dapat digunakan di tengah string.
Ini cenderung lebih umum digunakan sebagai sufiks, dan penggunaannya terbatas di tengah pola, meskipun ada beberapa kasus penggunaan yang valid untuk menggunakannya di tengah pola, seperti berikut:
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '[email protected]%.com';
Hasil:
+-------------+------------+------------------+ | FirstName | LastName | Email | |-------------+------------+------------------| | Bart | Pitt | [email protected] | +-------------+------------+------------------+
Dalam hal ini, kami tidak tahu alamat email bart, tetapi kami tahu itu dimulai dengan [email protected]
dan diakhiri dengan .com
. Oleh karena itu, kami dapat menggunakan LIKE
dalam hubungannya dengan %
operator wildcard untuk mengisi sisanya.
Ingatlah bahwa teknik ini dapat mengembalikan banyak baris yang tidak relevan, bergantung pada data, dan cara Anda menyusun pernyataan SQL.
_
Operator Wildcard
Garis bawah (_
) operator wildcard cocok dengan satu karakter apa pun.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE 'b_rt';
Hasil:
+-------------+------------+------------------+ | FirstName | LastName | Email | |-------------+------------+------------------| | Bart | Pitt | [email protected] | | Burt | Tyson | [email protected] | +-------------+------------+------------------+
[]
Operator Wildcard
Tanda kurung ([]
) operator wildcard cocok dengan karakter tunggal apa pun dalam rentang atau set tertentu yang ditentukan di antara tanda kurung.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE '[bh]%';
Hasil:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | [email protected] | | Bart | Pitt | [email protected] | | Boris | Trump | NULL | | Burt | Tyson | [email protected] | +-------------+------------+-------------------+
Di sini, saya menggabungkan wildcard tanda kurung dengan tanda persentase untuk mengembalikan semua pemilik yang nama depannya dimulai dengan b
atau h
.
Perhatikan bahwa operator kurung tidak memiliki adopsi luas di DBMS. Ini didukung di SQL Server, tetapi tidak didukung di MySQL, Oracle, DB2, dan SQLite. Periksa dokumentasi DBMS Anda untuk melihat apakah itu mendukung operator ini.
[^]
Operator Wildcard
Karakter tanda sisipan (^
) dapat digunakan untuk meniadakan hasil saat menggunakan operator tanda kurung.
Jadi, kami mengubah contoh sebelumnya untuk hanya mengembalikan pemilik yang nama depannya tidak mulai dengan b
atau h
.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE '[^bh]%';
Hasil:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Nancy | Simpson | NULL | | Woody | Eastwood | [email protected] | +-------------+------------+-------------------+
Nilai NULL
Persentase (%
) wildcard cocok dengan apa pun – hampir. Satu hal yang tidak cocok adalah NULL
.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '%';
Hasil:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | [email protected] | | Bart | Pitt | [email protected] | | Woody | Eastwood | [email protected] | | Burt | Tyson | [email protected] | +-------------+------------+-------------------+
Di tabel kami, ada dua baris dengan NULL
di Email
kolom, tetapi itu tidak dikembalikan di sini.
Kinerja
Kueri yang berisi LIKE
operator dapat berjalan jauh lebih lambat daripada kueri lainnya, dan Anda mungkin harus menghindari penggunaan LIKE
operator kecuali Anda benar-benar membutuhkannya. Menggunakan %
operator sebagai awalan bisa sangat lambat.
Itu tidak berarti Anda tidak boleh menggunakannya sama sekali. LIKE
operator adalah bagian integral dari SQL, dan Anda akan menemukan banyak skenario di mana itu akan menjadi satu-satunya pilihan (atau setidaknya, pilihan terbaik).