2026-10-22 23:18:41
在 SQL 中,IS NOT NULL 用于判断字段是否非空,是处理数据库中 NULL 值的必备条件。 以下是详细用法和注意事项:
一、何时使用 IS NOT NULL查询非空记录
筛选字段有实际值的记录(如电话号码、地址等)。
示例:查询用户表中电话号码不为空的用户。
SELECT name, phone FROM users WHERE phone IS NOT NULL;统计非空数据条数
结合聚合函数(如 COUNT)统计非空字段的数量。
示例:统计客户表中邮箱非空的客户数量。
SELECT COUNT(*) FROM customers WHERE email IS NOT NULL;排除空值干扰
在复杂查询中排除 NULL 值,确保结果准确性。
示例:筛选价格非空且大于 0 的商品。
SELECT product_name, price FROM products WHERE price IS NOT NULL AND price > 0;结合其他条件筛选有效数据
与其他条件(如状态、日期等)组合使用,缩小查询范围。
示例:查询已发货且地址非空的订单。
SELECT * FROM orders WHERE address IS NOT NULL AND status = '已发货';基本语法
SELECT * FROM 表名 WHERE 字段名 IS NOT NULL;错误写法
不能用 = 或 != 与 NULL 比较,以下写法无效:
WHERE phone != NULL; -- 错误!WHERE phone = NULL; -- 错误!原因:NULL 表示“未知”,与任何值比较均返回 UNKNOWN,而非 TRUE 或 FALSE。
多条件组合
通过 AND/OR 连接其他条件,实现更复杂的筛选逻辑。
示例:查询地址非空且状态为“已发货”的订单。
SELECT * FROM orders WHERE address IS NOT NULL AND status = '已发货';排除异常值
排除 NULL 和无效值(如负数、空字符串等)。
示例:筛选价格非空且大于 0 的商品。
SELECT product_name, price FROM products WHERE price IS NOT NULL AND price > 0;与聚合函数结合
统计非空字段的数量或计算非空值的平均值等。
示例:统计客户表中邮箱非空的客户数量。
SELECT COUNT(*) FROM customers WHERE email IS NOT NULL;索引影响查询效率
对索引字段使用 IS NOT NULL 可能影响执行计划,尤其在大数据量下需关注索引使用情况。
建议:若字段频繁需要非空判断,可建立合适索引提升效率。
NULL 与空字符串的区别
NULL 表示“未知”,空字符串 '' 是有效值,二者不等价。
示例:以下条件不会匹配 NULL 值。
WHERE column_name <> ''; -- 仅排除空字符串,不包含 NULL同时排除 NULL 和空字符串
使用 COALESCE 函数将 NULL 转换为默认值(如空字符串),再比较。
示例:排除 NULL 和空字符串。
WHERE COALESCE(column_name, '') <> '';NULL 在计算中的特殊性
任何涉及 NULL 的算术或逻辑运算均返回 NULL。
示例:
SELECT 1 + NULL; -- 结果为 NULLSELECT NULL OR TRUE; -- 结果为 NULL(非 TRUE)数据清洗
筛选出完整数据记录,排除缺失关键字段的脏数据。
示例:清洗用户表,保留电话非空的记录。
SELECT * FROM users WHERE phone IS NOT NULL;报表统计
统计非空字段的数量或占比,分析数据完整性。
示例:统计客户表中邮箱填写率。
SELECT COUNT(*) AS total_customers, COUNT(email) AS filled_emails, COUNT(email) * 100.0 / COUNT(*) AS fill_rateFROM customers;动态条件查询
在存储过程或动态 SQL 中,根据参数决定是否添加 IS NOT NULL 条件。
示例:根据参数 @include_null 决定是否筛选非空记录。
DECLARE @include_null BIT = 0;SELECT * FROM productsWHERE (@include_null = 1 OR price IS NOT NULL);语法:WHERE 字段名 IS NOT NULL。
避免用 = 或 != 比较 NULL。
结合其他条件和聚合函数实现复杂逻辑。
注意 NULL 与空字符串的区别,必要时用 COALESCE 处理。
掌握 IS NOT NULL 的用法,能显著提升数据查询的准确性和效率,避免因 NULL 值导致的逻辑错误。