В этом учебном материале вы узнаете, как использовать 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 и содержит литерал %
.