1. 什么是空值(NULL)
1.1 空值的定义
空值表示"未知"或"不存在"的值
与0、空字符串''、False不同
在数据库中具有特殊含义
1.2 空值的特点
-- 空值示例
SELECT NULL = NULL; -- 结果为NULL,不是True
SELECT NULL != NULL; -- 结果为NULL,不是False
2. 空值运算符详解
2.1 IS NULL 运算符
作用:检查某个值是否为空
-- 基本语法
SELECT * FROM 表名 WHERE 列名 IS NULL;
-- 实际示例
-- 假设有学生表 students
SELECT * FROM students WHERE 电话号码 IS NULL;
2.2 IS NOT NULL 运算符
作用:检查某个值是否不为空
-- 基本语法
SELECT * FROM 表名 WHERE 列名 IS NOT NULL;
-- 实际示例
SELECT * FROM students WHERE 邮箱 IS NOT NULL;
3. 实战演示
3.1 创建示例表
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
department VARCHAR(50),
salary DECIMAL(10,2),
hire_date DATE,
phone VARCHAR(20)
);
-- 插入示例数据
INSERT INTO employees VALUES
(1, '张三', '销售部', 5000.00, '2023-01-15', '13800138000'),
(2, '李四', '技术部', NULL, '2023-02-20', NULL),
(3, '王五', NULL, 4500.00, NULL, '13900139000'),
(4, '赵六', '人事部', 4800.00, '2023-04-10', NULL);
3.2 查询练习
查询1:查找薪资未知的员工
SELECT * FROM employees WHERE salary IS NULL;
查询2:查找部门已确定的员工
SELECT * FROM employees WHERE department IS NOT NULL;
查询3:查找电话号码和入职日期都完整的员工
SELECT * FROM employees
WHERE phone IS NOT NULL AND hire_date IS NOT NULL;
4. 常见错误与注意事项
❌ 错误写法
-- 错误!不能用 = 判断NULL
SELECT * FROM employees WHERE salary = NULL;
-- 错误!不能用 != 判断非NULL
SELECT * FROM employees WHERE salary != NULL;
✅ 正确写法
-- 正确使用IS NULL
SELECT * FROM employees WHERE salary IS NULL;
-- 正确使用IS NOT NULL
SELECT * FROM employees WHERE salary IS NOT NULL;
5. 综合练习
练习1:数据完整性检查
-- 检查员工表中哪些关键信息缺失
SELECT
COUNT(*) as 总员工数,
COUNT(department) as 有部门的员工数,
COUNT(salary) as 有薪资的员工数,
COUNT(phone) as 有电话的员工数
FROM employees;
练习2:条件组合查询
-- 查找技术部中薪资未知的员工
SELECT * FROM employees
WHERE department = '技术部' AND salary IS NULL;
-- 查找所有信息完整的员工
SELECT * FROM employees
WHERE department IS NOT NULL
AND salary IS NOT NULL
AND hire_date IS NOT NULL
AND phone IS NOT NULL;
🎯 本章重点总结
💡 重要提醒
NULL ≠ 0,也≠ 空字符串
必须使用
IS NULL
/IS NOT NULL
判断空值空值在排序时通常显示在最前面
📝 课后作业
创建一个商品表,包含价格、库存等字段,故意插入一些空值
编写查询语句找出价格未知的商品
编写查询语句找出所有信息完整的商品
使用IFNULL函数为空的字段显示默认值