sql - 使用 IN 关键字查询

标签 sql sql-server tsql in-operator

我正在学习如何编写 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 的值都是未知的。

Null Values

关于sql - 使用 IN 关键字查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22489042/

相关文章:

mysql - 我可以使 MySQL TEMPORARY TABLE 成为非临时表吗?

sql-server-2008 - 删除多行上的触发器

sql-server - 带有 INT 和单个连字符 (-) 的奇怪 CAST 行为

sql - 选择然后更新这些记录,然后将它们返回到存储过程中

sql-server - sql server if 语句

sql - 确定对每个项目执行的最后一个操作是安装还是删除

php - 如何防止 PHP 中的 SQL 注入(inject)?

sql - 使用sql server添加特定日期、年、月、周

sql - SQL Server:在多列上添加外键

ruby-on-rails - TinyTds 错误 : Adaptive Server connection timed out