[英]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 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 * FROM
test
AS a 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
根据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.