Какая разница между "LIKE" и "=" в SQL?
Есть ли разница между:
SELECT * FROM users WHERE username="davyjones"
и
SELECT * FROM users WHERE username LIKE "davyjones"
(Я думаю, что я испортил синтаксис... простите меня за это,
Я в основном разработчик приложений для настольных приложений)
Ответы
Ответ 1
В соответствии со стандартом 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.
Ответ 2
LIKE разрешает частичное совпадение/использование подстановочных знаков, while = проверяет точное соответствие.
Например
SELECT * FROM test WHERE field LIKE '%oom';
Вернет строки, где значение поля - любое из следующего:
Zoom, Boom, Loom, Groom
Ответ 3
В этом случае нет никакой разницы, которая возникла бы в результатах. Однако для сравнения используется другой метод, и "LIKE" будет намного медленнее.
Посмотрите это на примерах LIKE: http://www.techonthenet.com/sql/like.php
В этом случае вы все равно хотите использовать равные.
Обновить. Обратите внимание, что в столбцах типа CHAR существует принципиальная разница, в которой результаты будут отличаться. Подробнее см. этот ответ. При использовании VARCHAR (предположительно, нормы), приведенные выше эквивалентны, и равны должны быть предпочтительными.
Ответ 4
LIKE
позволяет использовать подстановочные знаки типа %
(любое количество символов здесь) и _
(один символ здесь).
SELECT * FROM users WHERE username LIKE 'joe%'
Выбирает все имена пользователей, начинающиеся с joe
.
Ответ 5
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
Ответ 6
Это даст вам тот же результат. Однако LIKE позволяет использовать подстановочные знаки, например...
SELECT * FROM users WHERE username LIKE 'davy%'
Единственной проблемой синтаксиса были двойные кавычки вместо одиночных кавычек
Ответ 7
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%'
Ответ 8
Условие LIKE
позволяет использовать подстановочные знаки:
SELECT * FROM suppliers
WHERE supplier_name like 'Hew%';
Дополнительные примеры.
и Equals =
используется для согласования равенств.
Ответ 9
Как и оператор сопоставления шаблонов, а =
- оператор точного сопоставления. то есть, когда имя типа W%
означает начало с W
, и после этого один или несколько символов
и =
т.е. где name ='James'
это точное соответствие
Ответ 10
LIKE поддерживает подстановочные знаки. Обычно для шаблона используется символ% или _.
Использование оператора LIKE без подстановочных знаков аналогично использованию оператора =.
Ответ 11
Равны '='
справедливы только для равенства. С другой стороны, LIKE
поддерживает сопоставление подстановок SQL.
Итак, с помощью LIKE
вы можете сделать name like '%jones'
, чтобы получить все имена, заканчивающиеся на jones. С LIKE
символ процента '%'
- это что угодно, длина равна нулю или больше, а символ подчеркивания '_'
- это любой символ.
Ответ 12
Насколько я знаю, нет разницы, кроме затрат времени на два выбора, которые вы написали. Обычно используется LIKE
вместе с %
, что означает "любая строка". Я думаю, что есть и символ, который можно использовать с LIKE
для "любого символа", не уверен, что это без googling.
Но по мере того как ваши два выбора идут, единственное различие, которое я вижу, - это другое время выполнения, так как LIKE
используется в регулярном выражении типа.
Ответ 13
Like
позволяет вам работать с операторами диких карт, вы можете использовать его в своем случае для like 'davyjon%'
, чтобы получить все результаты, начиная с davyjon
, и для получения точного значения вы можете разместить 'davyjones'
, и вы также может использовать =
в этом случае