Базы данных
и язык SQL

Предикат SQL LIKE для поиска строки с заданными символами, страница 2

Назад<<<СодержаниеВперёд>>>

Применение предиката LIKE с составными условиями

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

Рассмотрим наиболее частые составные условия, для задания которых предикат LIKE задействован два раза. Вообще, в запросах с составным условием имя столбца, из которого извлекаются интересующие нас данные, должно повторяться столько раз, сколько раз задействован предикат LIKE. Поэтому неправильным будет следующий синтаксис:

SELECT СТОЛБЦЫ FROM ИМЯ_ТАБЛИЦЫ WHERE ИМЯ_СТОЛБЦА LIKE ВЫРАЖЕНИЕ 1 AND ВЫРАЖЕНИЕ 2

Неправильным будет и такой синтаксис:

SELECT СТОЛБЦЫ FROM ИМЯ_ТАБЛИЦЫ WHERE ИМЯ_СТОЛБЦА LIKE ВЫРАЖЕНИЕ 1 AND LIKE ВЫРАЖЕНИЕ 2

Правильным будет следующий синтаксис:

SELECT СТОЛБЦЫ FROM ИМЯ_ТАБЛИЦЫ WHERE ИМЯ_СТОЛБЦА LIKE ВЫРАЖЕНИЕ 1 AND ИМЯ_СТОЛБЦА LIKE ВЫРАЖЕНИЕ 2

Перейдём к примерам работы с той же базой данных "Театр".

Пример 6. Вывести спектакли, названия которых заканчиваются на 'a', но не на 'ra'.

Пишем запрос в котором предикат LIKE используется первый раз с выражением '%a', а второй раз с отрицанием (NOT) и выражением '%ra':

SELECT Name FROM Play WHERE Name LIKE '%a' AND Name NOT LIKE '%ra'

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

Matilda

Таким образом, запрос, похожий на запрос из примера 3, но дополненный условием отрицания выражения '%ra', исключает из выборки другой результат, также заканчивающийся на 'a', но при этом заканчивающйся на 'ra' - Antony and Cleopatra

Пример 7. Вывести спектакли, в названии которых содержится слово "War", но только в единственном числе (не "Wars").

Пишем запрос в котором перевый рах с предикатом LIKE используем выражение '%War%', а второй раз с отрицанием предиката LIKE - выражение '%Wars%':

SELECT Name FROM Play WHERE Name LIKE '%War%' AND Name NOT LIKE '%Wars%'

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

The War That Never Ends

Название The Wars of the Roses, которое выводится в похожем примере 4, в данном случае исключено, так как содержит слово War во множественном числе (Wars).

Пример 8. Вывести спектакли, названия которых начинаются на 'M' и содержат тире (" - ").

Пишем запрос в котором с предикатом LIKE используем выражение '% % % % % %':

SELECT Name FROM Play WHERE Name LIKE 'M_' AND Name LIKE '%-%'

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

Morte d Arthur - Sir Thomas Malory
Назад<<<СодержаниеВперёд>>>

Поделиться с друзьями