空值在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’’
结果无记录!!!
尝试写法二
SELECT * FROM CRM.TEST20231130 WHERE COLUMN1 IS NOT null
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’
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 |
总结
在MySQL里面跟Oracle里面,字段的默认值设置为’‘时,底层实现是不一样的,Oracle里面只能通过转换函数nvl在使用运算符做查询,在MySQL理解可以直接使用做查询。在MySQL里面,默认值设置为’‘时使用 is not null 是能查到值为’'的数据,is null是查不到的。只有默认值为null,才能用 is null来查询。