什么是空值
空值从技术上来说就是“未知的值”。但空值并不包括零、一个或者多个空格组成的字符串、以及零长度的字符串。
从实际应用中,空值说明还没有向数据库中输入相应的数据,或者某个特定的记录行不需要使用该列。在实际的操作中有下列几种情况可使得一列成为NULL。
(1)其值未知,如课程表中不明确具体的课程内容。
(2)其值不存在,如在学生表中某个学生由于没有参加考试,所以该学生的考试成绩为空值。
(3)列对表行不可用。
检测空值
因为空值代表的是未知的值,所以并不是所有的空值都相等。例如,“student”表中有两个学生的年龄未知,但无法证明这两个学生的年龄相等。这样就不能用“=”运算符来检测空值。所
以SQL引入了一个特殊的操作符IS来检测特殊值之间的等价性。
语法:
WHERE Expression IS NULL
示例:
查询“grade”表中没有“课程成绩”的学生。在查询分析器中输入的SQL语句如下:
use student
select *
from grade
where 课程成绩 is null
实现的过程如图1所示。
图1 查询没有课程成绩的学生
上述程序改为用“=”运算符来查询空值,查询结果如图2所示。
图2 用“=”运算符查询空值
实现的过程如图1所示。
图1 查询没有课程成绩的学生
上述程序改为用“=”运算符来查询空值,查询结果如图2所示。
图2 用“=”运算符查询空值
从上面的例子中看出,用“=”运算符来检测空值是不成功的。
IS运算符可以与NOT配合使用以检查非空的值。
示例:
在“grade”表中,查询“课程成绩”不为空的记录。在查询分析器中输入的SQL语句如下:
use student
select *
from grade
where 课程成绩 is not null
实现的过程如图3所示。
图3 查询学生“课程成绩”不为空的记录
处理空值
在实际使用数据表的数据时,空值是很不受欢迎的。通常需要将空值转换为一个有效的值,以便对数据的理解,或者防止表达式出错。
SQL为处理空值提供了几个专门用来处理空值的函数。ISNULL( )函数可以将空值转换为有效的值;而NULLIF( )函数可以根据指定的条件来生成空值。
1.使用ISNULL( )函数来处理空值
ISNULL( )函数是用指定的值替换空值。
语法:
ISNULL (check_expression , replacement_value )
参数说明:
● ● check_expression:将被检查是否为 NULL值的表达式。check_expression 可以是任何类型的。
● ● replacement_value:在check_expression为NULL值时,将用replacement_value值替换NULL值。replacement_value 必须与check_expresssion具有相同的类型。
返回类型:返回与check_expression相同的类型。
说明:如果check_expression不为NULL值,那么返回该表达式的值;否则返回sql语句替换表中内容replacement_value。
示例:
在“grade”表中,“课程成绩”为NULL值的,用数值“0”来替代。在查询分析器中输入的SQL语句如下:
use student
select 学号, 课程代号 ,
isnull(课程成绩,0) as 课程成绩 , 学期
from grade
实现的过程如图1所示。
图1 “课程成绩”为NULL值的用“0”替代
如果课程成绩不为空值,ISNULL( )函数将会返回原值。只有课程成绩为NULL值时,ISNULL( )函数将会对其进行处理,用数值0替代。
2.使用NULLIF( )函数来处理空值
NULLIF( )函数功能:如果一个数据表中应该使用NULL值的地方使用了其他数据,那么就可以使用NULLIF( )函数将这些不一致的值替换为空值。
语法:
NULLIF ( expression , expression )
参数说明:
expression:常量、列名、函数、子查询或算术运算符、按位运算符以及字符串运算符的任意组合。返回类型:返回类型与第一个expression相同。如果两个表达式不相等,NULLIF 返回第一个expression的值。如果相等,NULLIF 返回第一个expression类型的空值。
说明:如果两个表达式相等且结果表达式为NULL,NULLIF等价于CASE的搜索函数。
示例:
在“grade”表中,“学期”值是“1”的替换成NULL值。在查询分析器中输入的SQL语句如下:
use student
select nullif(学期,'1') as 学期
from grade
实现的过程如图2所示。
图2 “学期”是“1”的替换成NULL值
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论