(九)逻辑运算,order by,desc

 

逻辑运算

AND,OR,NOT

......where 表达式1  and 表达式2;

......where 表达式2  and 表达式1;

SQL优化:

  SQL在解析where时是从右向左解析的。所以:and 时应该将易假的放在右侧,or时应该将易真的值放在右侧

order by

order by 之后可以跟哪些内容呢?

order by + 列名,表达式 ,别名,序号

SQL> select ename,sal,sal*12 "年薪",sal+nvl(comm,0) from emp order by 2;

ENAME             SAL       年薪 SAL+NVL(COMM,0)
---------- ---------- ---------- ---------------
SMITH             800       9600             800
JAMES             950      11400             950
ADAMS            1100      13200            1100
WARD             1250      15000            1750
MARTIN           1250      15000            2650
MILLER           1300      15600            1300
TURNER           1500      18000            1500
ALLEN            1600      19200            1900
CLARK            2450      29400            2450
BLAKE            2850      34200            2850
JONES            2975      35700            2975

ENAME             SAL       年薪 SAL+NVL(COMM,0)
---------- ---------- ---------- ---------------
SCOTT            3000      36000            3000
FORD             3000      36000            3000
KING             5000      60000            5000

已选择14行。

SQL> set pagesize 100;
SQL> set timing on;
SQL> ed
已写入 file afiedt.buf

  1* select ename,sal,sal*12 "年薪",sal+nvl(comm,0) from emp order by "年薪"
SQL> /

ENAME             SAL       年薪 SAL+NVL(COMM,0)
---------- ---------- ---------- ---------------
SMITH             800       9600             800
JAMES             950      11400             950
ADAMS            1100      13200            1100
WARD             1250      15000            1750
MARTIN           1250      15000            2650
MILLER           1300      15600            1300
TURNER           1500      18000            1500
ALLEN            1600      19200            1900
CLARK            2450      29400            2450
BLAKE            2850      34200            2850
JONES            2975      35700            2975
SCOTT            3000      36000            3000
FORD             3000      36000            3000
KING             5000      60000            5000

已选择14行。

已用时间:  00: 00: 00.08
SQL> ed
已写入 file afiedt.buf

  1* select ename,sal,sal*12 "年薪",sal+nvl(comm,0) from emp order by sal+nvl(comm,0) desc
SQL> /

ENAME             SAL       年薪 SAL+NVL(COMM,0)
---------- ---------- ---------- ---------------
KING             5000      60000            5000
FORD             3000      36000            3000
SCOTT            3000      36000            3000
JONES            2975      35700            2975
BLAKE            2850      34200            2850
MARTIN           1250      15000            2650
CLARK            2450      29400            2450
ALLEN            1600      19200            1900
WARD             1250      15000            1750
TURNER           1500      18000            1500
MILLER           1300      15600            1300
ADAMS            1100      13200            1100
JAMES             950      11400             950
SMITH             800       9600             800

已选择14行。

已用时间:  00: 00: 00.13
SQL>

 

order 后有多列时,列名之间用逗号隔开,order by 会同时作用于多列,如下例:会在同一部门内升序,部门间再升序

SQL> set linesize 140;
SQL> select * from emp 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
      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行。

已用时间:  00: 00: 00.14
SQL>

 

desc 只作用于最近的一列,两列都降序,需要两个desc

SQL> select * from emp order by deptno,sal desc;

     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
      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行。

已用时间:  00: 00: 00.12
SQL> select * from emp order by deptno desc,sal desc;

     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 19-4月 -87           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
      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行。

已用时间:  00: 00: 00.14
SQL>

 

按奖金由高到低

 select * from emp order by comm desc,结果前面的值为NULL,数据在后面,应该将NULL放在后面,即:select * from emp order by comm desc nulls last;

已用时间:  00: 00: 00.14
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
      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行。

已用时间:  00: 00: 00.13
SQL> select * from emp 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
      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行。

已用时间:  00: 00: 00.11
SQL> ed
已写入 file afiedt.buf

  1* select * from emp order by comm desc
SQL> select * from emp order by comm desc nulls last;

     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行。

已用时间:  00: 00: 00.14
SQL>

 

posted @ 2019-04-15 09:13  狂奔~  阅读(1903)  评论(0编辑  收藏  举报