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 处理不当是许多查询错误的常见原因。

相关推荐
alexhilton32 分钟前
玩转Shader之学会如何变形画布
android·kotlin·android jetpack
冒泡的肥皂1 小时前
MVCC初学demo(一
数据库·后端·mysql
.Shu.2 小时前
Redis Reactor 模型详解【基本架构、事件循环机制、结合源码详细追踪读写请求从客户端连接到命令执行的完整流程】
数据库·redis·架构
yatingliu20193 小时前
HiveQL | 个人学习笔记
hive·笔记·sql·学习
whysqwhw5 小时前
安卓图片性能优化技巧
android
薛晓刚5 小时前
当MySQL的int不够用了
数据库
风往哪边走5 小时前
自定义底部筛选弹框
android
SelectDB技术团队5 小时前
Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
数据库·数据仓库·数据分析·apache doris·菜鸟技术
星空下的曙光6 小时前
mysql 命令语法操作篇 数据库约束有哪些 怎么使用
数据库·mysql
小楓12016 小时前
MySQL數據庫開發教學(一) 基本架構
数据库·后端·mysql