Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak działa operator LIKE w MySQL

W MySQL, LIKE operator wykonuje dopasowanie wzorca przy użyciu wzorca SQL.

Jeśli ciąg pasuje do podanego wzorca, wynikiem jest 1 , w przeciwnym razie jest to 0 .

Wzorzec niekoniecznie musi być dosłownym ciągiem. Ta funkcja może być używana z wyrażeniami łańcuchowymi i kolumnami tabeli.

Składnia

Składnia wygląda tak:

expr LIKE pat [ESCAPE 'escape_char']

Gdzie expr jest ciągiem wejściowym i pat to wzorzec, dla którego testujesz ciąg.

Opcjonalny ESCAPE klauzula umożliwia określenie znaku ucieczki. Domyślny znak ucieczki to \ , więc możesz pominąć tę klauzulę, jeśli nie musisz tego zmieniać.

Przykład 1 – Podstawowe użycie

Oto przykład użycia tego operatora w SELECT oświadczenie:

SELECT 'Charlie' LIKE 'Char%';

Wynik:

+------------------------+
| 'Charlie' LIKE 'Char%' |
+------------------------+
|                      1 |
+------------------------+

W tym przypadku zwracana wartość to 1 co oznacza, że ​​ciąg wejściowy pasował do wzorca. W szczególności określiliśmy, że ciąg wejściowy powinien zaczynać się od Char i skończ na czymkolwiek. % znak pasuje do dowolnej liczby znaków (w tym znaków zero).

Oto, co się stanie, jeśli opuścimy % :

SELECT 'Charlie' LIKE 'Char';

Wynik:

+-----------------------+
| 'Charlie' LIKE 'Char' |
+-----------------------+
|                     0 |
+-----------------------+

Zwracany wynik to 0 co oznacza brak dopasowania. Dzieje się tak, ponieważ nie użyliśmy znaku wieloznacznego do określenia innych znaków.

Przykład 2 – _ Symbol wieloznaczny

Mamy również możliwość skorzystania z _ symbol wieloznaczny, aby określić tylko jeden znak. Oto przykład:

SELECT 'Charlie' LIKE 'Ch_rlie';

Wynik:

+--------------------------+
| 'Charlie' LIKE 'Ch_rlie' |
+--------------------------+
|                        1 |
+--------------------------+

W razie potrzeby dwa symbole wieloznaczne można połączyć we wzorze:

SELECT 'Charlie likes donuts' LIKE 'Ch_rlie%' AS 'Result';

Wynik:

+--------+
| Result |
+--------+
|      1 |
+--------+

Oto kilka innych:

SELECT 
  'Charlie likes donuts' LIKE 'Ch_rlie%donuts' AS 'Result 1',
  'Charlie likes donuts' LIKE 'Ch_rlie%nuts' AS 'Result 2',
  'Charlie likes donuts' LIKE 'Ch%rlie %likes %' AS 'Result 3',
  'Charlie likes donuts' LIKE '% likes %' AS 'Result 4';

Wynik:

+----------+----------+----------+----------+
| Result 1 | Result 2 | Result 3 | Result 4 |
+----------+----------+----------+----------+
|        1 |        1 |        1 |        1 |
+----------+----------+----------+----------+

Wprowadźmy kilka zmian do tego przykładu, abyśmy mogli zobaczyć przykłady sytuacji, w których się nie zgadzają:

SELECT 
  'Charlie likes donuts' LIKE 'Ch%rlie_donuts' AS 'Result 1',
  'Charlie likes donuts' LIKE 'Charlie_nuts' AS 'Result 2',
  'Charlie likes donuts' LIKE 'Charlie _likes donuts' AS 'Result 3',
  'Charlie likes donuts' LIKE '_ likes _' AS 'Result 4';

Wynik:

+----------+----------+----------+----------+
| Result 1 | Result 2 | Result 3 | Result 4 |
+----------+----------+----------+----------+
|        0 |        0 |        0 |        0 |
+----------+----------+----------+----------+

Przykład 3 – Przykład bazy danych

LIKE operator jest często używany w WHERE klauzula SELECT oświadczenie podczas odpytywania bazy danych. Kiedy jest używany w ten sposób, zawęża wyniki tylko do pasujących rekordów, ale widzimy rzeczywiste wyniki (nie tylko 1 lub 0 ).

Oto przykład, jak możemy użyć tego operatora w zapytaniu do bazy danych:

