sql 中 is not null 用法_sql 中 is not null 非空判断教程

sql 中 is not null 用法_sql 中 is not null 非空判断教程
最新回答
我阅君心

2026-10-22 23:18:41

在 SQL 中,IS NOT NULL 用于判断字段是否非空,是处理数据库中 NULL 值的必备条件。 以下是详细用法和注意事项:

一、何时使用 IS NOT NULL
  1. 查询非空记录

    筛选字段有实际值的记录(如电话号码、地址等)。

    示例:查询用户表中电话号码不为空的用户。

    SELECT name, phone FROM users WHERE phone IS NOT NULL;
  2. 统计非空数据条数

    结合聚合函数(如 COUNT)统计非空字段的数量。

    示例:统计客户表中邮箱非空的客户数量。

    SELECT COUNT(*) FROM customers WHERE email IS NOT NULL;
  3. 排除空值干扰

    在复杂查询中排除 NULL 值,确保结果准确性。

    示例:筛选价格非空且大于 0 的商品。

    SELECT product_name, price FROM products WHERE price IS NOT NULL AND price > 0;
  4. 结合其他条件筛选有效数据

    与其他条件(如状态、日期等)组合使用,缩小查询范围。

    示例:查询已发货且地址非空的订单。

    SELECT * FROM orders WHERE address IS NOT NULL AND status = '已发货';
二、正确语法与常见错误
  1. 基本语法

    SELECT * FROM 表名 WHERE 字段名 IS NOT NULL;
  2. 错误写法

    不能用 = 或 != 与 NULL 比较,以下写法无效:

    WHERE phone != NULL; -- 错误!WHERE phone = NULL; -- 错误!

    原因:NULL 表示“未知”,与任何值比较均返回 UNKNOWN,而非 TRUE 或 FALSE。

三、结合其他条件的使用
  1. 多条件组合

    通过 AND/OR 连接其他条件,实现更复杂的筛选逻辑。

    示例:查询地址非空且状态为“已发货”的订单。

    SELECT * FROM orders WHERE address IS NOT NULL AND status = '已发货';
  2. 排除异常值

    排除 NULL 和无效值(如负数、空字符串等)。

    示例:筛选价格非空且大于 0 的商品。

    SELECT product_name, price FROM products WHERE price IS NOT NULL AND price > 0;
  3. 与聚合函数结合

    统计非空字段的数量或计算非空值的平均值等。

    示例:统计客户表中邮箱非空的客户数量。

    SELECT COUNT(*) FROM customers WHERE email IS NOT NULL;
四、注意事项与细节
  1. 索引影响查询效率

    对索引字段使用 IS NOT NULL 可能影响执行计划,尤其在大数据量下需关注索引使用情况。

    建议:若字段频繁需要非空判断,可建立合适索引提升效率。

  2. NULL 与空字符串的区别

    NULL 表示“未知”,空字符串 '' 是有效值,二者不等价。

    示例:以下条件不会匹配 NULL 值。

    WHERE column_name <> ''; -- 仅排除空字符串,不包含 NULL
  3. 同时排除 NULL 和空字符串

    使用 COALESCE 函数将 NULL 转换为默认值(如空字符串),再比较。

    示例:排除 NULL 和空字符串。

    WHERE COALESCE(column_name, '') <> '';
  4. NULL 在计算中的特殊性

    任何涉及 NULL 的算术或逻辑运算均返回 NULL。

    示例:

    SELECT 1 + NULL; -- 结果为 NULLSELECT NULL OR TRUE; -- 结果为 NULL(非 TRUE)
五、实际应用场景
  1. 数据清洗

    筛选出完整数据记录,排除缺失关键字段的脏数据。

    示例:清洗用户表,保留电话非空的记录。

    SELECT * FROM users WHERE phone IS NOT NULL;
  2. 报表统计

    统计非空字段的数量或占比,分析数据完整性。

    示例:统计客户表中邮箱填写率。

    SELECT COUNT(*) AS total_customers, COUNT(email) AS filled_emails, COUNT(email) * 100.0 / COUNT(*) AS fill_rateFROM customers;
  3. 动态条件查询

    在存储过程或动态 SQL 中,根据参数决定是否添加 IS NOT NULL 条件。

    示例:根据参数 @include_null 决定是否筛选非空记录。

    DECLARE @include_null BIT = 0;SELECT * FROM productsWHERE (@include_null = 1 OR price IS NOT NULL);
总结
  • 核心作用:IS NOT NULL 是 SQL 中处理 NULL 值的唯一正确方式,用于筛选非空记录、统计数据或排除干扰。
  • 关键点:

    语法:WHERE 字段名 IS NOT NULL。

    避免用 = 或 != 比较 NULL。

    结合其他条件和聚合函数实现复杂逻辑。

    注意 NULL 与空字符串的区别,必要时用 COALESCE 处理。

掌握 IS NOT NULL 的用法,能显著提升数据查询的准确性和效率,避免因 NULL 值导致的逻辑错误。