• 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 
    纸上学来终觉浅,觉知此事需躬行
  • 相关阅读:
    tar.gz 查看原文件大小
    ssh2 和 ssh 的公钥转换
    MySQL binlog 导入
    app自动测试-微信(android)-web-1
    crontab中执行java程序的脚本
    tomcat 启动慢解决(/dev/random)
    app自动测试-微信(iOS)-web-1
    git
    java.lang.OutOfMemoryError: unable to create new native thread
    docker (centOS 7) 使用笔记6
  • 原文地址:https://www.cnblogs.com/dreamHighMjc/p/7339511.html
Copyright © 2020-2023  润新知