52

Is there any difference between:

SELECT * FROM users WHERE username="davyjones"

and

SELECT * FROM users WHERE username LIKE "davyjones"
2
  • 1
    possible duplicate of Equals(=) vs. LIKE Commented Aug 1, 2014 at 19:32
  • Here, the coming output is same but if i talk about the time consumption then where clause is take more time then the like clause if i imagine that this query is executing on a large data set. Commented Dec 5, 2020 at 8:38

14 Answers 14

49

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
3
  • 1
    It won't return those rows if column is CHAR(5) instead of VARCHAR(5). Commented Oct 1, 2009 at 16:39
  • 1
    @codeburger: MySQL has years before it gets anywhere near being SQL standard compliant ;) Commented Oct 2, 2009 at 10:14
  • @MilanBabuškov Its still nice to say it, MySQL is a free good DBMS for small projects!
    – Kil jeaden
    Commented Dec 14, 2019 at 18:14
41

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.

6
  • 3
    because 'test' is stored as 'test' + 4 spaces. SQL standard says that LIKE should not match that, while = should. For VARCHAR columns there is no difference. Commented Oct 1, 2009 at 16:35
  • 11
    Yet another reason for never using char data type unless you will always have that exact number of characters.
    – HLGEM
    Commented Oct 1, 2009 at 17:26
  • 4
    @HLGEM -- who needed another reason?
    – tvanfosson
    Commented Oct 2, 2009 at 10:43
  • 2
    What RDBMSs does this apply to? Doesn't make any difference in SQL Server Commented Jan 2, 2011 at 0:19
  • 1
    One extra case that may help understanding one of the differences : stackoverflow.com/questions/10715609/… Commented Jun 1, 2016 at 10:57
13

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.

5
  • 1
    Potentially in a stored procedure, however in testing in SQL Server through dynamic SQL, I've noticed it does not optimize this. I've also run a test on Oracle, and it doesn't seem to optimize Dynamic SQL.
    – Erich
    Commented Oct 1, 2009 at 16:34
  • 1
    I find it amazing how wrong answers often get accepted on SO. :( Commented Oct 1, 2009 at 16:36
  • In what manner would you say that my answer is wrong? In this situation, LIKE and '=' have identical functionality. He really means '=', and thus should. I also pointed out a bit of documentation on how LIKE should be used... Pretty sure I answered the question as much as everyone else.
    – Erich
    Commented Oct 1, 2009 at 16:42
  • 1
    See my answer below, and read up on SQL specs. There is an important difference if you use CHAR columns. Commented Oct 1, 2009 at 16:44
  • Ah, I knew of that difference, however I hadn't run into that in a while. I made the assumption he was using VARCHAR, since I (and my company) tend to use it any time the data doesn't have a fixed length.
    – Erich
    Commented Oct 1, 2009 at 16:46
5
create table A (id int,name varchar(30))

insert into A values(4,'subhash')

Use the trailing whitespace to search the name field:

select * from A where name='Subhash '
--Yields 1 row
select * from A where name like 'Subhash '
--Yields 0 row
4

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.

3

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%'
2

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

1

LIKE supports wildcards. Usually it uses the % or _ character for the wildcard.

Using the LIKE operator with no wildcards is the same as using the = operator.

1

The LIKE condition allows you to use wildcards:

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

See more examples.

and Equals = is used for equality matching.

1

Like is pattern matching operator and = is exact matching operator. i.e. where name like W% it means start with W and after that one or more characters and = i.e. where name ='James' this is exact matching

1

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.

0

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.

0

Like gets you to work with wild card operators, you may use it in your case for like 'davyjon%' to get all the results starting with davyjon, and to get the exact you may place 'davyjones' and you may also use = in this case

-1

I know this question is too old, but I get many others will try to find out the answer even nowadays. In many books, LIKE may come slower than '-' in most case, except when you want to compare String.

Not the answer you're looking for? Browse other questions tagged or ask your own question.