(九)邏輯運算,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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM