English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этом руководстве вы узнаете, как检索 данные на основе частичного соответствия.
До сих пор вы видели условия, определяющие точные строки, такие как 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 | +--------+------------------+------------+--------+---------+
Внимание:Если вы хотите всегда обрабатывать столбцы в чувствительном к регистру режиме, объявите их с учетом регистра или бинарного сортировочного правила, чтобы избежать любых проблем с производительностью.
Совет:Когда вы не знаете точную форму строки для поиска, частичное соответствие очень полезно. Вы также можете использовать частичное соответствие для поиска множества строк в столбце таблицы, содержащих相似ные строки.