Is there any difference between:
SELECT * FROM users WHERE username="davyjones"
and
SELECT * FROM users WHERE username LIKE "davyjones"
Is there any difference between:
SELECT * FROM users WHERE username="davyjones"
and
SELECT * FROM users WHERE username LIKE "davyjones"
LIKE
allows partial matching / use of wildcards, while =
checks for exact matches.
For example
SELECT * FROM test WHERE field LIKE '%oom';
Will return rows where field value is any of the following:
Zoom, Boom, Loom, Groom
As per SQL standard, the difference is treatment of trailing whitespace in CHAR columns. Example:
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
Of course, assuming you run this on a standard-compliant DBMS. BTW, this is one the main differences between CHARs and VARCHARs.
In that case, there is no difference that would come up in the results. However, it uses a different method for comparision, and the "LIKE" would be much slower.
Check out this for examples of LIKE : http://www.techonthenet.com/sql/like.php
In this case, you still want to use the equals.
Update: Note that there is a crucial difference when it comes to CHAR type columns in which the results will be different. See this answer for more details. When using VARCHAR (presumably the norm), the above are equivalent and equals is to be preferred.
LIKE
allows wildcards like %
(any number of characters here) and _
(one character here).
SELECT * FROM users WHERE username LIKE 'joe%'
Selects all usernames starting with joe
.
LIKE searches for a pattern.
/* 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%'
That will give you the same result. However, LIKE allows wildcards, for example...
SELECT * FROM users WHERE username LIKE 'davy%'
The only syntax problem was double quotes instead of single quotes
The LIKE
condition allows you to use wildcards:
SELECT * FROM suppliers
WHERE supplier_name like 'Hew%';
and Equals =
is used for equality matching.
As far as I know, there is no difference but a time cost to the two selects you wrote. Usually one uses LIKE
together with %
, meaning 'any string'. I think there's also a character that can be used with LIKE
for 'any character', not sure what that is without googling.
But as your two selects go, the only difference I see is a different run time, since LIKE
is used in a regexp-sort-of-fashion.
Equals '='
is just for equality. On the other hand, LIKE
supports SQL wildcard matching.
So, with LIKE
you can do name like '%jones'
to get all the names ending in jones. With LIKE
, the percent '%'
character is anything, length zero or more, and the underscore character, '_'
, is any one character.