Di MariaDB, LIKE
operator memungkinkan Anda untuk melakukan pencocokan pola. Ini menentukan apakah string karakter tertentu cocok dengan pola tertentu. Ini mengembalikan 1
(BENAR) atau 0
(SALAH).
Sebuah pola dapat menyertakan karakter biasa, serta %
dan _
karakter pengganti.
Karakter wildcard tersebut dijelaskan dalam tabel berikut.
Karakter Wildcard | Deskripsi |
---|---|
% | Cocok dengan string apa pun dengan nol karakter atau lebih. Ini dapat digunakan sebagai awalan atau akhiran, dan juga dapat digunakan di tengah string. |
_ | Cocok dengan satu karakter apa pun. |
Sintaks
Sintaksnya seperti ini:
expr LIKE pat [ESCAPE 'escape_char']
Contoh
Misalkan kita memiliki tabel berikut:
SELECT * FROM Pets;
Hasil:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------------+
Berikut adalah contoh untuk mendemonstrasikan bagaimana LIKE
operator bekerja.
SELECT *
FROM Pets
WHERE PetName LIKE 'F%';
Hasil:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +-------+-----------+---------+---------+------------+
Dalam contoh ini, saya menggunakan LIKE
operator bersama dengan %
operator wildcard untuk mengembalikan hewan peliharaan yang namanya dimulai dengan huruf F
.
Sensitivitas Huruf Besar
LIKE
melakukan pencocokan substring peka huruf besar/kecil jika susunan untuk ekspresi dan pola peka huruf besar/kecil.
Oleh karena itu, kita dapat mengubah contoh sebelumnya menggunakan huruf kecil f
, dan tetap mendapatkan hasil yang sama:
SELECT *
FROM Pets
WHERE PetName LIKE 'f%';
Hasil:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +-------+-----------+---------+---------+------------+
Namun, kita dapat memaksa pencocokan peka huruf besar/kecil dengan menggunakan COLLATE
klausa dengan susunan biner. Atau, Anda dapat menggunakan CAST()
untuk memaksanya menjadi string biner.
Contoh:
SELECT *
FROM Pets
WHERE PetName LIKE 'f%' COLLATE utf8_bin;
Hasil:
Empty set (0.000 sec)
Tidak ada hasil yang dikembalikan.
Tetapi jika kita mengubahnya menjadi F
huruf besar :
SELECT *
FROM Pets
WHERE PetName LIKE 'F%' COLLATE utf8_bin;
Hasil:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +-------+-----------+---------+---------+------------+
Kami mendapatkan tiga pertandingan, seperti yang diharapkan.
Argumen Numerik
Argumen numerik dipaksakan ke string biner.
SELECT *
FROM Pets
WHERE PetId LIKE 7;
Hasil:
+-------+-----------+---------+---------+------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------+ | 7 | 3 | 2 | Bark | NULL | +-------+-----------+---------+---------+------+
Tanggal
Berikut ini contoh yang cocok dengan tahun dari tanggal:
SELECT *
FROM Pets
WHERE DOB LIKE '2020%';
Hasil:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +-------+-----------+---------+---------+------------+
Anda juga dapat menggunakan LIKE
operator terhadap hasil fungsi tanggal, seperti DAYNAME()
, MONTHNAME()
, dll.
SELECT *
FROM Pets
WHERE MONTHNAME(DOB) LIKE 'Nov%';
Hasil:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 5 | 1 | 1 | Tweet | 2020-11-28 | +-------+-----------+---------+---------+------------+
_
Operator Wildcard
Garis bawah (_
) operator wildcard cocok dengan satu karakter apa pun.
Contoh:
SELECT *
FROM Pets
WHERE PetName LIKE '_e%';
Hasil:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 2 | 3 | 3 | Fetch | 2019-08-16 | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------------+
Dalam hal ini, kami mencocokkan nama hewan peliharaan di mana karakter kedua adalah e
.
Karakter Pelarian
Terkadang Anda mungkin menemukan diri Anda dalam situasi di mana Anda perlu mencari garis bawah atau tanda persentase. Dalam kasus seperti itu, Anda dapat menggunakan garis miring terbalik (\
) untuk menghindari karakter ini. Ini akan mencegahnya ditafsirkan sebagai karakter wildcard.
Misalkan kita memiliki tabel berikut:
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] | +---------+-----------+----------+----------------+--------------------+
Perhatikan bahwa Pemilik 2 (Bart) memiliki alamat email yang berisi garis bawah.
Berikut adalah contoh apa yang terjadi ketika kita tidak menghindari garis bawah:
SELECT * FROM Owners
WHERE Email LIKE 'b_%';
Hasil:
+---------+-----------+----------+----------------+--------------------+ | OwnerId | FirstName | LastName | Phone | Email | +---------+-----------+----------+----------------+--------------------+ | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +---------+-----------+----------+----------------+--------------------+
Dalam hal ini, itu cocok dengan dua baris. Dalam hal ini, tidak masalah apa karakter kedua – itu cocok dengan apa pun karakter. Fakta bahwa baris pertama berisi garis bawah untuk karakter kedua hanyalah kebetulan. Itu akan cocok bahkan jika itu adalah sesuatu yang lain.
Tetapi bagaimana jika kita hanya ingin mencocokkan alamat email yang memiliki garis bawah sebenarnya sebagai karakter kedua?
Di situlah karakter pelarian masuk.
SELECT * FROM Owners
WHERE Email LIKE 'b\_%';
Hasil:
+---------+-----------+----------+----------------+--------------------+ | OwnerId | FirstName | LastName | Phone | Email | +---------+-----------+----------+----------------+--------------------+ | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | +---------+-----------+----------+----------------+--------------------+
Sekarang kita hanya mendapatkan satu baris – baris yang berisi garis bawah sebagai karakter kedua.
Mengubah Karakter Escape
Dimungkinkan untuk mengubah karakter pelarian. Anda dapat melakukannya dengan ESCAPE
argumen.
Contoh:
SELECT * FROM Owners
WHERE Email LIKE 'b*_%' ESCAPE '*';
Hasil:
+---------+-----------+----------+----------------+--------------------+ | OwnerId | FirstName | LastName | Phone | Email | +---------+-----------+----------+----------------+--------------------+ | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | +---------+-----------+----------+----------------+--------------------+
Dalam hal ini saya memberikan tanda bintang (*
) sebagai karakter pelarian.
Ini bisa sangat berguna ketika Anda perlu menggunakan garis miring terbalik untuk tujuan lain, seperti pengkodean karakter khusus. Dalam kasus seperti itu, Anda mungkin mendapati diri Anda harus "melarikan diri" karakter-karakter ini, yang bisa membingungkan. Oleh karena itu, mengubah karakter pelarian dapat membantu dalam situasi seperti itu.
Nilai NULL
Persentase (%
) wildcard cocok dengan apa pun – hampir. Satu hal yang tidak cocok adalah NULL
.
SELECT * FROM Owners
WHERE Email LIKE '%';
Hasil:
+---------+-----------+----------+----------------+--------------------+ | OwnerId | FirstName | LastName | Phone | Email | +---------+-----------+----------+----------------+--------------------+ | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [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).
Yang NOT LIKE
Operator
Anda juga dapat menggunakan NOT LIKE
untuk menguji apakah string tidak mencocokkan suatu pola.