什么' ' =' '意思

时间:2017-03-27 13:45:53

标签: sql sql-server

select * from Employees where Name = 'John' or ''=''

此语句检索表中的所有员工。

我无法理解''=''是如何被解释的?你能解释一下吗?

2 个答案:

答案 0 :(得分:7)

''=''始终为true,因为它正在比较两个空字符串

所以基本上''=''Tautology而且你使用OR条件,因此你的整个条件总是true。您的WHERE也可以写成

where Name = 'John' or 1 = 1

您的查询可能只是select * from Employees,因为WHERE条件无效。

答案 1 :(得分:1)

这是一个非常毫无意义的where条款,因为它正在搜索名称:

where Name = 'John'

但它也在使用一个总是返回true的表达式进行搜索:

or '' = ''

所以无论如何都会返回所有数据。

除非在某处动态生成此where子句且名称过滤器是可选的,否则没有理由包含第二部分。如果没有过滤名称,那么包含始终为真的部分将防止出错。即使如此,我也会质疑它的使用,因为它会返回额外的数据。

如果它是生成的where子句并且它是必需的,那么它可能更符合逻辑:

or 1=2

然后你不会返回额外的数据。