两者之间有什么区别吗
SELECT * FROM users WHERE username="davyjones"
和
SELECT * FROM users WHERE username LIKE "davyjones"
LIKE
允许部分匹配/使用通配符,而 =
检查精确匹配。
例如
SELECT * FROM test WHERE field LIKE '%oom';
将返回字段值为以下任意一项的行:
Zoom, Boom, Loom, Groom
根据 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 之间的主要区别之一。
在这种情况下,结果不会出现任何差异。但是,它使用不同的方法进行比较,并且“LIKE”会慢很多。
查看 LIKE 的示例:http://www.techonthenet.com/sql/like.php
在这种情况下,你仍然想使用等于。
更新:请注意,对于 CHAR 类型列,存在一个关键的区别,其中结果将会不同。有关更多详细信息,请参阅此答案。当使用 VARCHAR(大概是规范)时,以上是等价的,并且优先使用 equals。
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
允许使用通配符,如 %
(此处为任意数量的字符)和 _
(此处为一个字符)。
SELECT * FROM users WHERE username LIKE 'joe%'
选择以
joe
开头的所有用户名。
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 是模式匹配运算符,
=
是精确匹配运算符。即,像 W%
这样的名称意味着以 W
开头,然后是一个或多个字符
和 =
即名称 ='James'
这是完全匹配的
据我所知,您编写的两个选择没有任何区别,只是增加了时间成本。通常将
LIKE
与 %
一起使用,意思是“任何字符串”。我认为还有一个字符可以与 LIKE
一起使用来表示“任何字符”,如果不谷歌搜索则不确定那是什么。
但是随着您的两个选择的进行,我看到的唯一区别是不同的运行时间,因为
LIKE
用于正则表达式排序。
Equals
'='
只是为了平等。另一方面,LIKE
支持SQL通配符匹配。
因此,使用
LIKE
,您可以执行 name like '%jones'
来获取所有以 jones 结尾的名字。对于 LIKE
,百分号 '%'
字符可以是任何字符,长度为零或更长,下划线字符 '_'
可以是任何一个字符。
Like
让您与通配符运算符一起工作,您可以在您的情况下使用它 like 'davyjon%'
来获取以 davyjon
开头的所有结果,并获得您可能放置 'davyjones'
的确切结果,您也可以在这种情况下使用 =
我知道这个问题太老了,但即使在今天,我发现很多其他人也会尝试找出答案。在许多书中,在大多数情况下,LIKE 可能比 '-' 慢,除非你想比较字符串。