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