• SQL中的null值


     1.  包含null的表达式都为null

     2.  null永远!=null

     3.  如果集合中含有null,不能使用not in; 但可以使用in

     4.  null的排序,null值最大

     5. 组函数(多行函数)自动滤空;可以嵌套滤空函数 来屏蔽他的滤空功能

    示例如下:

    SQL> /*
    SQL> SQL中的null值:
    SQL> 1. 包含null的表达式都为null
    SQL> 2. null永远!=null
    SQL> */
    SQL> select empno,ename,sal,sal*12,comm,sal*12+nvl(comm,0)
      2  from emp;
    
         EMPNO ENAME      SAL     SAL*12       COMM SAL*12+NVL(COMM,0)                                                                                    
    ---------- -------- ----- ---------- ---------- ------------------                                                                                    
          7369 SMITH      800       9600                          9600                                                                                    
          7499 ALLEN     1600      19200        300              19500                                                                                    
          7521 WARD      1250      15000        500              15500                                                                                    
          7566 JONES     2975      35700                         35700                                                                                    
          7654 MARTIN    1250      15000       1400              16400                                                                                    
          7698 BLAKE     2850      34200                         34200                                                                                    
          7782 CLARK     2450      29400                         29400                                                                                    
          7788 SCOTT     3000      36000                         36000                                                                                    
          7839 KING      5000      60000                         60000                                                                                    
          7844 TURNER    1500      18000          0              18000                                                                                    
          7876 ADAMS     1100      13200                         13200



    SQL> --2. null永远!=null
    SQL> --查询奖金为null的员工
    SQL> select *
      2  from emp
      3  where comm=null;
    
    未选定行
    
    SQL> select *
      2  from emp
      3  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                                                                   
    
    已选择 10 行。
    SQL> --null 值 3. 如果集合中含有null,不能使用not in; 但可以使用in
    SQL> ed
    已写入 file afiedt.buf
    
      1  select *
      2  from emp
      3* where deptno not in (10,20,null)
    SQL> /
    
    未选定行
    
    SQL> ed
    已写入 file afiedt.buf
    
      1  select *
      2  from emp
      3* where deptno in (10,20,null)
    SQL> /
    
         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                                                                   
    
    已选择 8 行。
    SQL> --null值  4. null的排序
    SQL> select * from emp order by comm;
    
         EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                   
    ---------- -------- --------- ---------- -------------- ----- ---------- ----------                                                                   
          7844 TURNER   SALESMAN        7698 08-9月 -81      1500          0         30                                                                   
          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                                                                   
          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                                                                   
          7698 BLAKE    MANAGER         7839 01-5月 -81      2850                    30                                                                   
    
         EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                   
    ---------- -------- --------- ---------- -------------- ----- ---------- ----------                                                                   
          7566 JONES    MANAGER         7839 02-4月 -81      2975                    20                                                                   
          7369 SMITH    CLERK           7902 17-12月-80       800                    20                                                                   
          7782 CLARK    MANAGER         7839 09-6月 -81      2450                    10                                                                   
    
    已选择 14 行。
    
    SQL> set pagesize 20
    SQL> /
    
         EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                   
    ---------- -------- --------- ---------- -------------- ----- ---------- ----------                                                                   
          7844 TURNER   SALESMAN        7698 08-9月 -81      1500          0         30                                                                   
          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                                                                   
          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                                                                   
          7698 BLAKE    MANAGER         7839 01-5月 -81      2850                    30                                                                   
          7566 JONES    MANAGER         7839 02-4月 -81      2975                    20                                                                   
          7369 SMITH    CLERK           7902 17-12月-80       800                    20                                                                   
          7782 CLARK    MANAGER         7839 09-6月 -81      2450                    10                                                                   
    
    已选择 14 行。
    
    SQL> ed
    已写入 file afiedt.buf
    
      1* select * from emp order by comm desc
    SQL> /
    
         EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                   
    ---------- -------- --------- ---------- -------------- ----- ---------- ----------                                                                   
          7369 SMITH    CLERK           7902 17-12月-80       800                    20                                                                   
          7782 CLARK    MANAGER         7839 09-6月 -81      2450                    10                                                                   
          7902 FORD     ANALYST         7566 03-12月-81      3000                    20                                                                   
          7900 JAMES    CLERK           7698 03-12月-81       950                    30                                                                   
          7876 ADAMS    CLERK           7788 23-5月 -87      1100                    20                                                                   
          7566 JONES    MANAGER         7839 02-4月 -81      2975                    20                                                                   
          7698 BLAKE    MANAGER         7839 01-5月 -81      2850                    30                                                                   
          7934 MILLER   CLERK           7782 23-1月 -82      1300                    10                                                                   
          7788 SCOTT    ANALYST         7566 19-4月 -87      3000                    20                                                                   
          7839 KING     PRESIDENT            17-11月-81      5000                    10                                                                   
          7654 MARTIN   SALESMAN        7698 28-9月 -81      1250       1400         30                                                                   
          7521 WARD     SALESMAN        7698 22-2月 -81      1250        500         30                                                                   
          7499 ALLEN    SALESMAN        7698 20-2月 -81      1600        300         30                                                                   
          7844 TURNER   SALESMAN        7698 08-9月 -81      1500          0         30                                                                   
    
    已选择 14 行。
    
    SQL> ed
    已写入 file afiedt.buf
    
      1  select * 
      2  from emp 
      3  order by comm desc
      4* nulls last
    SQL> /
    
         EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                   
    ---------- -------- --------- ---------- -------------- ----- ---------- ----------                                                                   
          7654 MARTIN   SALESMAN        7698 28-9月 -81      1250       1400         30                                                                   
          7521 WARD     SALESMAN        7698 22-2月 -81      1250        500         30                                                                   
          7499 ALLEN    SALESMAN        7698 20-2月 -81      1600        300         30                                                                   
          7844 TURNER   SALESMAN        7698 08-9月 -81      1500          0         30                                                                   
          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                                                                   
          7698 BLAKE    MANAGER         7839 01-5月 -81      2850                    30                                                                   
          7566 JONES    MANAGER         7839 02-4月 -81      2975                    20                                                                   
          7369 SMITH    CLERK           7902 17-12月-80       800                    20                                                                   
          7782 CLARK    MANAGER         7839 09-6月 -81      2450                    10                                                                   
    
    已选择 14 行。
    
    SQL> --原因:null值最大
    SQL> --null值 5.组函数(多行函数)自动滤空
    SQL> select count(*),count(nvl(comm,0)) from emp;
    
      COUNT(*) COUNT(NVL(COMM,0))                                                                                                                                                                           
    ---------- ------------------                                                                                                                                                                           
            14                 14                                                                                                                                                                           
    
    SQL> --null值 5.组函数(多行函数)自动滤空;可以嵌套滤空函数 来屏蔽他的滤空功能
    SQL> host cls
    
    SQL> --求每个部门的平均工资
    SQL> select deptno,avg(sal)
      2  from emp
      3  group by deptno;
    
        DEPTNO   AVG(SAL)                                                                                                                                                                                   
    ---------- ----------                                                                                                                                                                                   
            30 1566.66667                                                                                                                                                                                   
            20       2175                                                                                                                                                                                   
            10 2916.66667 
    纸上学来终觉浅,觉知此事需躬行
  • 相关阅读:
    如何关闭浏览器的自动完成功能
    <<设计模式C#>>学习笔记一:面向对象编程准备知识
    小心你成“鼠标手”
    中科院公布白领工资标准,香港月入18500才算白领
    在PB中调用IE
    在SqlServer2005里运行exe
    PBCS项目总结
    一条SQL删除所有表中数据
    SQL Server压缩Log文件的方法总结
    最近打算学习的一些东西
  • 原文地址:https://www.cnblogs.com/dreamHighMjc/p/7339511.html
Copyright © 2020-2023  润新知