我正在学习如何编写 TSQL 查询。我试图深入了解它们。我从教程中获得的这个查询要求我检查第二个 WHERE 子句中的 NOT NULL。
SELECT *
FROM Person.Person AS p
WHERE NOT p.BusinessEntityID IN (
SELECT PersonID
FROM Sales.Customer
WHERE PersonID IS NOT NULL);
现在表 Sales.Customer 的 PersonID 有一些 NULL 值。如果我在子查询中删除此 WHERE 子句,则不会返回任何结果。在我对此事的明显错误思考中,我认为如果子查询返回 NULL,它根本不满足外部查询中 WHERE 子句的条件。我希望获得具有非 NULL 的 PersonID 的行的结果集。为什么根据这个推理它不起作用?
最佳答案
了解 SQL Server 如何处理 NULL 值对于新手来说可能很困难。 NULL 值表示该值未知。 NULL 值不同于空值或零值。没有两个空值是相等的。两个 null 值之间或 NULL 与任何其他值之间的比较返回未知,因为每个 NULL 的值都是未知的。
关于sql - 使用 IN 关键字查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22489042/