查询/子查询什么时候返回 NULL,什么时候根本没有值?

Asp*_*Net 7 sql sql-server subquery

    \n
  1. 如果查询/子查询没有找到任何匹配的行,那么它要么返回 NULL,要么根本不返回任何值,因此甚至不是 NULL 值。基于什么标准,查询/子查询返回 NULL,何时返回任何结果,甚至不返回 NULL 值?

  2. \n
  3. 当找不到匹配的行时,标量子查询是否总是返回 NULL?\n 我假设如果没有找到行,最外层标量查询也会返回\nNULL?

  4. \n
  5. SELECT FirstName, LastName, YEAR(BirthDate)\nFROM Persons\nWHERE YEAR(BirthDate) IN (SELECT YearReleased FROM Albums);\n
    Run Code Online (Sandbox Code Playgroud)\n\n
      \n
    • 如果子查询没有找到结果,则外部查询的 WHERE 子句是否会翻译为WHERE YEAR(BirthDate) IN (null);?

    • \n
    • 如果 WHERE 子句被翻译成WHERE YEAR(BirthDate) IN();相反,\xe2\x80\x99t 不应该是一个错误条件,因为YEAR(BirthDate)值如何与空进行比较?

    • \n
  6. \n
\n

Dan*_*olo 7

子查询只会在wasNULL时返回,否则将会有一个空记录集,使其成为您提到的情况。YearReleasedNULLIN ()

区分两者非常重要,因为它们意味着完全不同的事物。 NULL表明有一些东西需要SELECT编辑,尽管该值可以说表明“缺乏价值”。空记录集表示没有任何与指定条件相匹配的可供选择的记录集。

编辑:更新以显示示例结果

替代文本

前两个查询只是为了显示两个表中的内容。第三个查询是您的查询,第四个查询只是显示,如果您将子查询替换为NULL. 最后一个查询只是为了表明子查询本身只是返回一个大的NULLs 列表。