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

相关推荐
+VX:Fegn08956 分钟前
计算机毕业设计|基于springboot + vue旅游信息推荐系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计·旅游
木易 士心7 分钟前
MVC、MVP 与 MVVM:Android 架构演进之路
android·架构·mvc
百锦再9 分钟前
国产数据库的平替亮点——关系型数据库架构适配
android·java·前端·数据库·sql·算法·数据库架构
wusp199412 分钟前
基于vite + nodejs + MongoDB + vue2 的博客发布系统
数据库·mongodb
走在路上的菜鸟12 分钟前
Android学Dart学习笔记第十三节 注解
android·笔记·学习·flutter
全栈小512 分钟前
【数据库】浙人医携手金仓数据库,打造全国首个多院区异构多活容灾架构
数据库·1024程序员节·金仓
介一安全39 分钟前
【Frida Android】实战篇15:Frida检测与绕过——基于/proc/self/maps的攻防实战
android·网络安全·逆向·安全性测试·frida
studytosky43 分钟前
Linux 基础开发工具(3):Git 控制与 GDB 调试实用指南
linux·运维·服务器·网络·数据库·git
hhy_smile1 小时前
Android 与 java 设计笔记
android·java·笔记
凌睿马1 小时前
关于复杂数据结构从MySQL迁移到PostgreSQL的可行性
数据结构·数据库·mysql