过滤和排序

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> select *
  2  from emp
  3  where ename='king';

未选定行

SQL> --正确书写
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> --日期敏感
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> --但是当我们改成1981-11-17会查询失败
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的默认日期格式为:DD-MM-RR(17-11月-81),而1981-11-17不符合
SQL> --那么我们来修改一下,首先要获取到参数的配置
SQL> select * from v$nls_parameter
  2  ;
select * from v$nls_parameter
              *
 1 行出现错误: 
ORA-00942: 表或视图不存在 


SQL> select *
  2  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> --修改日期参数NLS_DATE_FORMAT

SQL> alter session set NLS_DATE_FORMAT='yyyy-mm-dd';

会话已更改。

SQL> --然后再一次输入上面验证失败的例子
SQL> select *
  2  from emp
  3  where hiredate='1981-11-17';

     EMPNO ENAME    JOB              MGR HIREDATE     SAL       COMM     DEPTNO                                                                       
---------- -------- --------- ---------- ---------- ----- ---------- ----------                                                                       
      7839 KING     PRESIDENT            1981-11-17  5000                    10                                                                       

SQL> --如上,现在就成功了
SQL> --然后我们再把参数的取值改回去
SQL> alter session set NLS_DATE_FORMAT='DD-MON-RR';

会话已更改。

SQL> --上面的参数中,session代表用户范围,其中还有另外一个取值为global,这个取值要数据库管理员才能使用
SQL> --其中上面的v$nls_parameters也是数据字典
SQL> 
SQL> 
SQL> 
SQL> 
SQL> 
SQL> --关于between and
SQL> --表示范围在什么之间
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 23-5月 -87      1100                    20                                                                   
      7934 MILLER   CLERK           7782 23-1月 -82      1300                    10                                                                   

已选择6行。

SQL> --试一下大值在前,小值在后
SQL> ed
已写入 file afiedt.buf

  1  select *
  2  from emp
  3* where sal between 2000 and 1000
SQL> /

未选定行

SQL> --如上所示,必须小值在前,大值在后
SQL> 
SQL> 
SQL> 
SQL> --in 和not  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 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> --如果我们需要找不在这个集合,就使用not in
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> --如上所示
SQL> host cls

SQL> --模糊查询: % _  其中百分号表示任意长度的任意字符,_表示一个字符
SQL> --查询名字以s开头的员工
SQL> select *
  2  from emp
  3  where ename like 's%';

未选定行

SQL> --由于Oracle对大小写敏感,所以在查找名字的时候需要明确区分大小写
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 19-4月 -87      3000                    20                                                                   

SQL> --查询名字是3个字的员工
SQL> select *
  2  from emp
  3  where ename like '___';

未选定行

SQL> --查询名字为4个字的员工
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> --因为百分号和下划线在这里是特殊字符,如果我们有一个员工的名字中有下划线应该怎样寻找呢?
SQL> --首先我们先插入一条语句

SQL> insert into emp(empno,ename,sal,deptno)
  2  values(1002,'ansel_pan',8888,10);

已创建 1 行。

SQL> --查找刚刚插入的语句,名字带有下划线
SQL> select *
  2  from emp
  3  where ename like '%_%';

     EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                   
---------- -------- --------- ---------- -------------- ----- ---------- ----------                                                                   
      1001 ansel                                         8888                    10                                                                   
      1002 ansel_pa                                      8888                    10                                                                   
           n                                                                                                                                          

      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                                                                   

     EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                   
---------- -------- --------- ---------- -------------- ----- ---------- ----------                                                                   
      7788 SCOTT    ANALYST         7566 19-4月 -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 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                                                                   

已选择16行。

SQL> --在这里把所有记录都查找出来,可是我们只要找到名字带有下划线的记录
SQL> --所以在这里我们要用到转移
SQL> select *
  2  from emp
  3  where ename like '%\_%' escape '\';

     EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                   
---------- -------- --------- ---------- -------------- ----- ---------- ----------                                                                   
      1002 ansel_pa                                      8888                    10                                                                   
           n                                                                                                                                          


SQL> --然后查找成
SQL> --如果想把刚刚插入的语句删除掉
SQL> rollback;

回退已完成。

SQL> select *
  2  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 19-4月 -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 23-5月 -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> --在逻辑运算符中,比如where 条件1 and/or 条件2 ,Oracle从右到左解析
SQL> 
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 23-5月 -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 19-4月 -87      3000                    20                                                                   
      7902 FORD     ANALYST         7566 03-12月-81      3000                    20                                                                   
      7839 KING     PRESIDENT            17-11月-81      5000                    10                                                                   

已选择14行。

SQL> --从上面我们可以看到,Oracle默认的排序是升序
SQL> --那么如果这个时候我想让它降序排序,又不用从新输入怎么办?

SQL> --这时候要用到a命令,即append的简称
SQL> --注意:使用a命令的时候,要在a后面加上2个以上的空格,否则会追加失败

SQL> --使用a命令,追加指令
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 19-4月 -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 23-5月 -87      1100                    20                                                                   
      7900 JAMES    CLERK           7698 03-12月-81       950                    30                                                                   
      7369 SMITH    CLERK           7902 17-12月-80       800                    20                                                                   

