在Query中给出没有任何条件的字段名称会发生​​什么?

时间:2018-04-09 07:26:41

标签: mysql sql where-clause

当我仅在where条件下运行带有字段名称的SQL查询时,适用于字段名称的默认条件是什么?

Select * from tablename where fieldname;

3 个答案:

答案 0 :(得分:1)

WHERE子句包含布尔表达式。比如a = b and c = d之类的东西。如果你有where fieldname那么fieldname就是那个布尔表达式。所以fieldname通常是布尔列,例如

select * from client where is_active;

如果它不是布尔列,那么MySQL将尝试转换:

  1. 数字首先会被截断为整数。然后零被认为是假,所有其他数字都被认为是真的。
  2. 字符串将首先转换为数字,其中MySQL从左向右读取(例如'012.3AB'转换为12.3)。然后,如上所述,数字将转换为布尔值。
  3. 日期将转换为数字(例如date '1999-02-03'变为19990203)。然后,如上所述,数字将转换为布尔值。
  4. (但我不知道这些转换是否可以保证适用。这仅仅是我所观察到的。)

    通常,将where fieldname与非布尔fieldname一起使用没有多大意义。 MySQL的静默转换很容易出错;很容易忘记比较的正确部分而不是注意。在我看来MySQL会引发错误会更好。

答案 1 :(得分:0)

如果你跑

Select * from tablename where fieldname;

它将充当

SELECT * FROM `tablename` WHERE fieldname IS NOT NULL

返回非空/空数据

  

如果您在PhpMyAdmin列中运行此功能,则指定将突出显示,数据不会显示空集

答案 2 :(得分:0)

我在w3schools sql编辑器上试过这个:

enter image description here

没有语法错误

重新验证我使用sql语法检查器获取以下结果

enter image description here

如果您尝试从city不为null的客户中选择*

然后很明显你会得到所有非空记录,如下所示。

enter image description here