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