oracle学习笔记之空值null

1 任何表达式和null计算都为null

SQL> select empno,ename, (sal*12 + comm) 年收入
	  2  from emp;

		EMPNO ENAME                    年收入
	---------- -------------------- ----------
		7369 SMITH
		7499 ALLEN                     19500
		7521 WARD                      15500
		7566 JONES
		7654 MARTIN                    16400
		7698 BLAKE
		7782 CLARK
		7788 SCOTT
		7839 KING
		7844 TURNER                    18000
		7876 ADAMS
		7900 JAMES
		7902 FORD
		7934 MILLER

问题:年收入竟然为空,这是因为comm为null,任何表达式和null计算都为null


2 解决办法是滤值修正

SQL> select empno,ename,sal*12 年薪, comm 奖金,(sal*12 + nvl(comm,0)) 年收入
	  2  from emp;

		EMPNO ENAME                      年薪       奖金     年收入
	---------- -------------------- ---------- ---------- ----------
		7369 SMITH                      9600                  9600
		7499 ALLEN                     19200        300      19500
		7521 WARD                      15000        500      15500
		7566 JONES                     35700                 35700
		7654 MARTIN                    15000       1400      16400
		7698 BLAKE                     34200                 34200
		7782 CLARK                     29400                 29400
		7788 SCOTT                     36000                 36000
		7839 KING                      60000                 60000
		7844 TURNER                    18000          0      18000
		7876 ADAMS                     13200                 13200
		7900 JAMES                     11400                 11400
		7902 FORD                      36000                 36000
		7934 MILLER                    15600                 15600

3 null != null

例子1

SQL> select * from emp
	 where comm is null;

			EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
		---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
			7369 SMITH                CLERK                    7902 17-12月-80            800                 20
			7566 JONES                MANAGER                  7839 02-4月 -81           2975                 20
			7698 BLAKE                MANAGER                  7839 01-5月 -81           2850                 30
			7782 CLARK                MANAGER                  7839 09-6月 -81           2450                 10
			7788 SCOTT                ANALYST                  7566 19-4月 -87           3000                 20
			7839 KING                 PRESIDENT                     17-11月-81           5000                 10
			7876 ADAMS                CLERK                    7788 23-5月 -87           1100                 20
			7900 JAMES                CLERK                    7698 03-12月-81            950                 30
			7902 FORD                 ANALYST                  7566 03-12月-81           3000                 20
			7934 MILLER               CLERK                    7782 23-1月 -82           1300                 10

例子2 查询奖金不是空的员工

SQL> select * from emp
     where comm is not null;

		EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
	---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
		7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300      30
		7521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500      30
		7654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400      30
		7844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0      30

4. 如果集合里面有null值,则不能使用not in操作符,但可以使用in

例子1//结果正确

SQL> select *
  2  from emp
  3  where deptno in (10,20,null);

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7369 SMITH                CLERK                    7902 17-12月-80            800                 20
      7566 JONES                MANAGER                  7839 02-4月 -81           2975                 20
      7782 CLARK                MANAGER                  7839 09-6月 -81           2450                 10
      7788 SCOTT                ANALYST                  7566 19-4月 -87           3000                 20
      7839 KING                 PRESIDENT                     17-11月-81           5000                 10
      7876 ADAMS                CLERK                    7788 23-5月 -87           1100                 20
      7902 FORD                 ANALYST                  7566 03-12月-81           3000                 20
      7934 MILLER               CLERK                    7782 23-1月 -82           1300                 10


例子2//语法没问题 结果不正确

SQL> select *
 2  from emp
 3  where deptno not in (10,20,null);

 no rows selected

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青草地溪水旁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值