繁体   English   中英

MYSQL 中 LIKE 和 = 的区别?

[英]Difference between LIKE and = in MYSQL?

有什么区别

SELECT foo FROM bar WHERE foobar='$foo'

SELECT foo FROM bar WHERE foobar LIKE'$foo'

=在 SQL 中进行精确匹配。

LIKE 进行通配符匹配,使用 '%' 作为多字符匹配符号,使用 '_' 作为单字符匹配符号。 '\\' 是默认的转义字符。

foobar = '$foo'foobar LIKE '$foo'行为相同,因为两个字符串都不包含通配符。

foobar LIKE '%foo'将匹配以 'foo' 结尾的任何内容。

LIKE还有一个ESCAPE子句,因此您可以设置转义字符。 这将让您匹配字符串中的文字 '%' 或 '_'。 你也可以NOT LIKE

MySQL 站点有关于 LIKE 运算符的文档 语法是

expression [NOT] LIKE pattern [ESCAPE 'escape']

LIKE 可以做通配符匹配:

SELECT foo FROM bar WHERE foobar LIKE "Foo%"

如果您不需要模式匹配,则使用 = 而不是 LIKE。 它更快更安全。 (您正在使用参数化查询,对吗?)

请记住,MySQL 将根据情况进行转换:LIKE 将执行字符串转换,而 = 将执行 int 转换。 考虑到以下情况:

    (int)   (vchar2)
id  field1  field2
1   1       1
2   1       1,2

SELECT * FROM test AS a 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 * FROM test AS a 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

根据MYSQL 参考页面,尾随空格在 LIKE 中很重要,但在 = 中不重要,您可以使用通配符,% 表示任何字符,_ 表示正好一个字符。

我认为在速度方面=比LIKE快。 如前所述,= 进行精确匹配,如果需要,LIKE 可以使用通配符。

每当我知道某物的价值时,我总是使用 = 符号。 例如

select * from state where state='PA'

然后对于喜欢我使用类似的东西:

select * from person where first_name like 'blah%' and last_name like 'blah%'

如果您使用 Oracle Developers Tool,您可以使用 Explain 对其进行测试以确定对数据库的影响。

最终结果将是相同的,但查询引擎使用不同的逻辑来获得答案。 通常,LIKE 查询比“=”查询消耗更多的周期。 但是当没有提供通配符时,我不确定优化器会如何处理它。

与您问题中的示例没有区别。

但是,就像杰西说的,你可以进行通配符匹配

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

一点点 og 谷歌不会伤害......

如果我们想要进行精确匹配,带有等号 (=) 的 WHERE 子句可以正常工作。 但是可能需要过滤掉 'foobar' 应该包含“foo”的所有结果。 这可以使用 SQL LIKE 子句和 WHERE 子句来处理。

如果 SQL LIKE 子句与 % 字符一起使用,那么它将像通配符一样工作。

SELECT foo FROM bar WHERE foobar LIKE'$foo%'

没有 % 字符的 LIKE 子句与等号和 WHERE 子句非常相似。

在您的示例中,它们在语义上是相等的,并且应该返回相同的输出。

但是,LIKE 会为您提供使用通配符进行模式匹配的能力。

您还应该注意,= 可能会在某些系统上为您带来性能提升,因此,例如,如果您要搜索精确数字,= 将是首选方法。

看起来很像从 PHP 脚本中取出来的。 目的是将变量$foo的内容与foo数据库字段进行模式匹配,但我敢打赌它应该用双引号编写,因此 $foo 的内容将被输入到查询中。

正如你所说,没有区别。

它可能会更慢,但我打赌 MySQL 意识到搜索字符串中没有通配符,所以它毕竟不会做 LIKE 模式匹配,所以真的没有区别。

就我而言,我发现Like=

  • Like第一次在 0.203 秒然后 0.140 秒内提取了一些行

  • =返回在 0.156 秒内不断获取相同的行

做出你的选择

我发现LIKE和等号=之间的重要区别!

示例:我有一个包含字段“ID”(类型: int(20) )和包含值“123456789”的记录的表

如果我做:

SELECT ID FROM example WHERE ID = '123456789-100'

找到 ID = '123456789' 的记录(结果不正确)

如果我做:

SELECT ID FROM example WHERE ID LIKE '123456789-100'

没有找到记录(这是正确的)

所以,至少对于整数字段来说,这似乎是一个重要的区别......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM