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

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

Часто с помощью предиката SQL LIKE найти нужную строку в текстовых значениях таблицы проще, чем с помощью оператора равенства (=). Предикат LIKE используется в секции WHERE. После предиката прописывается выражение, содержащее символы алфавита, а также специальные символы - знак процента (%) и подчёркивание (_).

  • Символ % соответствует любому количеству любых символов, а также их отсутствую.
  • Символ _ соответствует ровно одному любому символу.

Приведём виды наиболее распространённых выражений, которые используются с предикатом LIKE для поиска подстроки.

  • 'xyz%' - любые строки, которые начинаются с букв xyz;
  • 'xyz_' - строка длиной в определённое количество символов, которая обязательно начинается с указанных букв;
  • '%z' - любая последовательность символов, которая заканчивается символом z;
  • '%Word%' - любая последовательность символов, содержащая слово 'Word' в любой позиции строки;
  • '% % %' - строка, содержащая не менее двух пробелов.

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

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

В примерах будем работать с базой данных "Театр". Таблица Play содержит данные о постановках. Таблица Team - о ролях актёров. Таблица Actor - об актёрах. Таблица Director - о режиссёрах. Поля таблиц, первичные и внешние ключи можно увидеть на рисунке ниже (для увеличения нажать левой кнопкой мыши). Данные будем извлекать из одной таблицы - Play.

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

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

SELECT Name FROM Play WHERE Name LIKE 'King%'

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

King Lear

Пример 2. Вывести спектакли, названия которых начинаются с буквы 'O' и содержат 7 символов.

Пишем запрос в котором с предикатом LIKE используем выражение 'O______' (подчёркивание проставлено 6 раз):

SELECT Name FROM Play WHERE Name LIKE 'O______'

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

Othello

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

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

SELECT Name FROM Play WHERE Name LIKE '%a'

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

Matilda
Antony and Cleopatra

Пример 4. Вывести спектакли, в названии которых содержится слово "War", например, такие как "The War That Never Ends", "The Wars of the Roses", но не "Howards End".

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

SELECT Name FROM Play WHERE Name LIKE '%War%'

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

The Wars of the Roses
The War That Never Ends

Пример 5. Вывести спектакли, в названиях которых содержится не менее пяти пробелов.

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

SELECT Name FROM Play WHERE Name LIKE '% % % % % %'

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

Jeeves and Wooster in Perfect Nonsense
All s Well That Ends Well
Morte d Arthur - Sir Thomas Malory

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

Реляционные базы данных и язык SQL