Задачи на SELECT и WHERE
Выборка и фильтры·junior

Фильмы со словом «love» в названии

Задача

Ты аналитик в сети видеопроката. К Дню всех влюблённых маркетинг собирает тематическую подборку и просит: «Дай все фильмы, у которых в названии есть слово love — повесим их на главную под баннер про романтику».

Верни film_id и title всех подходящих фильмов. Регистр в названии заранее неизвестен, так что искать надо и Love, и LOVE, и love.

Схема данных

Учебная база проката dvdrental, одна таблица:

  • film(film_id, title, ...) — каталог фильмов; title — текстовое название.

Решение

SELECT film_id, title
FROM film
WHERE title ILIKE '%love%'
ORDER BY title;

Разбор

Ключевая деталь — поиск по подстроке. Знак % в шаблоне означает «любое количество любых символов», так что '%love%' ловит слово в любом месте названия: и в начале, и в середине, и в конце.

Почему ILIKE, а не LIKE? Обычный LIKE в PostgreSQL чувствителен к регистру: '%love%' не найдёт фильм Lovely In The Saddle. ILIKE — это регистронезависимая версия (буква I от insensitive), она уравнивает L и l. Тот же эффект даёт LOWER(title) LIKE '%love%', но ILIKE короче и читается честнее. На собеседовании про этот ILIKE любят спросить: в стандартном SQL его нет, это расширение PostgreSQL — в MySQL пришлось бы городить LOWER().

Осторожно с ловушкой: '%love%' найдёт не только слово «love», но и подстроку внутри других слов — например Gloves или Clover, если бы такие названия были. Если нужно именно отдельное слово, шаблон усложняется до регулярного выражения (title ~* '\ylove\y'), но для маркетинговой подборки «где-то мелькает love» простого ILIKE достаточно — и это правильный уровень строгости для задачи.

Если бы фильтр был по числовому полю, а не по тексту, никакой LIKE не понадобился бы — там работают обычные сравнения, как в задаче «сколько фильмов длиннее двух часов».

Ожидаемый результат

film_id | title
--- | ---
374 | Graffiti Love
448 | Idaho Love
449 | Identity Lover
458 | Indian Love
511 | Lawrence Love
535 | Love Suicides
536 | Lovely Jingle
537 | Lover Truman
538 | Loverboy Attacks
852 | Strangelove Desire

Прорешай такие задачи сам

Читать разбор полезно, а настоящая прокачка — самому писать запросы и получать обратную связь. В симуляторе живая база и проверка запросов, лёгкий режим — бесплатно.

Прорешать в бесплатной песочнице

Смежные задачи

Вопросы по теме