SQL使用空值
- 格式:doc
- 大小:89.00 KB
- 文档页数:4
什么是空值
空值从技术上来说就是“未知的值”。
但空值并不包括零、一个或者多个空格组成的字符串、以及零长度的字符串。
从实际应用中,空值说明还没有向数据库中输入相应的数据,或者某个特定的记录行不需要使用该列。
在实际的操作中有下列几种情况可使得一列成为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值,那么返回该表达式的值;否则返回re placement_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值。