11

这个问题不在我正在查看的数据库考试中,所以它可能无法在真实情况下使用......

以下有效的 SQL 语句会产生什么输出?解释你的答案!

选择(空=空);

我可以很容易地产生语句的输出,即

学校=>选择(空=空);
 ?柱子?
----------

(1 行)

在 psql 8.4.11 中,但是如何以及为什么这是我不知道的答案...我猜它会尝试评估括号内的表达式并得出真/假,但显然不是。

关于它为什么表现得如此的任何提示?

谢谢

4

2 回答 2

10

NULL代表“未知值”。不知道一个值是真还是假或其他任何东西。

那么,当比较两个未知值时,答案会是什么?UnknownA 是否等于 UnknownB?

回答?未知...

以下是 SQL Server 的示例:

IF (NULL = NULL)
  PRINT 'Equals'

IF (NULL != NULL)
  PRINT 'Not Equals'


IF (NULL IS NULL)
  PRINT 'IS'

IF (NULL IS NOT NULL)
  PRINT 'IS NOT'

唯一被打印的东西:IS

于 2012-08-24T10:58:57.203 回答
1

我想,预期的答案是NULL。这就是 MySQL 所做的。实际上,这也是 PostgreSQL 返回的内容。可能,您的 SQL 客户端只是没有显示唯一返回值为 a 的单行NULL

但是,MS SQL 服务器没有布尔类型,因此它不能只选择布尔表达式的结果。所以 MS SQL 中的结果是错误的。

问题的重点是检查您对 SQL 中的 NULL 逻辑的理解。而不是=,您应该IS在比较时使用运算符NULL(除非该ANSI_NULLS选项在 MySQL 中设置为 true)。

于 2012-08-24T10:59:23.257 回答