Данная статья относится к циклу статей, посвященных PostgreSQL. В предыдущей статье мы говорили об операторе PostgreSQL BETWEEN. Теперь же мы углубимся в изучение операторов PostgreSQL LIKE и ILIKE, необходимых для запроса данных с использованием метода сопоставления с образцом.
Введение в оператор PostgreSQL LIKE
Предположим, что менеджер магазина просит вас найти клиента, имя которого точно не помнит. Единственное в чём он уверен — имя начинается с Jen. Как вы найдёте нужного клиента? Вы можете прибегнуть к таблице customer и проверить по столбцу имён, есть ли в нём кто-нибудь чьё имя начинается с Jen. Однако, это немного утомительно, потому что в таблице customer много строк.
К счастью, вы можете использовать оператор PostgreSQL LIKE, как показано в следующем запросе:
SELECT
first_name,
last_name
FROM
customer
WHERE
first_name LIKE 'Jen%';
Обратите внимание, что условие WHERE содержит специальное выражение: first_name, оператор LIKE и строку, содержащую знак процента (%), называемое паттерном.
Запрос возвращает строки, значения которых в первом столбце имён начинаются с Jen и могут сопровождаться любой последовательностью символов. Этот метод называется методом сопоставления с образцом.
Вы создаёте паттерн объединяя строку с подстановочными знаками и используя операторы LIKE и NOT LIKE, чтобы найти совпадения. PostgreSQL предоставляет два подстановочных знака:
- Процент (%) для сопоставления любого количества символов.
- Нижнее подчёркивание (_) для сопоставления любого единичного символа.
Синтаксис вызова оператора PostgreSQL LIKE выглядит следующим образом:
string LIKE pattern
Выражение возвращает true если строка совпадает с паттерном, в противном случае — false.
Вы можете объединить оператор LIKE с оператором NOT, как показано ниже:
string NOT LIKE pattern
Выражение возвращает true, если оператор LIKE возвращает false и наоборот.
Если паттерн не содержит подстановочных знаков, оператор LIKE выступает в роли оператора равенства (=).
Примеры использования метода сопоставления с образцом в PostgreSQL
Примеры использования оператора PostgreSQL LIKE
Обратите внимание на следующий пример:
SELECT
'foo' LIKE 'foo', -- true
'foo' LIKE 'f%', -- true
'foo' LIKE '_o_', -- true
'bar' LIKE 'b_'; -- false
Как это работает.
- Первое выражение возвращает true, так как паттерн foo не содержит подстановочных знаков, из-за чего оператор LIKE выступает в роли оператора равенства (=).
- Второе выражение возвращает true, так как оно соответствует любой строке, начинающейся с буквы f, сопровождающейся любым количеством символов.
- Третье выражение возвращает true, так как паттерн (_o_) соответствует любой строке, начинающейся с любого единичного символа, сопровождающейся буквой o и оканчивающейся любым единичным символом.
- Четвёртое выражение возвращает false, так как паттерн b_ начинается с буквы b и оканчивается единичным символом.
Вы можете использовать подстановочный знак в начале и/или в конце паттерна. Например, следующий запрос возвращает клиентов, имена которых содержат строку er, т.е Jenifer, Kimberly и так далее.
SELECT
first_name,
last_name
FROM
customer
WHERE
first_name LIKE '%er%'
Вы можете объединить знак процента (%) со знаком подчёркивания (_), чтобы получился следующий паттерн:
SELECT
first_name,
last_name
FROM
customer
WHERE
first_name LIKE '_her%';
Выражение соответствует клиенту, чьё имя начинается с любого единичного символа, сопровождается литеральной строкой her и оканчивается любым количеством символов.
Примеры использования оператора PostgreSQL NOT LIKE
Следующий запрос возвращает клиента, чьё имя не начинается с Jen:
SELECT
first_name,
last_name
FROM
customer
WHERE
first_name NOT LIKE 'Jen%';
Обратите внимание, что мы использовали оператор NOT LIKE в условии WHERE.
Разновидности оператора PostgreSQL LIKE
PostgreSQL предоставляет оператор ILIKE, выступающий в роли оператора LIKE. К тому же, оператор ILIKE сопоставляет значение без учета регистра. Приведём пример:
SELECT
first_name,
last_name
FROM
customer
WHERE
first_name ILIKE 'BAR%';
Паттерн BAR% сопоставляет любую строку, которая начинается с BAR, Bar, BaR и так далее. Если же в этом случае вы будете использовать оператор LIKE, запрос не вернёт ни строчки.
PostgreSQL также предоставляет и другие операторы, которые действуют как LIKE, NOT LIKE, ILIKE и NOT ILIKE:
- ~~ эквивалентно LIKE
- ~~* эквивалентно ILIKE
- !~~ эквивалентно NOT LIKE
- !~~* эквивалентно NOT ILIKE
На этом мы заканчиваем изучение оператора PostgreSQL LIKE, позволяющего запросить данные с использованием метода сопоставления с образцом. Далее речь пойдёт об операторе PostgreSQL IS NULL.
Источник: PostgreSQL Tutorial from Scratch