Поиск по шаблону. SQL — это просто

Аватарка пользователя Slava Rozhnev

Разберемся как искать в базе данных по LIKE SQL. Ищем строки начинающиеся, заканчивающиеся или просто содержащие заданный шаблон.

В предыдущей статье этой серии мы выучили ключевое слово WHERE (где) позволяющее выбирать из таблицы строки соответствующие условию или нескольким условиям сразу (союз AND) ну или хотя бы одному из (союз OR).

В условиях мы проверяли равенство или неравенство данных и некоторого значения. Если вы уже забыли – вернитесь и перечитайте.

Этот мини урок мы посвятим ещё одному варианту поиска применимому к строковым переменным – поиску по шаблону. Допустим нам нужно найти всех студентов по имени Илья. В этом случае мы не можем воспользоваться строгим равенством и если выполним следующий запрос то не получим ни одной строки.

			SELECT name, course, score FROM students WHERE name = 'Илья';
		

Не верите – попробуйте сами здесь.

Дело в том что колонка name нашей таблицы содержит и имя и фамилию студентов и правильно следует сформулировать следующий запрос: ВЫБРАТЬ имя, курс, оценку ИЗ студентов ГДЕ имя начинается со слова Илья. Чтобы перевести такой запрос на английский SQL нужно запомнить еще одно слово – LIKE (похож) и написать условие WHERE name LIKE ‘Илья%‘; То есть там где имя похоже на некоторый шаблон (в нашем случае ‘Илья%’).

Что означает знак % в шаблоне? Это обозначение того в колонке после слова Илья могут следовать любые символы в любом (даже нулевом) количестве.

Итак выполним запрос:

			SELECT name, course, score FROM students WHERE name LIKE 'Илья%';
		

И получим следующий результат:

			|--------------------|------------|-------|
| name               | course     | score |
|--------------------|------------|-------|
| Илья Краснов       | Литература | 3     |
| Илья Долгов        | Физика     | 3     |
| Ильяс Мухамеддинов | История    | 4     |
		

Как видите результат включает в себя записи о двух студентах пл имени Илья и одну с именем Ильяс, что полностью соответствует требованиям запроса.

Другой случай если нам нужны строки заканчивающиеся определённым набором букв. Например если мы используем шаблон ‘%ия’ для поиска по полю course и выполним запрос:

			SELECT name, course, score FROM students WHERE course LIKE '%ия';
		

В результате получим список историков и географов. Если не понятно почему это так – напишите в комментариях.

			|--------------------|-----------|-------|
| name               | course    | score |
|--------------------|-----------|-------|
| Ильяс Мухамеддинов | История   | 4     |
| Вера Крпикова      | География | 4     |
| Татьяна Говорова   | История   | 5     |
		

Если же мы используем шаблон ‘%ов%’ для поля name то получим список всех студентов в имени или фамилии которых встречается это буквосочетание в любом месте.

			SELECT name, course, score FROM students WHERE name LIKE '%ов%';
		
			|--------------------|------------|-------|
| name               | course     | score |
|--------------------|------------|-------|
| Сергей Петров      | Физика     | 5     |
| Илья Краснов       | Литература | 3     |
| Илья Долгов        | Физика     | 3     |
| Ильяс Мухамеддинов | История    | 4     |
| Вера Крпикова      | География  | 4     |
| Татьяна Говорова   | История    | 5     |
		

Таким образом в этом уроке мы познакомились с мощным инструментом языка SQL – поиском строк по шаблону.

Для закрепления выполните тесты тут и тут. В случае вопросов пишите комментарии и обращайтесь в телеграм.

Если не возникло вопросов по данной теме – переходите к следующему уроку

SQL
119