之间有什么区别
SELECT foo FROM bar WHERE foobar='$foo'
AND
SELECT foo FROM bar WHERE foobar LIKE'$foo'
答案 0 :(得分:28)
= 可以完全匹配。
LIKE 进行通配符匹配,使用'%'作为多字符匹配符号,使用'_'作为单字符匹配符号。 '\'是默认的转义字符。
foobar = '$foo'
和foobar LIKE '$foo'
的行为相同,因为两个字符串都不包含通配符。
foobar LIKE '%foo'
将匹配以'foo'结尾的任何内容。
LIKE
也有ESCAPE
子句,因此您可以设置转义字符。这将允许您在字符串中匹配文字'%'或'_'。您也可以NOT LIKE
。
MySQL网站有documentation on the LIKE operator。语法是
expression [NOT] LIKE pattern [ESCAPE 'escape']
答案 1 :(得分:19)
LIKE可以进行通配符匹配:
SELECT foo FROM bar WHERE foobar LIKE "Foo%"
如果您不需要模式匹配,则使用=而不是LIKE。它更快,更安全。 (您正在使用参数化查询,对吗?)
答案 2 :(得分:5)
请注意MySQL将根据情况进行投射:LIKE将执行字符串强制转换,而=将执行int强制转换。考虑到以下情况:
(int) (vchar2)
id field1 field2
1 1 1
2 1 1,2
SELECT * 来自
test
AS LEFT JOINtest
AS b on a.field1 LIKE b.field2
将产生
id field1 field2 id field1 field2
1 1 1 1 1 1
2 1 1,2 1 1 1
,而
SELECT * 来自
test
AS LEFT JOINtest
AS b on a.field1 = b.field2
将产生
id field1 field2 id field1 field2
1 1 1 1 1 1
1 1 1 2 1 1,2
2 1 1,2 1 1 1
2 1 1,2 2 1 1,2
答案 3 :(得分:3)
根据the MYSQL Reference page,尾随空格在LIKE中非常重要但不是=,您可以使用通配符,%表示任何字符,_表示一个字符。
答案 4 :(得分:3)
我认为在速度方面=比LIKE快。如上所述,=完全匹配,LIKE可以根据需要使用通配符。
每当我知道某些东西的价值时,我总是使用= sign。例如
select * from state where state='PA'
然后对于喜欢我使用的东西:
select * from person where first_name like 'blah%' and last_name like 'blah%'
如果您使用Oracle Developers Tool,则可以使用Explain对其进行测试,以确定对数据库的影响。
答案 5 :(得分:1)
最终结果将是相同的,但查询引擎使用不同的逻辑来得到答案。通常,LIKE查询比“=”查询烧掉更多周期。但是当没有提供通配符时,我不确定优化器可以如何处理它。
答案 6 :(得分:1)
根据你的问题中的例子,没有区别。
但是,像杰西说你可以做通配符匹配
SELECT foo FROM bar WHERE foobar LIKE "Foo%"
SELECT foo FROM bar WHERE foobar NOT LIKE "%Foo%"
更多信息:
http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html
答案 7 :(得分:0)
有点og谷歌没有伤害...
如果我们想要完全匹配,带等号(=)的WHERE子句可以正常工作。但是可能需要我们想要过滤掉'foobar'应该包含“foo”的所有结果。这可以使用SQL LIKE子句和WHERE子句来处理。
如果SQL LIKE子句与%字符一起使用,那么它将像通配符一样工作。
SELECT foo FROM bar WHERE foobar LIKE'$foo%'
没有%字符LIKE子句与等号和WHERE子句非常相似。
答案 8 :(得分:0)
在您的示例中,它们在语义上是相等的,并且应该返回相同的输出。
但是,LIKE将为您提供与通配符进行模式匹配的功能。
您还应注意,=可能会在某些系统上提升性能,因此如果您正在搜索exakt数字,=将是首选方法。
答案 9 :(得分:0)
看起来非常像从PHP脚本中取出。目的是将变量$foo
的内容与foo
数据库字段进行模式匹配,但我敢打赌它应该用双引号编写,所以内容$ foo将被输入查询。
正如您所说,没有区别。
它可能会慢一点,但我敢打赌MySQL意识到搜索字符串中没有通配符,所以它毕竟不会做LIKE模式匹配,所以真的没什么区别。
答案 10 :(得分:0)
就我而言,我发现Like
比=
Like
第一次在0.203秒内获取了多行,然后是0.140秒
=
会在0.156秒内返回相同的行
选择
答案 11 :(得分:0)
我发现a, b, c
d, e, f
g, h, i
j
和等号LIKE
之间存在重要差异!
示例:我有一个带有字段" ID" (type:int(20))和包含值" 123456789"
的记录如果我这样做:
=
记录ID =' 123456789'找到(是不正确的结果)
如果我这样做:
SELECT ID FROM example WHERE ID = '123456789-100'
没有找到记录(这是正确的)
所以,至少对于INTEGER字段来说,它似乎是一个重要的区别......