• Oracle学习(二):过滤和排序


    1.知识点:能够对比以下的录屏进行阅读

    SQL> --字符串大写和小写敏感
    SQL> --查询名叫KING的员工信息
    SQL> select *
      2  from emp
      3  where ename = 'KING';
    
    SQL> --日期格式敏感
    SQL> --查询入职日期为17-11月-81的员工
    SQL> select *
      2  from emp
      3  where hiredate='17-11月-81';	--正确样例
    SQL> ed
    已写入 file afiedt.buf
    
      1  select *
      2  from emp
      3* where hiredate='1981-11-17'		--错误样例
    SQL> /
    where hiredate='1981-11-17'
                   *
    第 3 行出现错误: 
    ORA-01861: 文字与格式字符串不匹配 
    
    SQL> -- Oracle 9i之前,日期格式 DD-MON-YY  1998 --> 98  2098 --> 98 ; Oracle 9i之后  DD-MON-RR
    SQL> --当前时间
    SQL> select sysdate from dual;  
    
    SQL> --查询系统參数
    SQL> select * from v$nls_parameters;
    SQL> --v$nls_parameters 数据字典
    
    SQL> --改动日期格式
    SQL> alter session set NLS_DATE_FORMAT='yyyy-mm-dd';
    
    SQL> --between ..and:在...之间
    SQL> -- 1. 含边界  2. 小值在前。大值在后
    SQL> --查询薪水1000~2000的员工
    SQL> select *
      2  from emp
      3  where sal between 1000 and 2000;
    
    SQL> --in: 在集合中
    SQL> --查询10和20号部门的员工
    SQL> select *
      2  from emp
      3  where deptno in (10,20);
    
    SQL> --查询不是10和20号部门的员工
    SQL> select *
      2  from emp
      3  where deptno not in (10,20)
    SQL> ed
    已写入 file afiedt.buf
    
      1  select *
      2  from emp
      3* where deptno not in (10,20,null)	--在not in的作用范围里加入null字段后,显示结果为空
    SQL> --结论:假设集合中含有null值。不能使用not in操作符;但能够使用in
    
    SQL> --like 模糊查询 % _
    SQL> --查询名字以’S’打头的员工信息
    SQL> select *
      2  from emp
      3  where ename like 'S%';
    
    SQL> --查询名字是四个字的员工
    SQL> select *
      2  from emp
      3  where ename like '____';	--4个_
    
    SQL> --查询名字中含义下划线的员工
    SQL> --使用转义字符
    SQL> select *
      2  from emp
      3  where  ename like '%\_%' escape ''  --转义字符不固定。但通经常使用’’
    
    SQL> --逻辑运算符
    SQL> --and or
    SQL> --SQL优化:2. 解析顺序: 从右至左
    
    SQL> --排序
    SQL> --查询员工信息,依照月薪排序
    SQL> select *
      2  from emp
      3  order by sal;
    
    SQL> --a命令  append,追加命令
    SQL> a   desc 	--a命令后空格至少2个空格
      3* order by sal  desc
    
    SQL> --order by 后面 + 列名, 表达式, 别名, 序号
    SQL> select ename,sal,comm,sal*12+nvl(comm,0)
      2  from emp
      3  order by sal*12+nvl(comm,0);	--列名。表达式
    SQL> ed
    已写入 file afiedt.buf
    
      1  select ename,sal,comm,sal*12+nvl(comm,0) 年收入		
      2  from emp
      3* order by 年收入	--别名
    SQL> /
    SQL> ed
    已写入 file afiedt.buf
    
      1  select ename,sal,comm,sal*12+nvl(comm,0) 年收入
      2  from emp
      3* order by 4	--序号
    SQL> /
    
    SQL> --order by跟多列:作用于后面全部的列
    SQL> --desc离他近期的一列
    SQL> select *
      2  from emp
      3  order by deptno,sal desc	--先按deptno升序排列,然后按sal降序排列
    SQL> ed
    已写入 file afiedt.buf
    
      1  select  *
      2  from emp
      3  order by comm desc	--按comm降序排序
      4* nulls last		--空值放最后

    2.在Sqlplus下实际运行的结果录屏:

    SQL> --查询10号部门员工
    SQL> select *
      2  from emp
      3  where deptno=10;
    
         EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                     
    ---------- -------- --------- ---------- -------------- ----- ---------- ----------                                     
          7782 CLARK    MANAGER         7839 09-6月 -81      2450                    10                                     
          7839 KING     PRESIDENT            17-11月-81      5000                    10                                     
          7934 MILLER   CLERK           7782 23-1月 -82      1300                    10                                     
    
    SQL> --字符串大写和小写敏感
    SQL> --查询名叫KING的员工信息
    SQL> select *
      2  from emp
      3  where ename = 'KING';
    
         EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                     
    ---------- -------- --------- ---------- -------------- ----- ---------- ----------                                     
          7839 KING     PRESIDENT            17-11月-81      5000                    10                                     
    
    SQL> ed
    已写入 file afiedt.buf
    
      1  select *
      2  from emp
      3* where ename = 'king'
    SQL> /
    
    未选定行
    
    SQL> --日期格式敏感
    SQL> --查询入职日期为17-11月-81的员工
    SQL> select *
      2  from emp
      3  where hiredate='17-11月-81';
    
         EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                     
    ---------- -------- --------- ---------- -------------- ----- ---------- ----------                                     
          7839 KING     PRESIDENT            17-11月-81      5000                    10                                     
    
    SQL> ed
    已写入 file afiedt.buf
    
      1  select *
      2  from emp
      3* where hiredate='1981-11-17'
    SQL> /
    where hiredate='1981-11-17'
                   *
    第 3 行出现错误: 
    ORA-01861: 文字与格式字符串不匹配 
    
    
    SQL> desc emp
     名称                                                              是否为空? 类型
     ----------------------------------------------------------------- -------- --------------------------------------------
     EMPNO                                                             NOT NULL NUMBER(4)
     ENAME                                                                      VARCHAR2(10)
     JOB                                                                        VARCHAR2(9)
     MGR                                                                        NUMBER(4)
     HIREDATE                                                                   DATE
     SAL                                                                        NUMBER(7,2)
     COMM                                                                       NUMBER(7,2)
     DEPTNO                                                                     NUMBER(2)
    
    SQL> /*
    SQL> Oracle 9i之前,日期格式
    SQL> DD-MON-YY  1998 --> 98
    SQL>            2098 --> 98
    SQL> 
    SQL> Oracle 9i之后
    SQL> DD-MON-RR
    SQL> */
    SQL> --当前时间
    SQL> select sysdate from dual;
    
    SYSDATE                                                                                                                 
    --------------                                                                                                          
    22-10月-12                                                                                                              
    
    SQL> --查询系统參数
    SQL> select * from v$nls_parameters;
    
    PARAMETER                                                                                                               
    ----------------------------------------------------------------                                                        
    VALUE                                                                                                                   
    ----------------------------------------------------------------                                                        
    NLS_LANGUAGE                                                                                                            
    SIMPLIFIED CHINESE                                                                                                      
                                                                                                                            
    NLS_TERRITORY                                                                                                           
    CHINA                                                                                                                   
                                                                                                                            
    NLS_CURRENCY                                                                                                            
    ¥                                                                                                                      
                                                                                                                            
    
    PARAMETER                                                                                                               
    ----------------------------------------------------------------                                                        
    VALUE                                                                                                                   
    ----------------------------------------------------------------                                                        
    NLS_ISO_CURRENCY                                                                                                        
    CHINA                                                                                                                   
                                                                                                                            
    NLS_NUMERIC_CHARACTERS                                                                                                  
    .,                                                                                                                      
                                                                                                                            
    NLS_CALENDAR                                                                                                            
    GREGORIAN                                                                                                               
                                                                                                                            
    
    PARAMETER                                                                                                               
    ----------------------------------------------------------------                                                        
    VALUE                                                                                                                   
    ----------------------------------------------------------------                                                        
    NLS_DATE_FORMAT                                                                                                         
    DD-MON-RR                                                                                                               
                                                                                                                            
    NLS_DATE_LANGUAGE                                                                                                       
    SIMPLIFIED CHINESE                                                                                                      
                                                                                                                            
    NLS_CHARACTERSET                                                                                                        
    ZHS16GBK                                                                                                                
                                                                                                                            
    
    PARAMETER                                                                                                               
    ----------------------------------------------------------------                                                        
    VALUE                                                                                                                   
    ----------------------------------------------------------------                                                        
    NLS_SORT                                                                                                                
    BINARY                                                                                                                  
                                                                                                                            
    NLS_TIME_FORMAT                                                                                                         
    HH.MI.SSXFF AM                                                                                                          
                                                                                                                            
    NLS_TIMESTAMP_FORMAT                                                                                                    
    DD-MON-RR HH.MI.SSXFF AM                                                                                                
                                                                                                                            
    
    PARAMETER                                                                                                               
    ----------------------------------------------------------------                                                        
    VALUE                                                                                                                   
    ----------------------------------------------------------------                                                        
    NLS_TIME_TZ_FORMAT                                                                                                      
    HH.MI.SSXFF AM TZR                                                                                                      
                                                                                                                            
    NLS_TIMESTAMP_TZ_FORMAT                                                                                                 
    DD-MON-RR HH.MI.SSXFF AM TZR                                                                                            
                                                                                                                            
    NLS_DUAL_CURRENCY                                                                                                       
    ¥                                                                                                                      
                                                                                                                            
    
    PARAMETER                                                                                                               
    ----------------------------------------------------------------                                                        
    VALUE                                                                                                                   
    ----------------------------------------------------------------                                                        
    NLS_NCHAR_CHARACTERSET                                                                                                  
    AL16UTF16                                                                                                               
                                                                                                                            
    NLS_COMP                                                                                                                
    BINARY                                                                                                                  
                                                                                                                            
    NLS_LENGTH_SEMANTICS                                                                                                    
    BYTE                                                                                                                    
                                                                                                                            
    
    PARAMETER                                                                                                               
    ----------------------------------------------------------------                                                        
    VALUE                                                                                                                   
    ----------------------------------------------------------------                                                        
    NLS_NCHAR_CONV_EXCP                                                                                                     
    FALSE                                                                                                                   
                                                                                                                            
    
    已选择19行。

    SQL> set linesize 150 SQL> col parameter for a 20 SP2-0246: 非法的 FORMAT 字符串"a" SQL> col parameter for a20 SQL> select * from v$nls_parameters; PARAMETER VALUE -------------------- ---------------------------------------------------------------- NLS_LANGUAGE SIMPLIFIED CHINESE NLS_TERRITORY CHINA NLS_CURRENCY ¥ NLS_ISO_CURRENCY CHINA NLS_NUMERIC_CHARACTE ., RS NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD-MON-RR NLS_DATE_LANGUAGE SIMPLIFIED CHINESE NLS_CHARACTERSET ZHS16GBK PARAMETER VALUE -------------------- ---------------------------------------------------------------- NLS_SORT BINARY NLS_TIME_FORMAT HH.MI.SSXFF AM NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR NLS_TIMESTAMP_TZ_FOR DD-MON-RR HH.MI.SSXFF AM TZR MAT NLS_DUAL_CURRENCY ¥ NLS_NCHAR_CHARACTERS AL16UTF16 ET PARAMETER VALUE -------------------- ---------------------------------------------------------------- NLS_COMP BINARY NLS_LENGTH_SEMANTICS BYTE NLS_NCHAR_CONV_EXCP FALSE 已选择19行。

    SQL> col parameter for a30 SQL> host cls SQL> select * from v$nls_parameters; PARAMETER VALUE ------------------------------ ---------------------------------------------------------------- NLS_LANGUAGE SIMPLIFIED CHINESE NLS_TERRITORY CHINA NLS_CURRENCY ¥ NLS_ISO_CURRENCY CHINA NLS_NUMERIC_CHARACTERS ., NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD-MON-RR NLS_DATE_LANGUAGE SIMPLIFIED CHINESE NLS_CHARACTERSET ZHS16GBK NLS_SORT BINARY NLS_TIME_FORMAT HH.MI.SSXFF AM PARAMETER VALUE ------------------------------ ---------------------------------------------------------------- NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR NLS_DUAL_CURRENCY ¥ NLS_NCHAR_CHARACTERSET AL16UTF16 NLS_COMP BINARY NLS_LENGTH_SEMANTICS BYTE NLS_NCHAR_CONV_EXCP FALSE 已选择19行。

    SQL> --v$nls_parameters 数据字典 SQL> --改动日期格式 SQL> alter session set NLS_DATE_FORMAT='yyyy-mm-dd'; 会话已更改。 SQL> select * from emp where hiredate='1981-11-17'; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------- --------- ---------- ---------- ----- ---------- ---------- 7839 KING PRESIDENT 1981-11-17 5000 10 SQL> alter session set NLS_DATE_FORMAT='DD-MON-RR'; 会话已更改。

    SQL> host cls SQL> --between ..and 在。。。

    之间 SQL> --查询薪水1000~2000的员工 SQL> select * 2 from emp 3 where sal between 1000 and 2000; 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 7876 ADAMS CLERK 7788 13-7月 -87 1100 20 7934 MILLER CLERK 7782 23-1月 -82 1300 10 已选择6行。 SQL> ed 已写入 file afiedt.buf 1 select * 2 from emp 3* where sal between 2000 and 1000 SQL> / 未选定行 SQL> /* SQL> 1. 含边界 SQL> 2. 小值在前。大值在后 SQL> */ SQL> host cls SQL> --in: 在集合中 SQL> --查询10和20号部门的员工 SQL> select * 2 from emp 3 where deptno in (10,20); 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 13-7月 -87 3000 20 7839 KING PRESIDENT 17-11月-81 5000 10 7876 ADAMS CLERK 7788 13-7月 -87 1100 20 7902 FORD ANALYST 7566 03-12月-81 3000 20 7934 MILLER CLERK 7782 23-1月 -82 1300 10 已选择8行。 SQL> --查询不是10和20号部门的员工 SQL> ed 已写入 file afiedt.buf 1 select * 2 from emp 3* where deptno not in (10,20) SQL> / 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 7698 BLAKE MANAGER 7839 01-5月 -81 2850 30 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30 7900 JAMES CLERK 7698 03-12月-81 950 30 已选择6行。

    SQL> ed 已写入 file afiedt.buf 1 select * 2 from emp 3* where deptno not in (10,20,null) SQL> / 未选定行 SQL> --结论:假设集合中含义null值,不能使用not in操作符;但能够使用in SQL> --问题? 原因是??? SQL> host cls SQL> --like 模糊查询 % _ SQL> --查询名字以S打头的员工信息 SQL> select * 2 from emp 3 where ename like 'S%'; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------- --------- ---------- -------------- ----- ---------- ---------- 7369 SMITH CLERK 7902 17-12月-80 800 20 7788 SCOTT ANALYST 7566 13-7月 -87 3000 20 SQL> --查询名字是四个字的员工 SQL> select * 2 from emp 3 where ename like '____'; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------- --------- ---------- -------------- ----- ---------- ---------- 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30 7839 KING PRESIDENT 17-11月-81 5000 10 7902 FORD ANALYST 7566 03-12月-81 3000 20 SQL> host cls SQL> insert into emp 2 (empno,ename,sal,deptno) 3 values(1001,'Tom_123',2000,10); 已创建 1 行。

    SQL> select * from emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------- --------- ---------- -------------- ----- ---------- ---------- 7369 SMITH CLERK 7902 17-12月-80 800 20 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30 7566 JONES MANAGER 7839 02-4月 -81 2975 20 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30 7698 BLAKE MANAGER 7839 01-5月 -81 2850 30 7782 CLARK MANAGER 7839 09-6月 -81 2450 10 7788 SCOTT ANALYST 7566 13-7月 -87 3000 20 7839 KING PRESIDENT 17-11月-81 5000 10 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30 7876 ADAMS CLERK 7788 13-7月 -87 1100 20 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------- --------- ---------- -------------- ----- ---------- ---------- 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 1001 Tom_123 2000 10 已选择15行。

    SQL> --查询名字中含义下划线的员工 SQL> select * 2 from emp 3 where ename like '%_%'; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------- --------- ---------- -------------- ----- ---------- ---------- 7369 SMITH CLERK 7902 17-12月-80 800 20 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30 7566 JONES MANAGER 7839 02-4月 -81 2975 20 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30 7698 BLAKE MANAGER 7839 01-5月 -81 2850 30 7782 CLARK MANAGER 7839 09-6月 -81 2450 10 7788 SCOTT ANALYST 7566 13-7月 -87 3000 20 7839 KING PRESIDENT 17-11月-81 5000 10 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30 7876 ADAMS CLERK 7788 13-7月 -87 1100 20 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------- --------- ---------- -------------- ----- ---------- ---------- 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 1001 Tom_123 2000 10 已选择15行。 SQL> --使用转义字符 SQL> ed 已写入 file afiedt.buf 1 select * 2 from emp 3* where ename like '%\_%' escape '' SQL> / EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------- --------- ---------- -------------- ----- ---------- ---------- 1001 Tom_123 2000 10 SQL> ed 已写入 file afiedt.buf 1 select * 2 from emp 3* where ename like '%a_%' escape 'a' SQL> / EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------- --------- ---------- -------------- ----- ---------- ---------- 1001 Tom_123 2000 10 SQL> rollback; 回退已完毕。 SQL> select * from emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------- --------- ---------- -------------- ----- ---------- ---------- 7369 SMITH CLERK 7902 17-12月-80 800 20 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30 7566 JONES MANAGER 7839 02-4月 -81 2975 20 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30 7698 BLAKE MANAGER 7839 01-5月 -81 2850 30 7782 CLARK MANAGER 7839 09-6月 -81 2450 10 7788 SCOTT ANALYST 7566 13-7月 -87 3000 20 7839 KING PRESIDENT 17-11月-81 5000 10 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30 7876 ADAMS CLERK 7788 13-7月 -87 1100 20 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------- --------- ---------- -------------- ----- ---------- ---------- 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 已选择14行。 SQL> host cls SQL> --逻辑运算符 SQL> --and or SQL> --SQL优化:2. 解析顺序: 从右至左 SQL> host cls SQL> --排序 SQL> --查询员工信息,依照月薪排序 SQL> select * 2 from emp 3 order by sal; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------- --------- ---------- -------------- ----- ---------- ---------- 7369 SMITH CLERK 7902 17-12月-80 800 20 7900 JAMES CLERK 7698 03-12月-81 950 30 7876 ADAMS CLERK 7788 13-7月 -87 1100 20 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30 7934 MILLER CLERK 7782 23-1月 -82 1300 10 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30 7782 CLARK MANAGER 7839 09-6月 -81 2450 10 7698 BLAKE MANAGER 7839 01-5月 -81 2850 30 7566 JONES MANAGER 7839 02-4月 -81 2975 20 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------- --------- ---------- -------------- ----- ---------- ---------- 7788 SCOTT ANALYST 7566 13-7月 -87 3000 20 7902 FORD ANALYST 7566 03-12月-81 3000 20 7839 KING PRESIDENT 17-11月-81 5000 10 已选择14行。 SQL> --a命令 append SQL> a desc 3* order by sal desc SQL> / EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------- --------- ---------- -------------- ----- ---------- ---------- 7839 KING PRESIDENT 17-11月-81 5000 10 7902 FORD ANALYST 7566 03-12月-81 3000 20 7788 SCOTT ANALYST 7566 13-7月 -87 3000 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 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30 7934 MILLER CLERK 7782 23-1月 -82 1300 10 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------- --------- ---------- -------------- ----- ---------- ---------- 7876 ADAMS CLERK 7788 13-7月 -87 1100 20 7900 JAMES CLERK 7698 03-12月-81 950 30 7369 SMITH CLERK 7902 17-12月-80 800 20 已选择14行。 SQL> host cls SQL> --order by 后面 + 列名, 表达式, 别名, 序号 SQL> select ename,sal,comm,sal*12+nvl(comm,0) 2 from emp 3 order by sal*12+nvl(comm,0); ENAME SAL COMM SAL*12+NVL(COMM,0) -------- ----- ---------- ------------------ SMITH 800 9600 JAMES 950 11400 ADAMS 1100 13200 WARD 1250 500 15500 MILLER 1300 15600 MARTIN 1250 1400 16400 TURNER 1500 0 18000 ALLEN 1600 300 19500 CLARK 2450 29400 BLAKE 2850 34200 JONES 2975 35700 ENAME SAL COMM SAL*12+NVL(COMM,0) -------- ----- ---------- ------------------ SCOTT 3000 36000 FORD 3000 36000 KING 5000 60000 已选择14行。 SQL> ed 已写入 file afiedt.buf 1 select ename,sal,comm,sal*12+nvl(comm,0) 年收入 2 from emp 3* order by 年收入 SQL> / ENAME SAL COMM 年收入 -------- ----- ---------- ---------- SMITH 800 9600 JAMES 950 11400 ADAMS 1100 13200 WARD 1250 500 15500 MILLER 1300 15600 MARTIN 1250 1400 16400 TURNER 1500 0 18000 ALLEN 1600 300 19500 CLARK 2450 29400 BLAKE 2850 34200 JONES 2975 35700 ENAME SAL COMM 年收入 -------- ----- ---------- ---------- SCOTT 3000 36000 FORD 3000 36000 KING 5000 60000 已选择14行。

    SQL> ed 已写入 file afiedt.buf 1 select ename,sal,comm,sal*12+nvl(comm,0) 年收入 2 from emp 3* order by 4 SQL> / ENAME SAL COMM 年收入 -------- ----- ---------- ---------- SMITH 800 9600 JAMES 950 11400 ADAMS 1100 13200 WARD 1250 500 15500 MILLER 1300 15600 MARTIN 1250 1400 16400 TURNER 1500 0 18000 ALLEN 1600 300 19500 CLARK 2450 29400 BLAKE 2850 34200 JONES 2975 35700 ENAME SAL COMM 年收入 -------- ----- ---------- ---------- SCOTT 3000 36000 FORD 3000 36000 KING 5000 60000 已选择14行。

    SQL> ed 已写入 file afiedt.buf 1 select ename,sal,comm,sal*12+nvl(comm,0) 年收入 2 from emp 3* order by 5 SQL> / order by 5 * 第 3 行出现错误: ORA-01785: ORDER BY 项必须是 SELECT-list 表达式的数目 SQL> host cls SQL> --order by跟多列 SQL> select * 2 from emp 3 order by deptno,sal; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------- --------- ---------- -------------- ----- ---------- ---------- 7934 MILLER CLERK 7782 23-1月 -82 1300 10 7782 CLARK MANAGER 7839 09-6月 -81 2450 10 7839 KING PRESIDENT 17-11月-81 5000 10 7369 SMITH CLERK 7902 17-12月-80 800 20 7876 ADAMS CLERK 7788 13-7月 -87 1100 20 7566 JONES MANAGER 7839 02-4月 -81 2975 20 7788 SCOTT ANALYST 7566 13-7月 -87 3000 20 7902 FORD ANALYST 7566 03-12月-81 3000 20 7900 JAMES CLERK 7698 03-12月-81 950 30 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30 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 7698 BLAKE MANAGER 7839 01-5月 -81 2850 30 已选择14行。

    SQL> --order by跟多列:作用于后面全部的列 SQL> ed 已写入 file afiedt.buf 1 select * 2 from emp 3* order by deptno,sal desc SQL> / EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------- --------- ---------- -------------- ----- ---------- ---------- 7839 KING PRESIDENT 17-11月-81 5000 10 7782 CLARK MANAGER 7839 09-6月 -81 2450 10 7934 MILLER CLERK 7782 23-1月 -82 1300 10 7788 SCOTT ANALYST 7566 13-7月 -87 3000 20 7902 FORD ANALYST 7566 03-12月-81 3000 20 7566 JONES MANAGER 7839 02-4月 -81 2975 20 7876 ADAMS CLERK 7788 13-7月 -87 1100 20 7369 SMITH CLERK 7902 17-12月-80 800 20 7698 BLAKE MANAGER 7839 01-5月 -81 2850 30 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30 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 7900 JAMES CLERK 7698 03-12月-81 950 30 已选择14行。 SQL> --desc离他近期的一列 SQL> ed 已写入 file afiedt.buf 1 select * 2 from emp 3* order by deptno desc,sal desc SQL> / EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------- --------- ---------- -------------- ----- ---------- ---------- 7698 BLAKE MANAGER 7839 01-5月 -81 2850 30 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30 7900 JAMES CLERK 7698 03-12月-81 950 30 7902 FORD ANALYST 7566 03-12月-81 3000 20 7788 SCOTT ANALYST 7566 13-7月 -87 3000 20 7566 JONES MANAGER 7839 02-4月 -81 2975 20 7876 ADAMS CLERK 7788 13-7月 -87 1100 20 7369 SMITH CLERK 7902 17-12月-80 800 20 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------- --------- ---------- -------------- ----- ---------- ---------- 7839 KING PRESIDENT 17-11月-81 5000 10 7782 CLARK MANAGER 7839 09-6月 -81 2450 10 7934 MILLER CLERK 7782 23-1月 -82 1300 10 已选择14行。

    SQL> host cls SQL> --查询员工信息,依照奖金排序 SQL> select * 2 from emp 3 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 13-7月 -87 3000 20 7839 KING PRESIDENT 17-11月-81 5000 10 7876 ADAMS CLERK 7788 13-7月 -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> select * 2 from emp 3 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 13-7月 -87 3000 20 7839 KING PRESIDENT 17-11月-81 5000 10 7876 ADAMS CLERK 7788 13-7月 -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 * 2 from emp 3* 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 13-7月 -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 13-7月 -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 13-7月 -87 3000 20 7839 KING PRESIDENT 17-11月-81 5000 10 7876 ADAMS CLERK 7788 13-7月 -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> spool off



  • 相关阅读:
    Thymeleaf标签使用
    mybatis映射和条件查询
    开发模型
    Sentinel降级服务
    Sentinel
    Nacos注册中心
    SpringCloudAlibaba简介
    Sleuth
    Stream消息驱动
    如何用JAVA爬取AJAX加载后的页面(利用phantomjs)【以天眼查为例】
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6903220.html
Copyright © 2020-2023  润新知