English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Оператор LIKE в SQL

В этом руководстве вы узнаете, как检索 данные на основе частичного соответствия.

Шаблонное соответствие

До сих пор вы видели условия, определяющие точные строки, такие как WHERE name='Lois Lane'. Но в SQL вы также можете использовать оператор LIKE для выполнения частичного или шаблонного соответствия.

Оператор LIKE позволяет вам определить шаблон для поиска с использованием подстановочных знаков. Вы можете использовать следующие два подстановочных знака:

  • Процент ( % ) - подстановка любого количества символов, включая ноль

  • Подчерк ( _) - полная подстановка одного символа

Вот несколько примеров, показывающих, как использовать оператор LIKE с подстановочными знаками.

ДекларацияЗначениеВозвратное значение
WHERE name LIKE 'Da%'

Искать имена, начинающиеся на 'Da'

David, Davidson
WHERE name LIKE '%th'Искать имена, начинающиеся наthИмя в концеElizabeth, Smith
WHERE name LIKE '%on%'

Искать имена, содержащие 'on'

Davidson, Toni
WHERE name LIKE 'Sa_'

Искать имена, начинающиеся на 'Sa' и следуемые одним символом

Sa
WHERE name LIKE '_oy'

Найти имена, заканчивающиеся oy и содержащие не более одного символа

Joy, Roy
WHERE name LIKE '_an_'Найти имена, содержащиеanимена которых начинаются и заканчиваются одной буквойDana, Hans
WHERE name LIKE '%ar_'Найти имена, содержащиеarимена которых начинаются с любого количества символов и заканчиваются одной буквойRichard, Karl
WHERE name LIKE '_ar%'Найти имена, содержащиеarимена которых начинаются с одной буквы и заканчиваются любым количеством символовKarl, Mariya

Через поиск некоторых записей давайте внедрим обсуждаемое предложение в практическое применение.

Рассмотрим насemployeesВ базе данных есть таблица, содержащая следующие записи:

+--------+------------------+------------+--------+---------+
| emp_id  | emp_name          | hire_date   | salary  | dept_id  |
+--------+------------------+------------+--------+---------+
|      1 | Ethan Hunt       | 2001-05-01 |   5000 |       4 |
|      2 | Tony Montana     | 2002-07-15 |   6500 |       1 |
|         3           | Sarah Connor          | 2005-10-18     |         8000          |                 5                 |
|      4 | Rick Deckard     | 2007-01-03 |   7200 |       3 |
|      5 | Martin Blank     | 2008-06-24 |   5600 | NULL |
|      6 | simons bistro    | 2009-04-01 |   6000 |       1 |
+--------+------------------+------------+--------+---------+

Теперь предположим, что вы хотите найти всех сотрудников, имена которых начинаются с буквы S.

SELECT * FROM employees 
WHERE emp_name LIKE 'S%';

После выполнения запроса вы получите следующий результат:

+--------+------------------+------------+--------+---------+
| emp_id  | emp_name          | hire_date   | salary  | dept_id  |
+--------+------------------+------------+--------+---------+
|         3           | Sarah Connor          | 2005-10-18     |         8000          |                 5                 |
|      6 | simons bistro    | 2009-04-01 |   6000 |       1 |
+--------+------------------+------------+--------+---------+

В MySQL сравнение строковых значений (CHAR, VARCHAR, TEXT) по умолчанию не чувствительно к регистру, а сравнение строковых значений (BINARY, VARBINARY, BLOB) чувствительно к регистру.

Это означает, что если использовать поиск WHERE name LIKE 'S%', вы получите все значения столбцов, начинающиеся с S или s (как вы видите, у нас есть и 'Sarah', и 'simons'). Однако, если вам нужно, чтобы этот поиск был чувствителен к регистру, можно использовать оператор BINARY следующим образом:

-- Синтаксис для базы данных MySQL 
SELECT * FROM employees 
WHERE BINARY emp_name LIKE 'S%';

Теперь это предложение вернет сотрудников, имена которых начинаются с заглавной буквы S:

+--------+------------------+------------+--------+---------+
| emp_id  | emp_name          | hire_date   | salary  | dept_id  |
+--------+------------------+------------+--------+---------+
|         3           | Sarah Connor          | 2005-10-18     |         8000          |                 5                 |
+--------+------------------+------------+--------+---------+

Внимание:Если вы хотите всегда обрабатывать столбцы в чувствительном к регистру режиме, объявите их с учетом регистра или бинарного сортировочного правила, чтобы избежать любых проблем с производительностью.

Совет:Когда вы не знаете точную форму строки для поиска, частичное соответствие очень полезно. Вы также можете использовать частичное соответствие для поиска множества строк в столбце таблицы, содержащих相似ные строки.