В чем разница между "LIKE" и "=" в SQL? - PullRequest
41 голосов
/ 01 октября 2009

Есть ли разница между:

SELECT * FROM users WHERE username="davyjones"

и

SELECT * FROM users WHERE username LIKE "davyjones"

(мне кажется, я запутался в синтаксисе ... простите за это,
Я в основном разработчик настольных приложений)

Ответы [ 13 ]

39 голосов
/ 01 октября 2009

LIKE разрешает частичное сопоставление / использование подстановочных знаков, а = проверяет точное совпадение.

Например

SELECT * FROM test WHERE field LIKE '%oom';

Будет возвращать строки, где значение поля является одним из следующих:

Zoom, Boom, Loom, Groom
31 голосов
/ 01 октября 2009

Согласно стандарту SQL, разница заключается в обработке конечных пробелов в столбцах CHAR. Пример:

create table t1 ( c10 char(10) );
insert into t1 values ('davyjones');

select * from t1 where c10 = 'davyjones';
-- yields 1 row

select * from t1 where c10 like 'davyjones';
-- yields 0 rows

Конечно, при условии, что вы запускаете это на стандартной СУБД. Кстати, это одно из основных различий между CHAR и VARCHAR.

12 голосов
/ 01 октября 2009

В этом случае нет никакой разницы, что будет в результатах. Однако для сравнения используется другой метод, и «LIKE» будет намного медленнее.

Проверьте это на примерах LIKE: http://www.techonthenet.com/sql/like.php

В этом случае вы все еще хотите использовать равно.

Обновление : обратите внимание, что есть существенная разница, когда речь идет о столбцах типа CHAR, в которых результаты будут отличаться. См. этот ответ для более подробной информации. При использовании VARCHAR (предположительно, нормы) вышеприведенные значения эквивалентны, и предпочтение должно быть равно.

4 голосов
/ 17 июня 2011
create table A (id int,name varchar(30))

insert into A values(4,'subhash')

Используйте конечные пробелы для поиска в поле имени:

select * from A where name='Subhash '
--Yields 1 row
select * from A where name like 'Subhash '
--Yields 0 row
4 голосов
/ 01 октября 2009

LIKE разрешает использование подстановочных знаков, таких как % (любое количество символов здесь) и _ (один символ здесь).

SELECT * FROM users WHERE username LIKE 'joe%'

Выбирает все имена пользователей, начинающиеся с joe.

3 голосов
/ 01 октября 2009

LIKE ищет шаблон.

/* Returns all users whose username starts with "d" */
SELECT * FROM users WHERE username LIKE 'd%'

/* Returns all users whose username contains "dav" */
SELECT * FROM users WHERE username LIKE '%dav%'
2 голосов
/ 01 октября 2009

Это даст вам тот же результат. Однако LIKE допускает использование подстановочных знаков, например ...

SELECT * FROM users WHERE username LIKE 'davy%'

Единственной проблемой синтаксиса были двойные кавычки вместо одинарных кавычек

1 голос
/ 29 ноября 2009

Like - оператор сопоставления с образцом, а = - оператор точного сопоставления. то есть имя где W% означает начало с W и после этого один или несколько символов и = т.е. где имя ='James' это точное совпадение

1 голос
/ 01 октября 2009

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

SELECT * FROM suppliers
WHERE supplier_name like 'Hew%';

См. Больше примеров.

и Equals = используется для сравнения на равенство.

1 голос
/ 01 октября 2009

LIKE поддерживает подстановочные знаки. Обычно он использует символ% или _ для подстановочного знака.

Использование оператора LIKE без подстановочных знаков аналогично использованию оператора =.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...