有什么区别:
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"
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 是首选。
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 is 模式匹配运算符和=
is 精确匹配运算符。即,其中的名称W%
表示以一个或多个字符开头,W
然后是一个或多个字符,=
即名称与='James'
此完全匹配
平等'='
只是为了平等。另一方面,LIKE
支持 SQL 通配符匹配。
因此,LIKE
您可以name like '%jones'
获取所有以 jones 结尾的名称。使用LIKE
, 百分号'%'
可以是任意长度,长度为零或更长,而下划线字符'_'
, 可以是任意一个字符。
据我所知,你写的两个选择没有区别,只是时间成本。通常LIKE
与 一起使用%
,意思是“任何字符串”。我认为还有一个字符可以与LIKE
“任何字符”一起使用,如果没有谷歌搜索,不确定那是什么。
但是随着您的两个选择,我看到的唯一区别是运行时间不同,因为LIKE
它用于 regexp-sort-of-fashion。
Like
让您与通配符运算符一起工作,您可以在您的案例中使用它like 'davyjon%'
来获取以 开头的所有结果davyjon
,并获得您可以放置的确切结果'davyjones'
,您也可以=
在这种情况下使用