gpt4 book ai didi

sql - SELECT * FROM Employees WHERE NULL IS NULL; SELECT * FROM 员工 WHERE NULL = NULL;

转载 作者:行者123 更新时间:2023-12-01 09:23:42 26 4
gpt4 key购买 nike

最近开始学习oracle和sql。
在学习的过程中,我遇到了几个问题,我的 friend 在接受采访时被问到这些问题。

SELECT * 
FROM Employees
WHERE NULL IS NULL;

此查询产生雇员表中的所有行。
至于我所了解的Oracle是按列搜索数据的,那么,NULL,这里是不是被当作列名了?
当我说 Oracle 在列中搜索数据时,我说得对吗?
Oracle 怎么会给出这个查询中的所有行?
在 WHERE 子句中,条件的左侧不是必须是 COLUMN NAME 吗?
它不应该抛出错误吗?
SELECT * 
FROM Employees
WHERE NULL = NULL;

没有选择行。

好吧,我知道我无法使用除 IS NULL 和 IS NOT NULL 之外的运算符来比较 NULL 值。
但是为什么它会产生结果而不是错误。
有人可以向我解释这一点。
Oracle 是否将 NULL 视为列以及空单元格?

最佳答案

一个 where子句由条件表达式组成。不要求条件表达式由任一侧的列名组成。事实上,尽管通常一侧或两侧都是列,但包含以下内容的表达式并不少见:

  • 子查询
  • 参数
  • 常量
  • 标量函数

  • 一个常见的例子是:
    WHERE 1 = 1 AND . . .

    这是自动生成代码的标志。一些程序员更容易通过包含 AND <condition> 来组合条件。但该条款需要一个 anchor 。因此, 1 = 1 .

    的方式 WHERE从概念上讲,子句的工作原理是为 FROM 生成的每一行评估该子句。 .如果子句计算结果为 TRUE ,然后该行保留在结果集中(或用于进一步处理)。如果是 FALSENULL ,然后该行被过滤掉。

    所以, NULL IS NULL评估为 TRUE,因此保留所有行。 NULL = NULL计算结果为 NULL,因此不保留任何行。

    关于sql - SELECT * FROM Employees WHERE NULL IS NULL; SELECT * FROM 员工 WHERE NULL = NULL;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29068228/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com