Шаблоны с LIKE
Знак = сравнивает текст целиком. Иногда известна только его часть: название начинается с S, email заканчивается определённым доменом. Для этого и нужен LIKE. Он сравнивает текст с шаблоном:
SELECT title
FROM games
WHERE title LIKE 'S%'
ORDER BY title;| title |
|---|
| Shadow Ninja |
| Star Pilots |
В шаблоне % заменяет любой текст: любые символы в любом количестве или вообще никаких. 'S%' означает «S, а дальше что угодно», поэтому находит названия, которые начинаются с S. '%s' находит тексты, которые заканчиваются на s, а '%Pro%' — те, в которых где-нибудь есть Pro: в начале, в середине или в конце.
_ (подчёркивание) заменяет ровно один любой символ. Названия, вторая буква которых — o:
SELECT title
FROM games
WHERE title LIKE '_o%'
ORDER BY title;| title |
|---|
| Goal Rush |
| Lost Temple |
| Moon Farm |
| Robot Rebellion |
| … |
В отличие от =, LIKE в SQLite не различает заглавные и строчные буквы: 's%' тоже находит Shadow Ninja и Star Pilots. В других базах данных может быть иначе; например, в PostgreSQL LIKE различает регистр.
NOT LIKE находит тексты, не подходящие под шаблон. Отзывы, комментарий в которых не заканчивается точкой:
SELECT stars, comment
FROM reviews
WHERE comment NOT LIKE '%.'
ORDER BY stars DESC;| stars | comment |
|---|---|
| 5 | Best RPG I have played in years! |
| 4 | Scary! |
Отзывов без комментария в результате нет, хотя отсутствующий комментарий, конечно, не заканчивается точкой. Их комментарий — NULL, а для NULL SQLite не может сказать, подходит он под шаблон или нет. Подробнее — в следующем упражнении.
Типичная ошибка: % со знаком = вместо LIKE. WHERE title = 'S%' ничего не находит: = понимает % буквально и ищет название, состоящее из одной S и знака процента.
Задание
- 1
Покажите имя и email покупателей, у которых email заканчивается на
@mail.com, отсортировав по имени:name email Ava Green ava.green@mail.com Emma Clark emma.clark@mail.com Grace Hall grace.hall@mail.com … … - 2
Ниже покажите названия игр, в которых где-нибудь есть буква k, заглавная или строчная, отсортировав по названию:
title Bakery Story Ice Hockey Pro Knight's Oath Tiny Kingdoms Turbo Karts - 3
А ниже покажите имя и email покупателей, у которых email не заканчивается на
@mail.com, отсортировав по имени:name email Henry Scott henry@scott.dev Jack Harris jack@harris.io Olivia Brown olivia@brownfamily.net