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

Bagaimana Operator LIKE Bekerja di MariaDB

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Database Ketersediaan Tinggi untuk Camunda BPM menggunakan MySQL atau MariaDB Galera Cluster

  2. Menyiapkan Cluster Database Geo-Distributed Menggunakan Replikasi MySQL

  3. Pemulihan Bencana Cloud untuk MariaDB dan MySQL

  4. 4 Cara Mendaftar Semua Tampilan di Database MariaDB

  5. Bagaimana RIGHT() Bekerja di MariaDB