已选择14行。

SQL> --order by 后面可以跟列名,表达式,别名,序号
SQL> --order by后面跟表达式:
SQL> --查询员工的年薪,并升序排序

SQL> select empno,ename,sal,sal*12
  2  from emp
  3  order by sal*12;

     EMPNO ENAME      SAL     SAL*12                                                                                                                  
---------- -------- ----- ----------                                                                                                                  
      7369 SMITH      800       9600                                                                                                                  
      7900 JAMES      950      11400                                                                                                                  
      7876 ADAMS     1100      13200                                                                                                                  
      7521 WARD      1250      15000                                                                                                                  
      7654 MARTIN    1250      15000                                                                                                                  
      7934 MILLER    1300      15600                                                                                                                  
      7844 TURNER    1500      18000                                                                                                                  
      7499 ALLEN     1600      19200                                                                                                                  
      7782 CLARK     2450      29400                                                                                                                  
      7698 BLAKE     2850      34200                                                                                                                  
      7566 JONES     2975      35700                                                                                                                  

     EMPNO ENAME      SAL     SAL*12                                                                                                                  
---------- -------- ----- ----------                                                                                                                  
      7788 SCOTT     3000      36000                                                                                                                  
      7902 FORD      3000      36000                                                                                                                  
      7839 KING      5000      60000                                                                                                                  

已选择14行。

SQL> --order by 后面跟别名
SQL> select empno,ename,sal,sal*12 年薪
  2  from emp
  3  order by 年薪;

     EMPNO ENAME      SAL       年薪                                                                                                                  
---------- -------- ----- ----------                                                                                                                  
      7369 SMITH      800       9600                                                                                                                  
      7900 JAMES      950      11400                                                                                                                  
      7876 ADAMS     1100      13200                                                                                                                  
      7521 WARD      1250      15000                                                                                                                  
      7654 MARTIN    1250      15000                                                                                                                  
      7934 MILLER    1300      15600                                                                                                                  
      7844 TURNER    1500      18000                                                                                                                  
      7499 ALLEN     1600      19200                                                                                                                  
      7782 CLARK     2450      29400                                                                                                                  
      7698 BLAKE     2850      34200                                                                                                                  
      7566 JONES     2975      35700                                                                                                                  

     EMPNO ENAME      SAL       年薪                                                                                                                  
---------- -------- ----- ----------                                                                                                                  
      7788 SCOTT     3000      36000                                                                                                                  
      7902 FORD      3000      36000                                                                                                                  
      7839 KING      5000      60000                                                                                                                  

已选择14行。

SQL> --order by 后面跟序号,注意从1开始,如果超出范围也会查找失败


SQL> select empno,ename,sal,sal*12
  2  from emp
  3  order by 4;

     EMPNO ENAME      SAL     SAL*12                                                                                                                  
---------- -------- ----- ----------                                                                                                                  
      7369 SMITH      800       9600                                                                                                                  
      7900 JAMES      950      11400                                                                                                                  
      7876 ADAMS     1100      13200                                                                                                                  
      7521 WARD      1250      15000                                                                                                                  
      7654 MARTIN    1250      15000                                                                                                                  
      7934 MILLER    1300      15600                                                                                                                  
      7844 TURNER    1500      18000                                                                                                                  
      7499 ALLEN     1600      19200                                                                                                                  
      7782 CLARK     2450      29400                                                                                                                  
      7698 BLAKE     2850      34200                                                                                                                  
      7566 JONES     2975      35700                                                                                                                  

     EMPNO ENAME      SAL     SAL*12                                                                                                                  
---------- -------- ----- ----------                                                                                                                  
      7788 SCOTT     3000      36000                                                                                                                  
      7902 FORD      3000      36000                                                                                                                  
      7839 KING      5000      60000                                                                                                                  

已选择14行。

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 23-5月 -87      1100                    20                                                                   
      7566 JONES    MANAGER         7839 02-4月 -81      2975                    20                                                                   
      7788 SCOTT    ANALYST         7566 19-4月 -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> --再按照第二列比较
SQL> --那么 如果我们order bY 后面跟有desc那么是按照什么来降序呢?
SQL> a  desc
  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 19-4月 -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 23-5月 -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> --从上面我们可以看到,部门编号没有改变,大师同一个部门里面的薪水是降序的,
SQL> --又因为在order bY语句中,我们的desc跟sal最近,所以desc是作用与与它最近的列
SQL> set pagesize=20;
SP2-0268: pagesize 选项的编号无效
SQL> set pagesize='20';
SP2-0268: pagesize 选项的编号无效
SQL> --上面的例子无效
SQL> --按照奖金降序排序
SQL> select *
  2  from emp
  3  order by comm desc;

     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                                                                   

     EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                   
---------- -------- --------- ---------- -------------- ----- ---------- ----------                                                                   
      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> --从上面我们可以看到,上面的奖金都是null的,那么如何避免这种情况,让值为null的员工排在下面呢?
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                                                                   

     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> --如上所示,只要我们在后面加上一句话 nulls last 这里的null值的员工不止一个,所以用复数形式
SQL> spool off
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值