MYSQL中LIKE和=之间的区别?

时间:2009-06-16 19:05:21

标签: mysql

之间有什么区别
SELECT foo FROM bar WHERE foobar='$foo'

AND

SELECT foo FROM bar WHERE foobar LIKE'$foo'

12 个答案:

答案 0 :(得分:28)

SQL中的

= 可以完全匹配。

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 JOIN test 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 JOIN test 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字段来说,它似乎是一个重要的区别......