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

相关推荐
qiuyunoqy2 分钟前
Redis 常见数据结构,编码方式
数据库·redis·缓存
qq_424098566 分钟前
HTML5中解决数据库版本号管理混乱的规范化建议
jvm·数据库·python
儿歌八万首6 分钟前
Compose 自定义组件:封装一个通用标题栏
android·compose·标题栏
Irene199111 分钟前
Python下载第三方库:requests、oracledb,连接 Oracle 数据库,测试数据输出(切记不要操作或删除系统表)
数据库·python·oracledb
四维迁跃15 分钟前
HTML5中SVG利用Javascript实现图形拖拽与缩放
jvm·数据库·python
ZHOUPUYU16 分钟前
PHP性能优化实战:提升你的应用速度
android·性能优化·php
我们的五年20 分钟前
mysql报错,net_async_status
数据库·mysql·adb
hINs IONN27 分钟前
在Mysql环境下对数据进行增删改查
数据库·mysql
Chuer_28 分钟前
AI For BI是什么?一文拆解AI For BI应用落地!
大数据·数据库·人工智能·安全·数据分析·甘特图
一颗青果33 分钟前
数据库事务
数据库·oracle