SQLLab
Теория· 5 мин· 10 XP

LIKE против ILIKE — чувствительность к регистру

Зачем это нужно

LIKE в PostgreSQL чувствителен к регистру: 'air' и 'Air' и 'AIR' — разные шаблоны. Это частая причина «пустого» результата. ILIKE решает проблему.

Аналогия с жизнью

Поиск в Google нечувствителен к регистру: «iPhone» и «iphone» дают одинаковый результат. Поиск в Excel по умолчанию тоже. ILIKE делает поиск таким же — без учёта регистра.

Сравнение LIKE и ILIKE

sql
-- LIKE — чувствителен к регистру
SELECT name FROM products WHERE name LIKE '%air%';
-- Найдёт: ничего! В датасете «Air» с заглавной буквы.

-- ILIKE — нечувствителен к регистру (только PostgreSQL)
SELECT name FROM products WHERE name ILIKE '%air%';
-- Найдёт: AirPods Pro, Кроссовки Nike Air Max

Когда использовать что

СитуацияОператор
Данные хранятся с известным регистромLIKE
Пользователь вводит поисковый запросILIKE
Поиск по категориям (всегда с заглавной)LIKE
Поиск по названиям товаров (разный регистр)ILIKE

Практический пример

sql
-- Поиск по части названия без учёта регистра
SELECT name, price
FROM products
WHERE name ILIKE '%pro%'
ORDER BY price DESC;
-- Найдёт: iPhone 15 Pro, AirPods Pro

NOT LIKE и NOT ILIKE

sql
-- Всё кроме товаров с «Air» в названии
SELECT name FROM products
WHERE name NOT LIKE '%Air%'
ORDER BY name;

Частые ошибки

ILIKE не стандартный SQL — это расширение PostgreSQL. В MySQL используют LIKE (нечувствителен к регистру по умолчанию), в SQLite — LIKE LOWER(). В нашем курсе работаем с PostgreSQL, поэтому ILIKE доступен всегда.

Шаблон в двойных кавычках — WHERE name ILIKE "%air%" — ошибка. Шаблон — это строковое значение, нужны одинарные кавычки: ILIKE '%air%'.

Запомни

LIKE — чувствителен к регистру. ILIKE — нечувствителен (PostgreSQL). Для поискового ввода от пользователя используй ILIKE.


Мини-практика

Какой оператор нужен в каждом случае?

  1. Найти товары с «AirPods» в названии — точно знаем регистр
  2. Искать товары по слову, которое вводит пользователь
  3. Исключить из результатов товары, у которых в названии есть «Pro»
Ответы
  1. LIKE '%AirPods%' — регистр известен
  2. ILIKE '%слово%' — пользовательский ввод, регистр неизвестен
  3. NOT LIKE '%Pro%' или NOT ILIKE '%pro%' в зависимости от того, известен ли регистр

Прочитайте урок до конца — прогресс засчитается автоматически