当前位置: 首页 > news >正文

html5美食网站搭建个人博客网站

html5美食网站,搭建个人博客网站,赣州人才网暑假工,粉末涂料做网站有用吗SQL 中 IS 与 的区别:一个 NULL 值引发的思考为什么查询结果总是少一条数据?可能是 NULL 在捣鬼在 SQL 查询中,很多开发者都曾遇到过这样的困惑:明明看起来正确的查询语句,返回的结果却总是与预期不符。这往往是因为没…

SQL 中 IS 与 = 的区别:一个 NULL 值引发的思考

为什么查询结果总是少一条数据?可能是 NULL 在捣鬼

在 SQL 查询中,很多开发者都曾遇到过这样的困惑:明明看起来正确的查询语句,返回的结果却总是与预期不符。这往往是因为没有正确理解 IS= 操作符的区别,特别是当遇到 NULL 值时。

一、核心区别:一句话总结

= 用于比较IS 用于比较NULL(或布尔常量)。

二、IS 与 = 的适用场景在这里插入图片描述

三、详细对比表格

特性= 操作符IS 操作符
主要用途普通值比较NULL 值比较
与 NULL 比较总是返回 UNKNOWN正确返回 TRUE/FALSE
与非 NULL 值比较正常工作可能语法错误或逻辑错误
布尔值比较支持(= TRUE/FALSE)部分数据库支持(IS TRUE/FALSE)
可读性常规比较,直观专门用于 NULL,意图明确
三值逻辑处理需要特别注意 NULL专门为 NULL 设计

四、NULL 比较的陷阱与实际示例

错误示例

-- 这行代码永远返回空结果集!
SELECT * FROM users WHERE deleted_at = NULL;

正确示例

-- 正确查找未删除的用户
SELECT * FROM users WHERE deleted_at IS NULL;

五、为什么 NULL 如此特殊?

NULL 在 SQL 中表示"未知"或"不存在"的值,它不等于任何值,甚至不等于它自己。这就是为什么不能使用 = 比较 NULL 的原因。

SQL 使用三值逻辑:

  • TRUE(真)
  • FALSE(假)
  • UNKNOWN(未知)

任何与 NULL 的比较都会返回 UNKNOWN,而 WHERE 子句只返回条件为 TRUE 的行。

六、NOT IN 子查询中的 NULL 陷阱

问题代码

SELECT *
FROM customers
WHERE customers.id NOT IN (SELECT customerid FROM orders
);

问题分析

如果 orders 表中的 customerid 包含 NULL 值,上述查询将返回空结果集,因为:
x NOT IN (1, 2, NULL) 等价于 x <> 1 AND x <> 2 AND x <> NULL

x <> NULL 的结果是 UNKNOWN,导致整个表达式为 UNKNOWN,最终被视为 FALSE。

解决方案

使用 NOT EXISTS 替代 NOT IN:

SELECT *
FROM customers c
WHERE NOT EXISTS (SELECT 1FROM orders oWHERE o.customerid = c.id
);

七、不同数据库的差异说明

数据库IS 布尔值支持= 布尔值支持建议
MySQL支持 (IS TRUE/IS FALSE)支持 (= TRUE/= FALSE)统一使用 =
PostgreSQL支持支持统一使用 =
SQL Server不支持支持使用 =
SQLite有限支持支持使用 =

八、实际工作中的应用建议

  1. NULL 检查一律使用 IS NULL 或 IS NOT NULL
  2. 布尔值比较统一使用 = 操作符(保持代码一致性)
  3. 避免在 NOT IN 子查询中包含 NULL 值
  4. 优先使用 NOT EXISTS 而不是 NOT IN(避免 NULL 问题)
  5. 在复杂查询中显式处理 NULL(使用 COALESCE 或 ISNULL 函数)

九、记忆口诀

NULL 用 IS,非 NULL 用 =
布尔两者都可以,统一风格最重要
NOT IN 里有陷阱,NOT EXISTS 更可靠

总结

理解 IS= 的区别是编写正确 SQL 查询的基础。关键是要记住 NULL 的特殊性——它表示未知值,不能使用常规的比较操作符。掌握了这个概念,你就能避免许多常见的 SQL 陷阱,写出更加健壮和可靠的查询语句。

下次当你发现查询结果与预期不符时,不妨先检查一下:是不是 NULL 值在捣鬼?是不是应该用 IS 而不是 =?

http://www.dtcms.com/a/425848.html

相关文章:

  • 网站诊断工具网站建设价目
  • 上海网站建设管理flash做网站步骤
  • 广州海珠网站开发汝州市文明建设门户网站
  • 微站是什么东西seo与网站优化
  • 前端电商网站设计论文抖音代运营一般几个周期
  • 自适应企业网站用什么框架做网站建设服务描述
  • 深圳龙岗做网站建设银行官方网站购房贷款利率
  • 快速学习网站制作网站开发 在html标记后出现乱码 查看源文件显示是问好
  • 网站目录 自动网页制作与网站建设宝典 pdf
  • html5如何实现网站开发手机网站电话漂浮代码
  • 长春建站网站建设北京口碑最好的教育机构
  • 手机网站微信支付接口开发教程英文网站建设维护
  • 网站建设在国内外研究现状华为应用商店下载
  • 织梦网站模板下载网站横幅怎么制作教程
  • 网站建设与管理的认识wordpress投稿图片
  • 网络营销的网站分类有全网搜索软件下载
  • 丹东市住房与城乡建设厅网站推广引流话术
  • 网站推广软件免费观看wordpress连接直达
  • 商业网站的创建程序嘉兴模板建站定制网站
  • 乐至建设局网站最新清远发布
  • 长春火车站出入最新规定网站中 点击出现登录框怎么做
  • 手机端购物网站模板下载营销策略分析论文
  • 百度验证网站的好处网推怎么做
  • 淘宝网站怎样建四川建设银行官网招聘网站
  • 佛山外贸网站建设报价wordpress网站加cnzz
  • 深圳罗湖网站建设公司2014网站设计趋势
  • 企业网站可以备案几个网页设计规划书样本
  • 网站icp备案地做哪一类网站容易有排名
  • 几千元的网站建设一个公司的网址
  • seo短视频网页网站建设优化收费