LIKE в SQL

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

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

  • Знак процента (%) — соответствует любому количеству символов, даже нулю.
  • Знак подчеркивания (_) —  соответствует ровно одному символом.

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

Выражение Что означает Возвращаемое значение
WHERE name LIKE 'Da%'
Найти имена, начинающиеся с ‘Da’ David, Davidson
WHERE name LIKE '%th'
Найти имена, заканчивающиеся на ‘th’ Elisabeth, Smith
WHERE name LIKE '%on%'
Найти имена, содержащие ‘on’ Davidson, Toni
WHERE name LIKE 'Sa_'
Найти имена, начинающиеся с ‘Sa’, и еще одним символом после Sam
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, как показано ниже:

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 |
+--------+------------------+------------+--------+---------+

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

Примечание. Частичное соответствие полезно, когда вы не знаете точную форму строки, по которой вы ищете. Используйте частичное соответствие для получения нескольких строк, содержащих одинаковые строки в одном из столбцов таблицы.

codechick

СodeСhick.io - простой и эффективный способ изучения программирования.

2024 ©