SQLite NULL 值
                           
天天向上
发布: 2025-03-04 20:13:06

原创
388 人浏览过

SQLite 中,NULL 是一种特殊值,表示 “未知” 或 “不存在”。它与 0''(空字符串)或 FALSE 并不相同。SQLite 提供了一些操作和函数来处理 NULL 值。


1. NULL 值的特点

  • NULL 不是 0''(空字符串)。
  • 任何 涉及 NULL 的计算结果都是 NULL,比如:
  SELECT NULL + 10;  -- 结果是 NULL
  SELECT NULL || 'text'; -- 结果是 NULL
  • NULL 在比较时具有特殊行为,例如:
  SELECT NULL = NULL;   -- 结果是 NULL(不是 TRUE 或 FALSE)
  SELECT NULL <> NULL;  -- 结果是 NULL

2. NULL 值的插入

示例:创建表并插入 NULL

CREATE TABLE users (
    id INTEGER PRIMARY KEY,
    name TEXT,
    age INTEGER
);

INSERT INTO users (id, name, age) VALUES (1, 'Alice', 25);
INSERT INTO users (id, name, age) VALUES (2, 'Bob', NULL);
INSERT INTO users (id, name, age) VALUES (3, NULL, 30);

这里:

  • BobageNULL
  • 第三行nameNULL

3. NULL 的比较

(1) 不能用 = 直接判断 NULL

错误示例:

SELECT * FROM users WHERE age = NULL;

这个查询不会返回任何结果,因为 NULL = NULL 不是 TRUE,而是 NULL

(2) IS NULL & IS NOT NULL

正确的判断方式:

SELECT * FROM users WHERE age IS NULL;      -- 查询 age 为 NULL 的行
SELECT * FROM users WHERE name IS NOT NULL; -- 查询 name 不为 NULL 的行

4. 处理 NULL 的函数

SQLite 提供了一些函数来处理 NULL 值。

(1) IFNULL():如果是 NULL,则返回默认值

SELECT name, IFNULL(age, 0) AS age FROM users;

如果 ageNULL,则返回 0,否则返回原始值。

(2) COALESCE():返回第一个非 NULL

SELECT name, COALESCE(age, 18, 20) AS age FROM users;
  • COALESCE(age, 18, 20):如果 ageNULL,返回 18,否则返回 age

(3) NULLIF():如果两个值相等,则返回 NULL

SELECT NULLIF(age, 30) FROM users;
  • 如果 age30,则返回 NULL,否则返回 age

5. NULLORDER BY

  • NULL 默认排序在最前:
  SELECT * FROM users ORDER BY age;
  • NULL 排在最后:
  SELECT * FROM users ORDER BY age ASC NULLS LAST;
  • NULL 排在最前:
  SELECT * FROM users ORDER BY age DESC NULLS FIRST;

6. NULLGROUP BYHAVING 里的表现

  • GROUP BYNULL 为独立组:
  SELECT age, COUNT(*) FROM users GROUP BY age;
  • NULL 作为一组,单独计数。
  • HAVING 需要 IS NULL 判断:
  SELECT age, COUNT(*) FROM users GROUP BY age HAVING age IS NULL;

7. NULLJOIN 里的问题

如果 NULL 参与 JOIN,可能导致数据丢失:

SELECT * FROM users
LEFT JOIN orders ON users.id = orders.user_id;
  • 如果 orders.user_idNULL,则不会匹配。
  • 解决方案:用 IFNULL() 提供默认值。

总结

操作说明
IS NULL判断值是否为 NULL
IS NOT NULL判断值是否 不为 NULL
IFNULL(x, y)如果 xNULL,返回 y
COALESCE(x, y, z, ...)返回第一个非 NULL
NULLIF(x, y)如果 x = y,返回 NULL,否则返回 x
ORDER BY ... NULLS LAST/FIRST控制 NULL 在排序中的位置

更多详细内容请关注其他相关文章。

发表回复 0

Your email address will not be published. Required fields are marked *