zaLinux.ru

В чём различия оператора LIKE и знака равно (=) в MySQL/MariaDB. Как пользоваться LIKE в SQL


Оглавление

1. Что использовать для поиска в MySQL/MariaDB: оператор LIKE или знак равно (=)

2. Когда использовать знак равно (=) в SQL

3. Когда использовать оператор LIKE в SQL

4. Ещё больше различий под капотом

Заключение


Что использовать для поиска в MySQL/MariaDB: оператор LIKE или знак равно (=)

Оператор LIKE и знак равно (=) используются в SQL запросах для поиска строк и чисел. Причём иногда они могут быть взаимозаменяемыми как в следующих примерах, дающих один и тот же результат.

Пример, использующий LIKE:

SELECT * FROM `TestTABLE` WHERE `id` LIKE '1';

Пример, использующий знак равно:

SELECT * FROM `TestTABLE` WHERE `id` = '1';

Эта заметка объяснит разницу между LIKE и равно (=) и покажет примеры их использования в MySQL и MariaDB.

Когда использовать знак равно (=) в SQL

Знак равно (=) в SQL запросах используется для поиска точного совпадения строки или числа. Выражения со знаком равно не могут использовать подстановочные символы.

Причём говоря «точное совпадение» всегда нужно помнить про Collation, которая применяется в том числе и при выполнении поиска с помощью знака равно (=). Это означает что регистр, а также знаки акцента не учитываются. Например, SQL-запрос

SELECT * FROM `TestTABLE` WHERE `test_column` = 'THIS IS A TEST STRING';

Найдёт следующую строку (содержание совпадает, но регистр букв другой):

This is a test string

Искомая строка, при использовании знака равно, не может содержать подстановочные символы.

Когда использовать оператор LIKE в SQL

Оператор LIKE может искать как точное совпадение, так и поиск с подстановочными символами. При использовании оператора LIKE также используется Collation, то есть регистр букв и знаки акцента не учитываются.

Оператор LIKE понимает следующие подстановочные символы:

  • Знак процента (%) представляет ноль, один или несколько символов. То есть это может быть в диапазоне «от ничего — до что угодно». Это может быть любое количество символов, например, сто букв «А». Либо это может быть полное отсутствие символов.
  • Знак подчёркивания (_) представляет ровно один символ.

Следующий пример найдёт строку «This is a test string»:

SELECT * FROM `TestTABLE` WHERE `test_column` LIKE 'This is a test%';



А следующий вариант с символом «_» не найдёт тестовую строку, поскольку после слова test должен идти только один символ:

SELECT * FROM `TestTABLE` WHERE `test_column` LIKE 'This is a test_';

Но если мы используем шесть символов подчёркивания, то строка «This is a test string» вновь будет найдена:

SELECT * FROM `TestTABLE` WHERE `test_column` LIKE 'This is a test_______';

Подстановочные символы могут стоять в любой части шаблона поиска (в конце, в начале, внутри):

SELECT * FROM `TestTABLE` WHERE `test_column` LIKE '%test%';

Подстановочные символы можно комбинировать:

SELECT * FROM `TestTABLE` WHERE `test_column` LIKE '%t__t%';

Можно использовать любое количество подстановочных символов и чередовать их с другими символами и буквами:

SELECT * FROM `TestTABLE` WHERE `test_column` LIKE '%an%rs%';


Ещё больше различий под капотом

Кроме уже описанных различий, имеются различия в процессе сравнения (поиска) — они не влияют на конечный результат, и даже не влияют на производительность если вы работаете с базами данных небольшого или среднего размера.

Тем не менее, если вы работаете с очень большими базами данных, то вам нужно будет углубиться до уровня исходного кода MySQL/MariaDB. Либо просто провести тесты для оценки производительности альтернативных SQL-запросов.

К счастью, большинству пользователей такие подробности знать не обязательно, поскольку, повторим, результат поиска от них не зависит.

Заключение

Итак, оператор LIKE и знак равно (=) имеют следующие общие черты:

  1. Могут применяться для поиска чисел или строк
  2. Используют Collation, то есть выполняют поиск без учёта регистра букв

Различия между оператором LIKE и знаком равно (=):

  1. Оператор LIKE может использовать подстановочные знаки «%» и «_», а знак равно не может их использовать
  2. Оператор LIKE может найти строку по искомой подстроке, а знак равно (=) может искать только полностью совпадающие строки

Если вы работаете с очень большими таблицами и вы можете использовать альтернативные запросы с LIKE или знаком равно, то вам нужно провести тесты для оценки производительности и выбора наиболее подходящего метода поиска. Обычным пользователям об этом не стоит беспокоиться.


Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *