← Назад к вопросам

Что такое Like в SQL?

1.0 Junior🔥 301 комментариев
#Entity Framework и ORM#Базы данных и SQL

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое оператор LIKE в SQL?

LIKE — это оператор языка SQL, используемый для поиска указанного шаблона в столбце. Он применяется в предложении WHERE для фильтрации строк по частичному совпадению текстовых данных, когда точное значение неизвестно или требуется найти вариации.

Основное назначение и принцип работы

Оператор LIKE позволяет выполнять частичный поиск в текстовых полях (типы CHAR, VARCHAR, TEXT и т.д.) с использованием специальных символов-шаблонов (wildcards). В отличие от оператора =, который ищет точное совпадение, LIKE даёт гибкость для поиска строк, содержащих определённые подстроки, начинающихся или заканчивающихся конкретными символами.

Ключевые символы-шаблоны (Wildcards)

В большинстве СУБД (SQL Server, MySQL, PostgreSQL, SQLite) поддерживаются два основных wildcard-символа:

  1. % (процент) — представляет собой ноль, один или несколько любых символов.
    *   `'А%'` — находит строки, начинающиеся с "А".
    *   `'%ком'` — находит строки, заканчивающиеся на "ком".
    *   `'%тест%'` — находит строки, содержащие "тест" в любой позиции.

  1. _ (нижнее подчёркивание) — представляет собой ровно один любой символ.
    *   `'_рр'` — находит трёхсимвольные строки, где последние два символа "рр" (например, "пар", "мир").
    *   `'С_чка'` — находит пятисимвольные строки, начинающиеся на "С" и заканчивающиеся на "чка" (например, "Сучка", "Сушка").

Примеры использования в запросах

Предположим, у нас есть таблица Products:

CREATE TABLE Products (
    Id INT PRIMARY KEY,
    Name NVARCHAR(100),
    Description TEXT
);

Пример 1: Поиск по началу строки Найдём все товары, название которых начинается на "Молоко".

SELECT * FROM Products
WHERE Name LIKE 'Молоко%';

Результат может включать: "Молоко", "Молоко 3.2%", "Молоко пастеризованное".

Пример 2: Поиск по вхождению подстроки Найдём все товары, в описании которых встречается слово "натуральный".

SELECT Id, Name FROM Products
WHERE Description LIKE '%натуральный%';

Пример 3: Поиск по фиксированной маске Найдём товары, имя которых состоит из 5 символов и начинается на "Сыр".

SELECT * FROM Products
WHERE Name LIKE 'Сыр__'; -- Два символа '_' после "Сыр"

Это может найти "Сырки", "Сырок" и т.д.

Пример 4: Комбинирование шаблонов Найдём товары, имя которых начинается на "Йог" и содержит "урт" далее в строке.

SELECT * FROM Products
WHERE Name LIKE 'Йог%урт%';

Важные особенности и производительность

  • Регистрозависимость: Поведение LIKE в отношении регистра зависит от коллации (collation) базы данных и настроек сервера. Например, в SQL Server по умолчанию поиск часто нечувствителен к регистру, а в PostgreSQL — чувствителен. Для регистронезависимого поиска часто используют функции UPPER() или LOWER():
    SELECT * FROM Products WHERE LOWER(Name) LIKE '%йогурт%';
    
  • Производительность: Использование LIKE с шаблоном, начинающимся с % (например, '%йогурт'), отключает использование стандартных индексов по этому столбцу, что может привести к полному сканированию таблицы (table scan) и замедлению запроса на больших объёмах данных. Для ускорения таких поисков используют полнотекстовый поиск (FULLTEXT INDEX) или специализированные СУБД (Elasticsearch).
  • Экранирование специальных символов: Если нужно найти сам символ % или _, его необходимо экранировать. Способ экранирования зависит от СУБД. Часто используется ключевое слово ESCAPE:
    SELECT * FROM Products WHERE Name LIKE '100\% скидка' ESCAPE '\';
    

Альтернативы и дополнения

  • NOT LIKE — выполняет обратную операцию, выбирая строки, которые НЕ соответствуют шаблону.
    SELECT * FROM Products WHERE Name NOT LIKE 'Тест%';
    
  • Регулярные выражения: В некоторых СУБД (PostgreSQL с оператором ~, MySQL с REGEXP) доступна более мощная и гибкая фильтрация с помощью регулярных выражений.
  • Полнотекстовый поиск (FULLTEXT SEARCH): Для сложного морфологического поиска по словам, синонимам и релевантности в больших текстах LIKE не подходит. В этом случае используют встроенные механизмы полнотекстового поиска (CONTAINS, FREETEXT в SQL Server, MATCH ... AGAINST в MySQL, tsvector в PostgreSQL).

Заключение

LIKE — это фундаментальный и незаменимый оператор для частичного поиска по текстовым данным в SQL. Его сила — в простоте и использовании шаблонов % и _. Однако для сложных задач поиска по большим текстовым массивам или с высокими требованиями к производительности следует рассматривать специализированные технологии, такие как полнотекстовые индексы или отдельные поисковые системы. Понимание нюансов работы LIKE (регистр, производительность, экранирование) критически важно для написания эффективных и корректных запросов.