首页 >数据库 >mysql教程 >NULL 值如何影响 SQL NOT IN 子句的结果?

NULL 值如何影响 SQL NOT IN 子句的结果?

Patricia Arquette
Patricia Arquette原创
2025-01-23 12:51:13710浏览

How Do NULL Values Affect the Results of SQL's NOT IN Clause?

SQL 的 NOT IN 子句和 NULL 值的细微差别

SQL 中的 NOT IN 子句用于排除与指定列表中的值匹配的行。 然而,此列表中 NULL 值的存在带来了复杂性。

问题:NULL 的意外结果

考虑这些 SQL 查询:

<code class="language-sql">A: SELECT 'true' WHERE 3 IN (1, 2, 3, NULL);
B: SELECT 'true' WHERE 3 NOT IN (1, 2, NULL);</code>

查询 A 产生结果,而查询 B 则没有。 这源于 SQL 处理 NULL 比较的方式。 查询 A 检查 3 是否等于列表中的任何 值。 由于 3 等于 3,因此返回结果。

相反,查询 B 检查 3 是否

不等于每个 值。启用 ANSI_NULLS(许多系统中的默认设置)后,涉及 的比较结果为 NULLUNKNOWN 既非真亦非假;因此,查询 B 不返回任何行。UNKNOWN

ANSI_NULLS 设置及其影响

禁用 ANSI_NULLS 会改变

比较行为。 关闭 ANSI_NULLS 后,与 NULL 的比较如果值不相等则返回 TRUE,如果相等则返回 FALSE。 因此,查询 B 将返回禁用 ANSI_NULLS 的结果,因为 NULL 的计算结果为 TRUE。3 NOT IN (1, 2, NULL)

理解 NULL 的本质

重要的是要记住

表示未知值。 将 NULL 与任何值进行比较总是会产生 NULL,因为无法明确确定相等或不相等。当使用带有 UNKNOWN 值的 NOT IN 时,必须预见到潜在的问题,并且应该实施适当的技术(例如显式 NULL 检查或使用 NULLCOALESCE 替换为已知值)以实现稳健的查询处理.NULL

以上是NULL 值如何影响 SQL NOT IN 子句的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn