day43_Oracle學習筆記_02
阿新 • • 發佈:2018-12-10
八、子查詢
示例程式碼如下:子查詢.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 2* where 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