什么"" =""在SQL SELECT语句中意味着什么?

时间:2016-07-20 13:12:31

标签: mysql sql

我有一个SQL SELECT语句,

SELECT * FROM users WHERE ""=""

结果是它返回所有行。

那么,""=""是什么意思?

3 个答案:

答案 0 :(得分:3)

这是一个不必要的WHERE子句,表示应该选择所有行。

=运算符用于检查相等性,WHERE子句将返回特定条件为真的所有记录(在本例中为""="")。由于此条件将始终计算为true(因为空字符串始终等于空字符串),因此将选择表中的所有行。

您可以将其全部关闭以获得相同的结果:

SELECT * 
  FROM users

答案 1 :(得分:0)

恕我直言,最后一部分可以删除。这个where语句比较每个数据集的两个静态值,因此每个数据集都是相同的。

答案 2 :(得分:0)

这样的构造通常用于在动态SQL中构造where子句。例如,如果用户可以选择名称或国家/地区,则可以将查询编写为:

where (name = @name or @name is null) and
      (county = @country or @country is null)

虽然这捕获了逻辑,但它并没有很好地优化。因此,应用程序通常使用动态SQL来构造逻辑:

set @where = '1=1';
set @where = concat(@where, if(@name is not null, ' and name = @name', ''));
set @where = concat(@where, if(@country is not null, ' and country = @country', ''));

使用"" = ""只是1=1的另一种形式。

我可以看到这将如何落入关于SQL注入的讨论,因为它们都与用户输入有关。

但实际上,这有点懒,因为可以在没有额外比较的情况下编写查询(尽管MySQL会在编译阶段对其进行优化)。