Di MariaDB, NOT LIKE
operator digunakan untuk menguji apakah string tidak mencocokkan suatu pola. Ini mengembalikan kebalikan dari LIKE
operator. Ini sama dengan menerapkan NOT
operator terhadap seluruh LIKE
ekspresi.
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 NOT 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 ini contoh penggunaan NOT LIKE
terhadap tabel itu:
SELECT *
FROM Pets
WHERE PetName NOT LIKE 'F%';
Hasil:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------------+
Dalam contoh ini, saya menggunakan NOT LIKE
dalam hubungannya dengan %
operator wildcard untuk mengembalikan hewan peliharaan yang namanya tidak dimulai dengan huruf F
.
Ini adalah hasil yang berlawanan yang akan kita dapatkan jika kita hanya menggunakan LIKE
. Dalam hal ini, kami hanya akan mendapatkan hasil di mana nama hewan peliharaan dimulai dengan huruf F
.
Sensitivitas Huruf Besar
NOT 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 NOT LIKE 'f%';
Hasil:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------------+
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 NOT 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 | | 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 | +-------+-----------+---------+---------+------------+
Kali ini, seluruh meja dikembalikan. Ini karena tidak ada yang cocok dengan huruf kecil f
.
Tetapi jika kita mengubahnya menjadi F
huruf besar :
SELECT *
FROM Pets
WHERE PetName NOT LIKE 'F%' COLLATE utf8_bin;
Hasil:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------------+
Kami mendapatkan lima pertandingan, seperti yang diharapkan. Baris di mana nama hewan peliharaan dimulai dengan F
dikecualikan.
Argumen Numerik
Argumen numerik dipaksakan ke string biner.
SELECT *
FROM Pets
WHERE PetId NOT LIKE 1;
Hasil:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 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 | +-------+-----------+---------+---------+------------+
Tanggal
Ini contoh tanggalnya:
SELECT *
FROM Pets
WHERE DOB NOT LIKE '2020%';
Hasil:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | +-------+-----------+---------+---------+------------+
Anda juga dapat menggunakan NOT LIKE
operator terhadap hasil fungsi tanggal, seperti DAYNAME()
, MONTHNAME()
, dll.
SELECT *
FROM Pets
WHERE MONTHNAME(DOB) NOT LIKE 'Nov%';
Hasil:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +-------+-----------+---------+---------+------------+
_
Operator Wildcard
Garis bawah (_
) operator wildcard cocok dengan satu karakter apa pun.
Contoh:
SELECT *
FROM Pets
WHERE PetName NOT LIKE '_e%';
Hasil:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 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 | +-------+-----------+---------+---------+------------+
Dalam hal ini, kami mengembalikan nama hewan peliharaan dengan karakter kedua bukan sebuah 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 NOT LIKE 'b_%';
Hasil:
+---------+-----------+----------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | +---------+-----------+----------+----------------+-------------------+ | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | +---------+-----------+----------+----------------+-------------------+
Dalam hal ini, ia mengembalikan hanya dua baris. Itu mengecualikan dua baris di mana alamat email dimulai dengan b
, dan diikuti oleh satu karakter lain, dan kemudian sejumlah karakter. Itu juga mengecualikan baris dengan null
alamat email.
Namun, karena kami tidak lolos dari garis bawah, 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 NOT LIKE 'b\_%';
Hasil:
+---------+-----------+----------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | +---------+-----------+----------+----------------+-------------------+ | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +---------+-----------+----------+----------------+-------------------+
Kita dapat melihat bahwa Burt telah ditambahkan ke hasil.
Mengubah Karakter Escape
Dimungkinkan untuk mengubah karakter pelarian. Anda dapat melakukannya dengan ESCAPE
argumen.
Contoh:
SELECT * FROM Owners
WHERE Email NOT LIKE 'b*_%' ESCAPE '*';
Hasil:
+---------+-----------+----------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | +---------+-----------+----------+----------------+-------------------+ | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +---------+-----------+----------+----------------+-------------------+
Dalam hal ini saya memberikan tanda bintang (*
) sebagai karakter pelarian.
Ini bisa 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.