是否有任何区别:SQL中的“LIKE”和“=”有什么区别?
SELECT * FROM users WHERE username="davyjones"
和
SELECT * FROM users WHERE username LIKE "davyjones"
(我想我已经贻误了语法......原谅我说,
我主要是一个桌面应用程序开发人员)
是否有任何区别:SQL中的“LIKE”和“=”有什么区别?
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
当然,假设您在符合标准的DBMS上运行此操作。顺便说一下,这是CHAR和VARCHAR之间的主要区别之一。
为什么第二个例子会产生0行?由于'test'被存储为'test'+ 4个空格,所以这两个statememts与我的测试数据 – 2009-10-01 16:33:59
相同。 SQL标准说LIKE不应该匹配那个,while = should。对于VARCHAR列,没有区别。 – 2009-10-01 16:35:15
从来没有使用char数据类型的另一个原因,除非你总是有确切数量的字符。 – HLGEM 2009-10-01 17:26:29
LIKE
允许部分匹配/使用通配符,而=
检查完全匹配。
例如
SELECT * FROM test WHERE field LIKE '%oom';
将返回行,其中字段值是以下任意的:
Zoom, Boom, Loom, Groom
如果column是CHAR(5)而不是VARCHAR,它将不会返回这些行(5)。 – 2009-10-01 16:39:51
@Milan:它将在MySQL – 2009-10-01 16:50:31
@codeburger:MySQL有多年之后,它已经接近SQL标准兼容;) – 2009-10-02 10:14:19
LIKE支持通配符。通常它使用通配符的%或_字符。
使用不带通配符的LIKE运算符与使用=运算符相同。
这会给你同样的结果。然而,像允许通配符,例如...
SELECT * FROM users WHERE username LIKE 'davy%'
唯一的语法问题是双引号代替单引号
LIKE
允许通配符像%
(任意数目的字符在这里)和_
(一个字符这里)。
SELECT * FROM users WHERE username LIKE 'joe%'
选择以joe
开头的所有用户名。
在这种情况下,结果中不会出现任何差异。但是,它使用不同的方法进行比较,而“LIKE”会比较慢。
退房对于像的例子:http://www.techonthenet.com/sql/like.php
在这种情况下,你仍然要使用等号。
更新:请注意,有一个关键的区别,当涉及到CHAR类型列在其结果将是不同的。有关更多详情,请参阅this answer。当使用VARCHAR(大概是标准)时,上面的内容是等同的,并且等于是首选。
等于'='
只是为了平等。另一方面,LIKE
支持SQL通配符匹配。
因此,使用LIKE
你可以做name like '%jones'
以得到所有以jones结尾的名字。使用LIKE
时,百分号'%'
字符是任何东西,长度为零或更多,并且下划线字符'_'
是任何一个字符。
的LIKE
条件允许您使用通配符:
SELECT * FROM suppliers
WHERE supplier_name like 'Hew%';
和equals =
用于平等匹配。
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
和%
,意思是“任何字符串”。我认为还有一个角色可以与LIKE
用于“任何角色”,不知道没有Google搜索的是什么。
但是,随着你的两个选择去,我看到的唯一区别是不同的运行时间,因为LIKE
是以正则表达式的方式使用。
Like
让你与外卡运营商合作,你可以用它在你的情况为like 'davyjon%'
把所有的结果,从davyjon
,并得到确切的你可以将'davyjones'
,你也可以在这种情况下使用=
像是模式匹配运算符,并且=
是完全匹配运算符。即其中类似W%
名字就意味着开始与W
,之后一个或多个字符 和=
即其中name ='James'
这是完全匹配的
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
[Equals(=)vs. LIKE]的可能重复(http://stackoverflow.com/questions/543580/equals-vs-like) – 2014-08-01 19:32:46