SQL 中的 NULL 处理

NULL 在 SQL 中表示缺失、未知或不适用的数据值,它与空字符串或零值不同。SQL 对 NULL 有特殊的处理规则:

NULL 的基本特性

  1. 比较运算 :任何与 NULL 的比较都返回 UNKNOWN(既不是 TRUE 也不是 FALSE)

    sql 复制代码
    SELECT * FROM table WHERE column = NULL;  -- 不会返回任何行
    SELECT * FROM table WHERE column IS NULL; -- 正确写法
  2. 逻辑运算

    • NULL AND TRUE = NULL

    • NULL OR FALSE = NULL

    • NOT NULL = NULL

函数中的 NULL 处理

  1. 聚合函数

    • COUNT(column) 忽略 NULL 值

    • SUM(), AVG(), MAX(), MIN() 等也忽略 NULL

    • COUNT(*) 计算所有行,包括 NULL

  2. 算术运算 :任何包含 NULL 的算术运算结果都是 NULL

    sql 复制代码
    SELECT 5 + NULL;  -- 结果为 NULL

NULL 相关函数

  1. IS NULL / IS NOT NULL :专门用于检查 NULL 值

    sql 复制代码
    SELECT * FROM employees WHERE manager_id IS NULL;
  2. COALESCE() :返回第一个非 NULL 值

    sql 复制代码
    SELECT COALESCE(phone, email, 'N/A') FROM contacts;
  3. NULLIF() :如果两个表达式相等则返回 NULL

    sql 复制代码
    SELECT NULLIF(salary, 0) FROM employees; -- 如果 salary=0 则返回 NULL
  4. NVL() / IFNULL()(数据库特定):

    sql 复制代码
    -- Oracle
    SELECT NVL(commission, 0) FROM employees;
    -- MySQL/SQLite
    SELECT IFNULL(commission, 0) FROM employees;

注意事项

  1. 在 UNIQUE 约束中,NULL 被视为不同的值(多个 NULL 是被允许的)

  2. 在 GROUP BY 中,所有 NULL 会被分到同一组

  3. 在 ORDER BY 中,NULL 默认被视为最小值(可以指定 NULLS FIRST/LAST 改变行为)

理解 NULL 的行为对于编写正确的 SQL 查询至关重要,因为 NULL 处理不当是许多查询错误的常见原因。

相关推荐
其实防守也摸鱼6 小时前
权限提升与横向移动:从内网渗透到域控的完整技术图谱
运维·服务器·数据库·安全·github·copilot·渗透
人生百态,人生如梦6 小时前
每日论文解读(9.1)——ReToolSQL:面向鲁棒Text-to-SQL的Agentic强化学习与工具增强两阶段训练框架
数据库·sql
DevOpenClub6 小时前
网页采集如何稳定输出结构化数据:JSON、链接与快照三阶段流水线
数据库·json·api
其实防守也摸鱼6 小时前
免杀与持久化入门:从载荷免杀到隐蔽通道的完整指南
运维·服务器·数据库·安全·github·copilot·渗透
SelectDB6 小时前
统一全文检索与 SQL 分析:Apache Doris 日志分析实践
运维·数据库·掘金技术征文
麻瓜code7 小时前
【MySQL】SQL优化实战:从慢查询定位到查询改写
数据库·sql·mysql
协议的旁观者7 小时前
Android 高级逆向实战(一):对抗 360 企业加固,Native 抽取还原与 Activity 生命周期重建
android
蓝鸟19747 小时前
Oracle HIS业务视图优化实战|VI_BQ_YWTX11从高耗费到秒级响应
数据库·oracle·his数据库调优·复合索引踩坑·is null索引问题·ql视图优化
数智启示录7 小时前
Apache Doris 4.0.8 混合检索实战(第 5 篇):三套系统只返回两条结果,一条 SQL 如何避开交集丢失
大数据·数据库·经验分享·sql·面试
今天AI了吗8 小时前
大模型技术全景(一):AI、机器学习、深度学习,三者的关系到底是什么?一文搞懂
数据库·人工智能·python·sql·深度学习·机器学习·rust