Подтвердить что ты не робот

Какая разница между "LIKE" и "=" в SQL?

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

SELECT * FROM users WHERE username="davyjones"

и

SELECT * FROM users WHERE username LIKE "davyjones"

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

4b9b3361

Ответ 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', и вы также может использовать = в этом случае