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 | example@sqldat.com | | 2 | Bart | Pitt | (231) 465-3497 | example@sqldat.com | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | example@sqldat.com | | 6 | Burt | Tyson | (309) 565-0112 | example@sqldat.com | +-----------+-------------+------------+----------------+-------------------+
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 | example@sqldat.com | | Bart | Pitt | example@sqldat.com | | Woody | Eastwood | example@sqldat.com | +-------------+------------+-------------------+
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 'example@sqldat.com%.com'; Hasil:
+-------------+------------+------------------+ | FirstName | LastName | Email | |-------------+------------+------------------| | Bart | Pitt | example@sqldat.com | +-------------+------------+------------------+
Dalam hal ini, kami tidak tahu alamat email bart, tetapi kami tahu itu dimulai dengan example@sqldat.com 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 | example@sqldat.com | | Burt | Tyson | example@sqldat.com | +-------------+------------+------------------+
[] 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 | example@sqldat.com | | Bart | Pitt | example@sqldat.com | | Boris | Trump | NULL | | Burt | Tyson | example@sqldat.com | +-------------+------------+-------------------+
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 | example@sqldat.com | +-------------+------------+-------------------+
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 | example@sqldat.com | | Bart | Pitt | example@sqldat.com | | Woody | Eastwood | example@sqldat.com | | Burt | Tyson | example@sqldat.com | +-------------+------------+-------------------+
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).