1. 程式人生 > >day43_Oracle學習筆記_02

day43_Oracle學習筆記_02

八、子查詢

示例程式碼如下:子查詢.txt

SQL> --rownum 行號SQL> select rownum,empno,ename,sal from emp;    ROWNUM      EMPNO ENAME             SAL                                                                                                                                                             ---------- ---------- ---------- ----------                                                                                                                                                                      1
       7369 SMITH             800                                                                                                                                                                      2       7499 ALLEN            1600                                                                                                                                                                      3
       7521 WARD             1250                                                                                                                                                                      4       7566 JONES            2975                                                                                                                                                                      5
       7654 MARTIN           1250                                                                                                                                                                      6       7698 BLAKE            2850                                                                                                                                                                      7       7782 CLARK            2450                                                                                                                                                                      8       7788 SCOTT            3000                                                                                                                                                                      9       7839 KING             5000                                                                                                                                                                     10       7844 TURNER           1500                                                                                                                                                                     11       7876 ADAMS            1100                                                                                                                                                                 ROWNUM      EMPNO ENAME             SAL                                                                                                                                                             ---------- ---------- ---------- ----------                                                                                                                                                                     12       7900 JAMES             950                                                                                                                                                                     13       7902 FORD             3000                                                                                                                                                                     14       7934 MILLER           1300                                                                                                                                                             已選擇 14 行。SQL> select rownum,empno,ename,sal  2  from emp  3  where rownum<=3  4  order by sal desc;        --按照薪水降序排列    ROWNUM      EMPNO ENAME             SAL                                                                                                                                                             ---------- ---------- ---------- ----------                                                                                                                                                                      2       7499 ALLEN            1600                                                                                                                                                                      3       7521 WARD             1250                                                                                                                                                                      1       7369 SMITH             800                                                                                                                                                             SQL> /*SQL> 關於行號rownumSQL>     1. rownum永遠按照預設的順序生成SQL>     2. rownum只能使用 < <=; 不能使用 > >=SQL> */SQL> select rownum,empno,ename,sal from emp order by sal desc;    ROWNUM      EMPNO ENAME             SAL                                                                                                                                                             ---------- ---------- ---------- ----------                                                                                                                                                                      9       7839 KING             5000                                                                                                                                                                     13       7902 FORD             3000                                                                                                                                                                      8       7788 SCOTT            3000                                                                                                                                                                      4       7566 JONES            2975                                                                                                                                                                      6       7698 BLAKE            2850                                                                                                                                                                      7       7782 CLARK            2450                                                                                                                                                                      2       7499 ALLEN            1600                                                                                                                                                                     10       7844 TURNER           1500                                                                                                                                                                     14       7934 MILLER           1300                                                                                                                                                                      3       7521 WARD             1250                                                                                                                                                                      5       7654 MARTIN           1250                                                                                                                                                                 ROWNUM      EMPNO ENAME             SAL                                                                                                                                                             ---------- ---------- ---------- ----------                                                                                                                                                                     11       7876 ADAMS            1100                                                                                                                                                                     12       7900 JAMES             950                                                                                                                                                                      1       7369 SMITH             800                                                                                                                                                             已選擇 14 行。SQL> --第一題:找到員工表中工資最高的前三名SQL> select rownum,empno,ename,sal  2  from (select * from emp order by sal desc)        --子查詢得到新表  3  where rownum<=3;    ROWNUM      EMPNO ENAME             SAL                                                                                                                                                             ---------- ---------- ---------- ----------                                                                                                                                                                      1       7839 KING             5000                                                                                                                                                                      2       7788 SCOTT            3000                                                                                                                                                                      3       7902 FORD             3000                                                                                                                                                             SQL> --2. rownum只能使用 < <=; 不能使用 > >=SQL> --分頁SQL> select rownum,empno,ename,sal from emp  2  where rownum>=5 and rownum<=8;未選定行SQL> select rownum,empno,ename,sal from emp  2  where rownum>=5;未選定行SQL> 原因:Oracle資料庫是行式資料庫,NOSQL資料庫是列式資料庫。SQL> ed已寫入 file afiedt.buf  1  select rownum,empno,ename,sal from emp  2where rownum<=8SQL> /    ROWNUM      EMPNO ENAME             SAL                                                                                                                                                             ---------- ---------- ---------- ----------                                                                                                                                                                      1       7369 SMITH             800                                                                                                                                                                      2       7499 ALLEN            1600                                                                                                                                                                      3       7521 WARD             1250                                                                                                                                                                      4       7566 JONES            2975                                                                                                                                                                      5       7654 MARTIN           1250                                                                                                                                                                      6       7698 BLAKE            2850                                                                                                                                                                      7       7782 CLARK            2450                                                                                                                                                                      8       7788 SCOTT            3000                                                                                                                                                             已選擇 8 行。SQL>  select *  2   from     (select rownum r,e1.*  3       from (select * from emp order by sal) e1   --r是e1表的行號,是e2表的列  4        where rownum<=8  5      )  6   where r>=5;         R      EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO                                                                                                   ---------- ---------- ---------- --------- ---------- -------------- ---------- ---------- ----------                                                                                                            5       7654 MARTIN     SALESMAN        7698 28-9月 -81           1250       1400         30                                                                                                            6       7934 MILLER     CLERK           7782 23-1月 -82           1300                    10                                                                                                            7       7844 TURNER