Oracle中的null,空字符串,空格
在oracle中使⽤NULL,’’(空字符串),’ '(空格)时,有没有遇到问题?产⽣疑惑?
先说结论:NULL和’’(空字符串)是⼀个意思
注:为了便于区分空字符串和空格,下⾯的⽰例均以 '_'代表空格
举个例⼦:
--建表
CREATE TABLE tbl_a (col_a VARCHAR2(1), col_b INT);
-- 造数据语文教学反思
松花蛋是皮蛋吗
INSERT INTO tbl_a VALUES('_',1);-- 插⼊空格
INSERT INTO tbl_a VALUES('',2);-- 插⼊空字符串
INSERT INTO tbl_a VALUES(NULL,3);-- 插⼊NULL
三年级词语
以上SQL执⾏成功后,执⾏ SELECT来检查:
SELECT COUNT(*)FROM tbl_a WHERE col_a ='_'--结果为1
SELECT COUNT(*)FROM tbl_a WHERE col_a =''--结果为0
SELECT COUNT(*)FROM tbl_a WHERE col_a IS NULL--结果为2
注意: 由于''(空串)默认被转换成了 NULL,不能使⽤= ''作为查询条件。也不能⽤ IS''。虽然不会有语法错误,但是不会有结果集返回。只能⽤IS NULL。不等于就是IS NOT NULL。
进⼀步验证:
SELECT NVL(col_a,'a')FROM tbl_a
以上,oracle中的NULL和''(空字符串)是⼀个意思
分析函数与NULL
在使⽤AVG,MAX,SUM,COUNT等函数时,为NULL的纪录会被忽略。
再插⼊⼏条数据:
INSERT INTO tbl_a VALUES(null,null);--插⼊NULL
大学生英语四六级官网INSERT INTO tbl_a VALUES('a','');
-- 执⾏成功。
-- 再次证明,’’ 被当作了null处理.
-- 因为该字段是 int 类型,如果是字符串,执⾏会报错
查看数据:
SELECT*FROM tbl_a
说明:_ 代表空格,其余空⽩处表⽰ NULL
西式糕点验证:
白俄罗斯战役
SELECT AVG(col_b)FROM tbl_a;-- 结果为 2 ,NULL的纪录⾏忽略掉了SELECT MAX(col_b)FROM tbl_a;-- 结果为 3
SELECT SUM(col_b)FROM tbl_a;-- 结果为 6
SELECT COUNT(col_b)FROM tbl_a;-- 结果为 3
SELECT COUNT(col_a)FROM tbl_a;--结果为2
周天一SELECT COUNT(*)FROM tbl_a;--结果为5
排序时,NULL作为⽆穷⼤处理。
SELECT*FROM tbl_a ORDER BY col_b DESC
>史迪威事件