MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

Bagaimana NOT LIKE Bekerja di MariaDB

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana Operator Modulo Bekerja di MariaDB

  2. Cara Menghubungkan Program C++ ke MariaDB

  3. Berurusan dengan MySQL Long Running Query

  4. Bagaimana DAYOFMONTH() Bekerja di MariaDB

  5. Bagaimana RIGHT() Bekerja di MariaDB