空值在Oracle中的定义
空值(null)在Oracle中定义为缺失值,是与任何其他值都不同的一种特殊值。它代表着数据缺失或未知的情况,常常出现在未输入数据或在某些字段上没有数据的情况下。而在处理空值时,需要在语句中使用“IS NULL”或“IS NOT NULL”进行判断。
测试验证
测试表结构
CREATE TABLE “CRM”.“TEST20231130”
( “COLUMN1” VARCHAR2(100) DEFAULT ‘’,
“COLUMN2” VARCHAR2(100) DEFAULT null,
“COLUMN3” DATE DEFAULT sysdate
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE “CRM” ;
插入数据
INSERT INTO CRM.TEST20231130(COLUMN1,COLUMN2,COLUMN3) values(‘1’,‘2’,sysdate)
INSERT INTO CRM.TEST20231130(COLUMN1,COLUMN2,COLUMN3) values(‘2’,‘2’,sysdate)
INSERT INTO CRM.TEST20231130(COLUMN2,COLUMN3) values(‘3’,sysdate)
INSERT INTO CRM.TEST20231130(COLUMN2,COLUMN3) values(‘4’,sysdate)
INSERT INTO CRM.TEST20231130(COLUMN1,COLUMN2,COLUMN3) values(’ ',‘5’,sysdate)
查询所有数据
SELECT * FROM CRM.TEST20231130
COLUMN1 COLUMN2 COLUMN3
1 2 2023-11-30 17:52:48.000
2 2 2023-11-30 17:52:58.000
3 2023-11-30 17:53:20.000
4 2023-11-30 17:54:09.000
5 2023-11-30 17:55:57.000
查询需求
想要查询出所有COLUMN1不为空的数据
尝试写法一
SELECT * FROM CRM.TEST20231130 WHERE COLUMN1’’ #在MySQL里面可以查到结果
结果无记录!!!
尝试写法二
SELECT * FROM CRM.TEST20231130 WHERE COLUMN1 IS NOT null #MySQL里面查到包括 默认值为’'的数据
COLUMN1 COLUMN2 COLUMN3
1 2 2023-11-30 17:52:48.000
2 2 2023-11-30 17:52:58.000
5 2023-11-30 17:55:57.000
尝试写法三
SELECT * FROM CRM.TEST20231130 where nvl(COLUMN1,‘null’)‘null’ #MySQL里面不能这样写,没有nvl函数
COLUMN1 COLUMN2 COLUMN3
1 2 2023-11-30 17:52:48.000
2 2 2023-11-30 17:52:58.000
5 2023-11-30 17:55:57.000
总结
在Oracle里面,默认值设置为’‘存储上等价于null,只能使用 “IS NULL”或者 “IS NOT NULL”来判断,但是MySQL里面字段默认值为’‘是 IS NOT NULL的存在,可以用 ’'来判断是否非空。