SQL处理空值

注:所有的下划线+斜体语句都是非必须语句


SQL语句:

Select…  From…  Where 列名 is not null…

注意不允许"=null"


现行DBMS的空值处理小结:

  • 除了is not null之外,空值不满足任何查找条件
  • 如果null参与算术运算,则该算术表达式的值为null
  • 如果null参与比较运算,则结果可视为0(在SQL-92中可看成unknown)
  • 如果null参与聚集运算,则除count(*)之外其它聚集函数都忽略null


示例①:找出年龄值为空的学生姓名

Select Sname From Student
Where Sage is null;

示例②:如下表:


Select AVG(Score) From SC    →    结果为(92+55)/2 = 73.5

Select COUNT(*) From SC    →    结果为3



### SQL Server 空值处理函数 ISNULL 和 COALESCE 的使用方法 在 SQL Server 中,`ISNULL` 和 `COALESCE` 是两个常用的空值处理函数,用于替换 NULL 值为指定的替代值。 #### 1. ISNULL 函数 `ISNULL` 函数用于检查表达式是否为 NULL,并返回指定的替换值。其语法如下: ```sql ISNULL(check_expression, replacement_value) ``` - `check_expression`:需要检查是否为 NULL 的表达式。 - `replacement_value`:当 `check_expression` 为 NULL 返回的替代值。此值必须可以隐式转换为 `check_expression` 的类型[^2]。 示例代码: ```sql SELECT ISNULL(ssex, 'p') AS Gender FROM stu; ``` 上述代码中,如果 `ssex` 列中的值为 NULL,则返回 `'p'`[^2]。 #### 2. COALESCE 函数 `COALESCE` 函数返回参数列表中第一个非 NULL 的表达式。它可以接受多个参数,语法如下: ```sql COALESCE(expression1, expression2, ..., expressionN) ``` - `expression1`, `expression2`, ..., `expressionN`:一系列需要检查是否为 NULL 的表达式。 示例代码: ```sql SELECT FName, FBirthday, FRegDay, COALESCE(FBirthday, FRegDay, '2008-08-08') AS ImportantDay FROM T_Person; ``` 上述代码中,如果 `FBirthday` 不为 NULL,则返回 `FBirthday`;如果 `FBirthday` 为 NULL 且 `FRegDay` 不为 NULL,则返回 `FRegDay`;如果两者均为 NULL,则返回 `'2008-08-08'`[^3]。 #### 区别与注意事项 - **数据类型**:`ISNULL` 的返回值总是与第一个参数的数据类型相同,而 `COALESCE` 的返回值是基于所有参数的数据类型推导出的最高优先级类型。 - **参数数量**:`ISNULL` 只能接受两个参数,而 `COALESCE` 可以接受任意数量的参数[^3]。 - **性能**:`ISNULL` 是 SQL Server 特有的函数,通常比 `COALESCE` 更快,但 `COALESCE` 更灵活且符合 SQL 标准。 ### 示例对比 假设表 `T_Person` 中的数据如下: | FName | FBirthday | FRegDay | |---------|-----------|-----------| | Alice | NULL | 2022-01-01| | Bob | 2020-05-15| NULL | | Charlie | NULL | NULL | 执行以下查询: ```sql SELECT FName, ISNULL(FBirthday, FRegDay) AS ISNULL_Result, COALESCE(FBirthday, FRegDay, '2008-08-08') AS COALESCE_Result FROM T_Person; ``` 结果为: | FName | ISNULL_Result | COALESCE_Result | |---------|---------------|------------------| | Alice | 2022-01-01 | 2022-01-01 | | Bob | 2020-05-15 | 2020-05-15 | | Charlie | NULL | 2008-08-08 | #### 注意事项 - 使用 `ISNULL` 需确保 `replacement_value` 的数据类型与 `check_expression` 兼容[^2]。 - 使用 `COALESCE` ,注意参数的数据类型推导规则[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值