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
验证:values什么意思
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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论