Разница между LIKE и = в MYSQL?

В чем разница между

SELECT foo FROM bar WHERE foobar='$foo' 

А ТАКЖЕ

 SELECT foo FROM bar WHERE foobar LIKE'$foo' 

LIKE может выполнять подстановочные знаки:

 SELECT foo FROM bar WHERE foobar LIKE "Foo%" 

Если вам не требуется сопоставление шаблонов, используйте вместо = LIKE. Это быстрее и безопаснее. (Вы используете параметризованные запросы, верно?)

= в SQL делает точное сопоставление.

LIKE выполняет сопоставление подстановочных знаков, используя «%» в качестве символа совпадения символов и символ «_» в качестве символа соответствия одного символа. ‘\’ – это escape-символ по умолчанию.

foobar = '$foo' и foobar LIKE '$foo' будут вести себя одинаково, потому что ни одна строка не содержит подстановочный знак.

foobar LIKE '%foo' будет соответствовать любому, что заканчивается на ‘foo’.

LIKE также имеет предложение ESCAPE , поэтому вы можете установить escape-символ. Это позволит вам сопоставить буквальные «%» или «_» внутри строки. Вы также NOT LIKE .

Сайт MySQL содержит документацию по оператору LIKE . Синтаксис

 expression [NOT] LIKE pattern [ESCAPE 'escape'] 

Имейте в виду, что MySQL будет делать отливки в зависимости от ситуации: LIKE будет выполнять строковое литье, тогда как = будет выполнять int cast. Учитывая ситуацию:

  (int) (vchar2) id field1 field2 1 1 1 2 1 1,2 

SELECT * FROM test AS a LEFT JOIN test AS b ON a.field1 LIKE b.field2

будет производить

 id field1 field2 id field1 field2 1 1 1 1 1 1 2 1 1,2 1 1 1 

в то время как

SELECT * FROM test AS a LEFT JOIN test AS b ON a.field1 = b.field2

будет производить

 id field1 field2 id field1 field2 1 1 1 1 1 1 1 1 1 2 1 1,2 2 1 1,2 1 1 1 2 1 1,2 2 1 1,2 

Согласно странице ссылок MYSQL , конечные пробелы имеют значение LIKE, но не =, и вы можете использовать подстановочные знаки,% для любых символов и _ для ровно одного символа.

Я думаю, что с точки зрения скорости = быстрее, чем LIKE. Как указано, = делает точное совпадение, и LIKE может использовать подстановочный знак, если это необходимо.

Я всегда использую знак =, когда знаю значения чего-то. Например

 select * from state where state='PA' 

Тогда для подобных я использую такие вещи, как:

 select * from person where first_name like 'blah%' and last_name like 'blah%' 

Если вы используете инструмент Oracle Developers Tool, вы можете проверить его с помощью Explain, чтобы определить влияние на базу данных.

Конечный результат будет таким же, но механизм запроса использует другую логику, чтобы получить ответ. Как правило, запросы LIKE записывают больше циклов, чем запросы «=». Но когда не задан символ подстановки, я не уверен, как оптимизатор может это обработать.

С примером в вашем вопросе нет разницы.

Но, как Джесси сказал, что вы можете использовать подстановочные знаки

 SELECT foo FROM bar WHERE foobar LIKE "Foo%" SELECT foo FROM bar WHERE foobar NOT LIKE "%Foo%" 

Больше информации:

http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html

Немного о google не болит …

Предложение WHERE с равным знаком (=) отлично работает, если мы хотим сделать точное совпадение. Но может быть требование, когда мы хотим отфильтровать все результаты, где foobar должен содержать «foo». Это можно обрабатывать с помощью предложения SQL LIKE вместе с предложением WHERE.

Если предложение SQL LIKE используется вместе с% символов, оно будет работать как шаблон.

 SELECT foo FROM bar WHERE foobar LIKE'$foo%' 

Без символьного символа предложение LIKE очень похоже на знак равенства с предложением WHERE.

В вашем примере они семантически равны и должны возвращать один и тот же результат.

Однако LIKE даст вам возможность сопоставления шаблонов с подстановочными знаками.

Следует также отметить, что = может дать вам повышение производительности в некоторых системах, поэтому, если вы, например, ищете номер exakt, =, то предпочтительный метод.

Похоже, что вышло из скрипта PHP. Намерение состояло в том, чтобы сопоставить содержимое переменной $foo с полем базы данных foo , но я уверен, что он должен был быть написан в двойных кавычках , поэтому содержимое $ foo будет отправлено в запрос.

Как вы выразились, нет НИКАКОЙ разницы.

Вероятно, это может быть медленнее, но я уверен, что MySQL понимает, что в строке поиска нет подстановочных знаков, поэтому в любом случае это не будет делать LIKE-сопоставление patter, так что не имеет значения.

В моем случае я считаю, что Быть быстрее, чем =

  • Like тому, как в первый раз было выбрано число строк в 0.203 с, затем 0.140 секунд

  • = возвращает то же количество строк в 0.156 сек постоянно

Сделайте свой выбор

Я нашел важное различие между LIKE и знаком равенства = !

Пример: у меня есть таблица с полем «ID» (тип: int (20)) и запись, содержащая значение «123456789»,

Если я сделаю:

 SELECT ID FROM example WHERE ID = '123456789-100' 

Запись с ID = ‘123456789’ найдена (неверный результат)

Если я сделаю:

 SELECT ID FROM example WHERE ID LIKE '123456789-100' 

Запись не найдена (это правильно)

Итак, по крайней мере для полей INTEGER это кажется важным отличием …

  • Как создать правильную строку подключения MySQL?
  • Примечание. Преобразование массива в строку в
  • Как восстановить таблицу InnoDB?
  • Как определить, сколько места на диске занимает определенная таблица MySQL?
  • Поиск строки в текстовом столбце в MySQL
  • Подключение к серверу MySQL через SSH в PHP
  • MySQL LIKE против LOCATE
  • Как импортировать файл excel в базу данных MySQL
  • Как изменить столбцы Mysql?
  • MySQL TEXT против BLOB против CLOB
  • Объединить несколько дочерних строк в одну строку MYSQL
  • Давайте будем гением компьютера.