SELECT ArtistId, ArtistName
FROM Artists
WHERE ArtistName LIKE 'B%';

Wynik:

+----------+----------------+
| ArtistId | ArtistName     |
+----------+----------------+
|        4 | Buddy Rich     |
|       11 | Black Sabbath  |
|       15 | Birds of Tokyo |
|       16 | Bodyjar        |
+----------+----------------+

W tym przypadku było to proste zapytanie, które zwraca wszystkich wykonawców, których imiona zaczynają się na literę B .

Oto pełna lista artystów w tej tabeli:

SELECT ArtistId, ArtistName
FROM Artists;

Wynik:

+----------+------------------------+
| ArtistId | ArtistName             |
+----------+------------------------+
|        1 | Iron Maiden            |
|        2 | AC/DC                  |
|        3 | Allan Holdsworth       |
|        4 | Buddy Rich             |
|        5 | Devin Townsend         |
|        6 | Jim Reeves             |
|        7 | Tom Jones              |
|        8 | Maroon 5               |
|        9 | The Script             |
|       10 | Lit                    |
|       11 | Black Sabbath          |
|       12 | Michael Learns to Rock |
|       13 | Carabao                |
|       14 | Karnivool              |
|       15 | Birds of Tokyo         |
|       16 | Bodyjar                |
+----------+------------------------+

Przykład 4 – Ucieczka za pomocą znaku odwróconego ukośnika

Co się stanie, jeśli jeden ze znaków wieloznacznych znajduje się w ciągu wejściowym i musisz przeprowadzić do niego dopasowanie? Możesz go zmienić za pomocą znaku odwrotnego ukośnika (\ ). Oto przykład takiego wyszukiwania ze znakiem ucieczki i bez niego:

SELECT 
  'usr_123' LIKE 'usr_123' AS 'Without escape',
  'usr_123' LIKE 'usr\_123' AS 'With escape';

Wynik:

+----------------+-------------+
| Without escape | With escape |
+----------------+-------------+
|              1 |           1 |
+----------------+-------------+

W tym przypadku obaj pasowali, ale z różnych powodów. Pierwszy wiersz pasował, ponieważ symbol wieloznaczny określał, że dowolny znak będzie pasował. Druga linia również pasowała, ale tylko dlatego, że ciąg wejściowy miał podkreślenie we właściwym miejscu.

Zmieńmy nieco ciąg wejściowy, aby otrzymać inny wynik:

SELECT 
  'usr+123' LIKE 'usr_123' AS 'Without escape',
  'usr+123' LIKE 'usr\_123' AS 'With escape';

Wynik:

+----------------+-------------+
| Without escape | With escape |
+----------------+-------------+
|              1 |           0 |
+----------------+-------------+

Wersja bez ucieczki dała wynik pozytywny, ponieważ symbol wieloznaczny oznaczał, że w tym miejscu mogliśmy umieścić dowolną postać. Wersja ze znakami ucieczki wyraźnie stwierdzała, że ​​tylko znak podkreślenia (_ ) będzie pasować. Ciąg wejściowy nie zawierał podkreślenia w tym miejscu, więc wynik był ujemny.

Przykład 5 – ESCAPE Klauzula

Możesz także użyć ESCAPE klauzula, aby określić własny niestandardowy znak ucieczki. Oto przykład:

SELECT 
  'usr_123' LIKE 'usr|_123' ESCAPE '|' AS 'String 1',
  'usr+123' LIKE 'usr|_123' ESCAPE '|' AS 'String 2';

Wynik:

+----------+----------+
| String 1 | String 2 |
+----------+----------+
|        1 |        0 |
+----------+----------+

Przykład 6 – Wyrażenia numeryczne

Implementacja MySQL LIKE operator umożliwia użycie wyrażeń numerycznych. Oto przykład:

SELECT 
  1234 LIKE '12%',
  1234 LIKE '12_';

Wynik:

+-----------------+-----------------+
| 1234 LIKE '12%' | 1234 LIKE '12_' |
+-----------------+-----------------+
|               1 |               0 |
+-----------------+-----------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Procedura składowana MySQL z parametrami

  2. WSTAW z WYBIERZ

  3. Pozostałe w PostgreSQL, MS SQL Server, MySQL i SQLite

  4. Pojedyncze cudzysłowy, podwójne cudzysłowy i znaki wsteczne w MySQL

  5. Niepoprawny plik klucza MySQL dla tabeli tmp podczas tworzenia wielu złączeń