В этом учебном материале вы узнаете, как использовать SQL условие LIKE (для сопоставления с шаблоном) с синтаксисом и примерами.
Описание
SQL условие LIKE позволяет использовать подстановочные символы для сопоставления с шаблоном в запросе. Условие LIKE используется в предложении WHERE оператора SELECT, INSERT, UPDATE или DELETE.
Синтаксис
Синтаксис для условия LIKE в SQL.
expression LIKE pattern [ ESCAPE 'escapecharacter' ]
Параметры или аргумент
- expression
- Символьное выражение, такое как поле или столбец
- pattern
- Символьное выражение, которое содержит сопоставление с шаблоном. Подстановочные символы, которые вы можете выбрать:
| Символ |
Объяснение |
% |
Позволяет сопоставить любую строку любой длины (включая нулевую длину) |
_ |
Позволяет сопоставить одиночный символ |
- ESCAPE 'escapecharacter'
- Необязательный. Это позволяет вам сопоставлять шаблоны с литеральными подстановочными символами, такими как
% или _.
Пример - использование подстановочного символа % в условии LIKE
Давайте рассмотрим, как подстановочный символ % работает в SQL условии LIKE. Помните, что подстановочный символ % соответствует любой строке любой длины (включая нулевую длину).
В этом первом примере мы хотим найти все записи в таблице customers, где last_name клиента начинается с 'C'.
В этом примере у нас есть таблица customers со следующими данными:
| customer_id |
first_name |
last_name |
favorite_website |
| 4000 |
Justin |
Bieber |
google.com |
| 5000 |
Selena |
Gomez |
bing.com |
| 6000 |
Mila |
Kunis |
yahoo.com |
| 7000 |
Tom |
Cruise |
oracle.com |
| 8000 |
Johnny |
Depp |
NULL |
| 9000 |
Russell |
Crowe |
google.com |
Введите следующий SQL оператор.
|
|
SELECT * FROM customers WHERE last_name LIKE 'C%' ORDER BY last_name; |
Будет выбрано 2 записи. Вот результаты, которые вы должны получить.
| customer_id |
first_name |
last_name |
favorite_website |
| 7000 |
Tom |
Cruise |
oracle.com |
| 9000 |
Russell |
Crowe |
google.com |
В этом примере возвращаются записи таблицы customers, где last_name начинается с 'C'. Как видите, были возвращены записи по фамилиям Cruise и Crowe.
Поскольку условие LIKE не чувствительно к регистру, следующий SQL оператор вернет те же результаты.
|
|
SELECT * FROM customers WHERE last_name LIKE 'c%' ORDER BY last_name; |
Использование нескольких подстановочных символов % в условии LIKE
Вы также можете использовать подстановочный символ % несколько раз с условием LIKE.
Используя ту же таблицу customers со следующими данными:
| customer_id |
first_name |
last_name |
favorite_website |
| 4000 |
Justin |
Bieber |
google.com |
| 5000 |
Selena |
Gomez |
bing.com |
| 6000 |
Mila |
Kunis |
yahoo.com |
| 7000 |
Tom |
Cruise |
oracle.com |
| 8000 |
Johnny |
Depp |
NULL |
| 9000 |
Russell |
Crowe |
google.com |
Попробуем найти все значения last_name из таблицы customers, где last_name содержит букву 'e'.
Введите следующий SQL оператор:
|
|
SELECT last_name FROM customers WHERE last_name LIKE '%e%' ORDER BY last_name; |
Будет выбрано 3 записей. Вот результаты, которые вы должны получить.
| last_name |
| Bieber |
| Gomez |
| Depp |
В этом примере фамилии Bieber, Gomez и Depp содержат букву 'е'.
Пример - использование подстановочного символа _ в условии LIKE
Далее рассмотрим, как подстановочный символ _ (символ подчеркивания) работает в условии LIKE. Помните, что подстановочный символ _ ищет ровно один символ, в отличие от подстановочного символа %.
Используя таблицу categories со следующими данными:
| category_id |
category_name |
| 25 |
Deli |
| 50 |
Produce |
| 75 |
Bakery |
| 100 |
General Merchandise |
| 125 |
Technology |
Попробуем найти все записи из таблицы categories, где category_id имеет длину 2 цифры и заканчивается на '5'. Введите следующий SQL оператор.
|
|
SELECT * FROM categories WHERE category_id LIKE '_5'; |
Будет выбрано 2 записи. Вот результаты, которые вы должны получить.
| category_id |
category_name |
| 25 |
Deli |
| 75 |
Bakery |
В этом примере есть 2 записи, которые будут соответствовать шаблону - category_id со значениями 25 и 75. Обратите внимание, что category_id равный 125 не был выбран потому что символ _ соответствует только одному символу.
Использование нескольких подстановочных символов _ в условии LIKE
Если вы хотите сопоставить трехзначное значение, заканчивающееся на «5», вам нужно будет использовать подстановочный символ _ два раза. Вы можете изменить свой запрос следующим образом.
|
|
SELECT * FROM categories WHERE category_id LIKE '__5'; |
Теперь вы вернете значение category_id равное 125.
| category_id |
category_name |
| 125 |
Technology |
Пример - использование оператора NOT с условием LIKE
Далее давайте рассмотрим пример использования оператора NOT с условием LIKE.
В этом примере у нас есть таблица suppliers со следующими данными:
| supplier_id |
supplier_name |
city |
state |
| 100 |
Yandex |
Moscow |
Russian |
| 200 |
Google |
Lansing |
Michigan |
| 300 |
Oracle |
Redwood City |
California |
| 400 |
Bing |
Redmond |
Washington |
| 500 |
Yahoo |
Sunnyvale |
Washington |
| 600 |
DuckDuckGo |
Paoli |
Pennsylvania |
| 700 |
Qwant |
Paris |
France |
| 800 |
Facebook |
Menlo Park |
California |
| 900 |
Electronic Arts |
San Francisco |
California |
Давайте посмотрим на все записи в таблице suppliers, где supplier_name не содержит литеру 'o'. Введите следующий SQL оператор.
|
|
SELECT * FROM suppliers WHERE supplier_name NOT LIKE '%o%'; |
Будут выбраны 4 записи. Вот результаты, которые вы должны получить.
| supplier_id |
supplier_name |
city |
state |
| 100 |
Yandex |
Moscow |
Russian |
| 300 |
Oracle |
Redwood City |
California |
| 400 |
Bing |
Redmond |
Washington |
| 700 |
Qwant |
Paris |
France |
В этом примере в таблице suppliers есть четыре записи, в которых supplier_name не содержит литеру 'o'.
Пример - использование escape-символов с условием LIKE
Важно понимать, как использовать «escape-символ» когда он соответствует шаблону. Вы можете экранировать % или _ и искать литеральные версии.
Допустим, вы хотели найти % как литерал в условии LIKE. Вы можете сделать это с помощью escape-символа. В нашем примере мы будем использовать ! как escape-символ в условии LIKE.
NOTE: Вы можете определить только escape-символ как один символ. Лучше всего выбрать такой символ, который не будет появляться в ваших данных очень часто, например ! или же #.
В этом примере мы имеем таблицу test со следующими данными:
| test_id |
test_value |
| 1 |
10% |
| 2 |
25% |
| 3 |
100 |
| 4 |
99 |
Мы могли бы вернуть все записи из таблицы test, где test_value содержит литерал %. Введите следующий SQL оператор.
|
|
SELECT * FROM test WHERE test_value LIKE '%!%%' escape '!'; |
Вот результаты, которые вы должны получить.
| test_id |
test_value |
| 1 |
10% |
| 2 |
25% |
В этом примере символ ! определяется как escape-символ. Первое и последнее значения % в условии LIKE рассматриваются как обычные подстановочные символы. !% является экранированным %, поэтому он рассматривается как литеральное значение %.
Вы можете дополнительно изменить приведенный выше пример и возвращать только те test_values, которые начинаются с 1 и содержат литерал %. Введите следующий SQL оператор:
|
|
SELECT * FROM test WHERE test_value LIKE '1%!%%' escape '!'; |
Вот результаты, которые вы должны получить.
Этот пример, на этот раз, вернет только одну запись. Потому что есть только один test_value, который начинается на 1 и содержит литерал %.