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

相关推荐
共享家95277 分钟前
QT-界面优化(下)
开发语言·数据库·qt
maray16 分钟前
Chroma 的设计哲学
数据库·人工智能
e***0961 小时前
SQL 中UPDATE 和 DELETE 语句的深入理解与应用
数据库·sql
李斯维1 小时前
布局性能优化利器:ViewStub 极简指南
android·性能优化
w***4242 小时前
SQL-Server链接服务器访问Oracle数据
服务器·sql·oracle
程序员小白条2 小时前
你面试时吹过最大的牛是什么?
java·开发语言·数据库·阿里云·面试·职场和发展·毕设
循环不息优化不止2 小时前
Ktor Pipeline 机制深度解析
android
老华带你飞2 小时前
社区养老保障|智慧养老|基于springboot+小程序社区养老保障系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序·毕设·社区养老保障
q***56382 小时前
Springboot3学习(5、Druid使用及配置)
android·学习