日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Oracle子查询

發(fā)布時(shí)間:2024/9/27 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle子查询 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

SQL> --問(wèn)題:要查詢工資比SCOTT高的員工信息
SQL> --1. 查詢SCOTT的工資
SQL> select sal from emp where ename='SCOTT';

?????? SAL?????????????????????????????????????????????????????????????????????
----------?????????????????????????????????????????????????????????????????????
????? 3000?????????????????????????????????????????????????????????????????????

SQL> --2.? 查詢比3000 高的
SQL> select *
? 2? from emp
? 3? where sal >3000;

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

SQL> set linesize 120
SQL> col sal for 9999
SQL> /

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

SQL> --子查詢解決上面的問(wèn)題
SQL> select *
? 2? from emp
? 3? where sal > ( select sal
? 4??????????????? from emp
? 5??????????????? where ename='SCOTT');

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

SQL> --書寫子查詢的注意事項(xiàng):
SQL> /*
SQL> 1. 將子查詢放入括號(hào)中
SQL> 2. 將子查詢往右放
SQL> 3. 一般子查詢不使用order by 但是在Top-n分析和分頁(yè)中需要
SQL> 4. group by后,不能使用子查詢
SQL> 5. select, from, where后面可以使用
SQL> 6. 主查詢和子查詢可以不是一張表,只要子查詢返回的結(jié)果主查詢可以使用 就OK
SQL> 7. 可以將子查詢視為一張新表.
SQL> */
SQL> --在from后面使用子查詢
SQL> --查詢部門名稱為SALES的員工信息
SQL> select e.empno,e.ename
? 2? from emp e,dept d
? 3? where e.deptno=d.deptno
? 4? and d.dname='SALES';

???? EMPNO ENAME???????????????????????????????????????????????????????????????????????????????????????????????????????
---------- ----------??????????????????????????????????????????????????????????????????????????????????????????????????
????? 7499 ALLEN???????????????????????????????????????????????????????????????????????????????????????????????????????
????? 7521 WARD????????????????????????????????????????????????????????????????????????????????????????????????????????
????? 7654 MARTIN??????????????????????????????????????????????????????????????????????????????????????????????????????
????? 7698 BLAKE???????????????????????????????????????????????????????????????????????????????????????????????????????
????? 7844 TURNER??????????????????????????????????????????????????????????????????????????????????????????????????????
????? 7900 JAMES???????????????????????????????????????????????????????????????????????????????????????????????????????

已選擇6行。

SQL> select *
? 2? from emp
? 3? where deptno= (select deptno
? 4???????????????? from dept
? 5???????????????? where dname ='SALES');

???? 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> select ename,sal
? 2? from emp;

ENAME??????? SAL???????????????????????????????????????????????????????????????????????????????????????????????????????
---------- -----???????????????????????????????????????????????????????????????????????????????????????????????????????
SMITH??????? 800???????????????????????????????????????????????????????????????????????????????????????????????????????
ALLEN?????? 1600???????????????????????????????????????????????????????????????????????????????????????????????????????
WARD??????? 1250???????????????????????????????????????????????????????????????????????????????????????????????????????
JONES?????? 2975???????????????????????????????????????????????????????????????????????????????????????????????????????
MARTIN????? 1250???????????????????????????????????????????????????????????????????????????????????????????????????????
BLAKE?????? 2850???????????????????????????????????????????????????????????????????????????????????????????????????????
CLARK?????? 2450???????????????????????????????????????????????????????????????????????????????????????????????????????
SCOTT?????? 3000???????????????????????????????????????????????????????????????????????????????????????????????????????
KING??????? 5000???????????????????????????????????????????????????????????????????????????????????????????????????????
TURNER????? 1500???????????????????????????????????????????????????????????????????????????????????????????????????????
ADAMS?????? 1100???????????????????????????????????????????????????????????????????????????????????????????????????????

ENAME??????? SAL???????????????????????????????????????????????????????????????????????????????????????????????????????
---------- -----???????????????????????????????????????????????????????????????????????????????????????????????????????
JAMES??????? 950???????????????????????????????????????????????????????????????????????????????????????????????????????
FORD??????? 3000???????????????????????????????????????????????????????????????????????????????????????????????????????
MILLER????? 1300???????????????????????????????????????????????????????????????????????????????????????????????????????

已選擇14行。

SQL> select *
? 2? from (select ename,sal)
? 3? ;
from (select ename,sal)
????????????????????? *
第 2 行出現(xiàn)錯(cuò)誤:
ORA-00923: 未找到要求的 FROM 關(guān)鍵字


SQL> ed
已寫入 file afiedt.buf

? 1? select *
? 2* from (select ename,sal from emp)
? 3? ;

ENAME??????? SAL???????????????????????????????????????????????????????????????????????????????????????????????????????
---------- -----???????????????????????????????????????????????????????????????????????????????????????????????????????
SMITH??????? 800???????????????????????????????????????????????????????????????????????????????????????????????????????
ALLEN?????? 1600???????????????????????????????????????????????????????????????????????????????????????????????????????
WARD??????? 1250???????????????????????????????????????????????????????????????????????????????????????????????????????
JONES?????? 2975???????????????????????????????????????????????????????????????????????????????????????????????????????
MARTIN????? 1250???????????????????????????????????????????????????????????????????????????????????????????????????????
BLAKE?????? 2850???????????????????????????????????????????????????????????????????????????????????????????????????????
CLARK?????? 2450???????????????????????????????????????????????????????????????????????????????????????????????????????
SCOTT?????? 3000???????????????????????????????????????????????????????????????????????????????????????????????????????
KING??????? 5000???????????????????????????????????????????????????????????????????????????????????????????????????????
TURNER????? 1500???????????????????????????????????????????????????????????????????????????????????????????????????????
ADAMS?????? 1100???????????????????????????????????????????????????????????????????????????????????????????????????????

ENAME??????? SAL???????????????????????????????????????????????????????????????????????????????????????????????????????
---------- -----???????????????????????????????????????????????????????????????????????????????????????????????????????
JAMES??????? 950???????????????????????????????????????????????????????????????????????????????????????????????????????
FORD??????? 3000???????????????????????????????????????????????????????????????????????????????????????????????????????
MILLER????? 1300???????????????????????????????????????????????????????????????????????????????????????????????????????

已選擇14行。

SQL> --select后面跟子查詢
SQL> select (select dname from deptno where deptno=10),ename
? 2? from emp;
select (select dname from deptno where deptno=10),ename
????????????????????????? *
第 1 行出現(xiàn)錯(cuò)誤:
ORA-00942: 表或視圖不存在


SQL> select (select dname from dept where deptno=10),ename
? 2? from emp;

(SELECTDNAMEFR ENAME???????????????????????????????????????????????????????????????????????????????????????????????????
-------------- ----------??????????????????????????????????????????????????????????????????????????????????????????????
ACCOUNTING???? SMITH???????????????????????????????????????????????????????????????????????????????????????????????????
ACCOUNTING???? ALLEN???????????????????????????????????????????????????????????????????????????????????????????????????
ACCOUNTING???? WARD????????????????????????????????????????????????????????????????????????????????????????????????????
ACCOUNTING???? JONES???????????????????????????????????????????????????????????????????????????????????????????????????
ACCOUNTING???? MARTIN??????????????????????????????????????????????????????????????????????????????????????????????????
ACCOUNTING???? BLAKE???????????????????????????????????????????????????????????????????????????????????????????????????
ACCOUNTING???? CLARK???????????????????????????????????????????????????????????????????????????????????????????????????
ACCOUNTING???? SCOTT???????????????????????????????????????????????????????????????????????????????????????????????????
ACCOUNTING???? KING????????????????????????????????????????????????????????????????????????????????????????????????????
ACCOUNTING???? TURNER??????????????????????????????????????????????????????????????????????????????????????????????????
ACCOUNTING???? ADAMS???????????????????????????????????????????????????????????????????????????????????????????????????

(SELECTDNAMEFR ENAME???????????????????????????????????????????????????????????????????????????????????????????????????
-------------- ----------??????????????????????????????????????????????????????????????????????????????????????????????
ACCOUNTING???? JAMES???????????????????????????????????????????????????????????????????????????????????????????????????
ACCOUNTING???? FORD????????????????????????????????????????????????????????????????????????????????????????????????????
ACCOUNTING???? MILLER??????????????????????????????????????????????????????????????????????????????????????????????????

已選擇14行。

SQL> --可以將子查詢視為新表
SQL> select e.ename,e.sal
? 2? from (select ename,sal from emp) e;

ENAME??????? SAL???????????????????????????????????????????????????????????????????????????????????????????????????????
---------- -----???????????????????????????????????????????????????????????????????????????????????????????????????????
SMITH??????? 800???????????????????????????????????????????????????????????????????????????????????????????????????????
ALLEN?????? 1600???????????????????????????????????????????????????????????????????????????????????????????????????????
WARD??????? 1250???????????????????????????????????????????????????????????????????????????????????????????????????????
JONES?????? 2975???????????????????????????????????????????????????????????????????????????????????????????????????????
MARTIN????? 1250???????????????????????????????????????????????????????????????????????????????????????????????????????
BLAKE?????? 2850???????????????????????????????????????????????????????????????????????????????????????????????????????
CLARK?????? 2450???????????????????????????????????????????????????????????????????????????????????????????????????????
SCOTT?????? 3000???????????????????????????????????????????????????????????????????????????????????????????????????????
KING??????? 5000???????????????????????????????????????????????????????????????????????????????????????????????????????
TURNER????? 1500???????????????????????????????????????????????????????????????????????????????????????????????????????
ADAMS?????? 1100???????????????????????????????????????????????????????????????????????????????????????????????????????

ENAME??????? SAL???????????????????????????????????????????????????????????????????????????????????????????????????????
---------- -----???????????????????????????????????????????????????????????????????????????????????????????????????????
JAMES??????? 950???????????????????????????????????????????????????????????????????????????????????????????????????????
FORD??????? 3000???????????????????????????????????????????????????????????????????????????????????????????????????????
MILLER????? 1300???????????????????????????????????????????????????????????????????????????????????????????????????????

已選擇14行。

SQL> --8.可以有多個(gè)子查詢
SQL> --多行子查詢
SQL> --查詢部門名稱為SALES和ACCOUNTING的員工信息
SQL> select *
? 2? from emp
? 3? where deptno=(select deptno
? 4??????????????? from dept
? 5??????????????? where dname='SALES' or dname='ACCOUTING');

???? 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> ed
已寫入 file afiedt.buf

? 1? select *
? 2? from emp
? 3? where deptno in (select deptno
? 4??????????????? from dept
? 5*?????????????? where dname='SALES' or dname='ACCOUTING')
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> select *
? 2? from emp
? 3? where sal = (select min(sal)
? 4?????????????? from emp);

???? EMPNO ENAME????? JOB????????????? MGR HIREDATE???????? SAL?????? COMM???? DEPTNO??????????????????????????????????
---------- ---------- --------- ---------- -------------- ----- ---------- ----------??????????????????????????????????
????? 7369 SMITH????? CLERK?????????? 7902 17-12月-80?????? 800??????????????????? 20??????????????????????????????????

SQL> select *
? 2? from emp
? 3? where sal = ( select min(sal)
? 4??????????????? from emp
? 5??????????????? group by deptno);
where sal = ( select min(sal)
????????????? *
第 3 行出現(xiàn)錯(cuò)誤:
ORA-01427: 單行子查詢返回多個(gè)行


SQL> -- 關(guān)于null
SQL> host cls

SQL> --查詢不是經(jīng)理的員工的信息
SQL> select * 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 13-7月 -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 13-7月 -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> select *
? 2? from emp
? 3? where empno not in? (select mgr? from emp)
? 4? ;

未選定行

SQL> ed
已寫入 file afiedt.buf

? 1? select *
? 2? from emp
? 3* where empno not in? (select mgr? from emp where mgr is not null)
? 4? ;

???? 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??????????????????????????????????
????? 7654 MARTIN???? SALESMAN??????? 7698 28-9月 -81????? 1250?????? 1400???????? 30??????????????????????????????????
????? 7844 TURNER???? SALESMAN??????? 7698 08-9月 -81????? 1500????????? 0???????? 30??????????????????????????????????
????? 7876 ADAMS????? CLERK?????????? 7788 13-7月 -87????? 1100??????????????????? 20??????????????????????????????????
????? 7900 JAMES????? CLERK?????????? 7698 03-12月-81?????? 950??????????????????? 30??????????????????????????????????
????? 7934 MILLER???? CLERK?????????? 7782 23-1月 -82????? 1300??????????????????? 10??????????????????????????????????

已選擇8行。

SQL> --如果子查詢中,包含null,類似表達(dá)式,會(huì)導(dǎo)致整個(gè)集合為null
SQL> host cls

SQL> -any的使用
SP2-0042: 未知命令 "-any的使用" - 其余行忽略。
SQL> --any的使用
SQL> --問(wèn)題: 查詢工資比10號(hào)部門員工中任意一個(gè)低的員工信息
SQL> select *
? 2? from emp
? 3? where sal < any (select sal from emp where deptno=10);

???? 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 13-7月 -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 13-7月 -87????? 3000??????????????????? 20??????????????????????????????????
????? 7902 FORD?????? ANALYST???????? 7566 03-12月-81????? 3000??????????????????? 20??????????????????????????????????

已選擇13行。

SQL> --等同于
SQL> select *
? 2? from emp
? 3? where sal < (select max(sal) from emp where deptno=10);

???? 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 13-7月 -87????? 3000??????????????????? 20??????????????????????????????????
????? 7844 TURNER???? SALESMAN??????? 7698 08-9月 -81????? 1500????????? 0???????? 30??????????????????????????????????
????? 7876 ADAMS????? CLERK?????????? 7788 13-7月 -87????? 1100??????????????????? 20??????????????????????????????????
????? 7900 JAMES????? CLERK?????????? 7698 03-12月-81?????? 950??????????????????? 30??????????????????????????????????

???? EMPNO ENAME????? JOB????????????? MGR HIREDATE???????? SAL?????? COMM???? DEPTNO??????????????????????????????????
---------- ---------- --------- ---------- -------------- ----- ---------- ----------??????????????????????????????????
????? 7902 FORD?????? ANALYST???????? 7566 03-12月-81????? 3000??????????????????? 20??????????????????????????????????
????? 7934 MILLER???? CLERK?????????? 7782 23-1月 -82????? 1300??????????????????? 10??????????????????????????????????

已選擇13行。

SQL> --all的使用
SQL> --查詢工資比10號(hào)部門都要低的員工信息
SQL> select *
? 2? from emp
? 3? where sal < all (select sal from emp where deptno=10);

???? EMPNO ENAME????? JOB????????????? MGR HIREDATE???????? SAL?????? COMM???? DEPTNO??????????????????????????????????
---------- ---------- --------- ---------- -------------- ----- ---------- ----------??????????????????????????????????
????? 7369 SMITH????? CLERK?????????? 7902 17-12月-80?????? 800??????????????????? 20??????????????????????????????????
????? 7521 WARD?????? SALESMAN??????? 7698 22-2月 -81????? 1250??????? 500???????? 30??????????????????????????????????
????? 7654 MARTIN???? SALESMAN??????? 7698 28-9月 -81????? 1250?????? 1400???????? 30??????????????????????????????????
????? 7876 ADAMS????? CLERK?????????? 7788 13-7月 -87????? 1100??????????????????? 20??????????????????????????????????
????? 7900 JAMES????? CLERK?????????? 7698 03-12月-81?????? 950??????????????????? 30??????????????????????????????????

SQL> --等同于
SQL> ed
已寫入 file afiedt.buf

? 1? select *
? 2? from emp
? 3* where sal <? (select min(sal) from emp where deptno=10)
SQL> /

???? EMPNO ENAME????? JOB????????????? MGR HIREDATE???????? SAL?????? COMM???? DEPTNO??????????????????????????????????
---------- ---------- --------- ---------- -------------- ----- ---------- ----------??????????????????????????????????
????? 7369 SMITH????? CLERK?????????? 7902 17-12月-80?????? 800??????????????????? 20??????????????????????????????????
????? 7521 WARD?????? SALESMAN??????? 7698 22-2月 -81????? 1250??????? 500???????? 30??????????????????????????????????
????? 7654 MARTIN???? SALESMAN??????? 7698 28-9月 -81????? 1250?????? 1400???????? 30??????????????????????????????????
????? 7876 ADAMS????? CLERK?????????? 7788 13-7月 -87????? 1100??????????????????? 20??????????????????????????????????
????? 7900 JAMES????? CLERK?????????? 7698 03-12月-81?????? 950??????????????????? 30??????????????????????????????????

SQL> spool off
SQL> --課堂練習(xí)
SQL> --第一題: 偽列
SQL> select * 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 13-7月 -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 13-7月 -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> -- rownum:行號(hào)
SQL> select rownum,empno,ename from emp;

??? ROWNUM????? EMPNO ENAME????????????????????????????????????????????????????????????????????????????????????????????
---------- ---------- ----------???????????????????????????????????????????????????????????????????????????????????????
???????? 1?????? 7369 SMITH????????????????????????????????????????????????????????????????????????????????????????????
???????? 2?????? 7499 ALLEN????????????????????????????????????????????????????????????????????????????????????????????
???????? 3?????? 7521 WARD?????????????????????????????????????????????????????????????????????????????????????????????
???????? 4?????? 7566 JONES????????????????????????????????????????????????????????????????????????????????????????????
???????? 5?????? 7654 MARTIN???????????????????????????????????????????????????????????????????????????????????????????
???????? 6?????? 7698 BLAKE????????????????????????????????????????????????????????????????????????????????????????????
???????? 7?????? 7782 CLARK????????????????????????????????????????????????????????????????????????????????????????????
???????? 8?????? 7788 SCOTT????????????????????????????????????????????????????????????????????????????????????????????
???????? 9?????? 7839 KING?????????????????????????????????????????????????????????????????????????????????????????????
??????? 10?????? 7844 TURNER???????????????????????????????????????????????????????????????????????????????????????????
??????? 11?????? 7876 ADAMS????????????????????????????????????????????????????????????????????????????????????????????

??? ROWNUM????? EMPNO ENAME????????????????????????????????????????????????????????????????????????????????????????????
---------- ---------- ----------???????????????????????????????????????????????????????????????????????????????????????
??????? 12?????? 7900 JAMES????????????????????????????????????????????????????????????????????????????????????????????
??????? 13?????? 7902 FORD?????????????????????????????????????????????????????????????????????????????????????????????
??????? 14?????? 7934 MILLER???????????????????????????????????????????????????????????????????????????????????????????

已選擇14行。

SQL> --關(guān)于rownum的注意事項(xiàng):
SQL> --1. rownum一旦生成就不變
SQL> --2. rownum只能使用<=,不能使用>=
SQL> select rownum,ename
? 2? from emp
? 3? order by sal;

??? ROWNUM ENAME???????????????????????????????????????????????????????????????????????????????????????????????????????
---------- ----------??????????????????????????????????????????????????????????????????????????????????????????????????
???????? 1 SMITH???????????????????????????????????????????????????????????????????????????????????????????????????????
??????? 12 JAMES???????????????????????????????????????????????????????????????????????????????????????????????????????
??????? 11 ADAMS???????????????????????????????????????????????????????????????????????????????????????????????????????
???????? 3 WARD????????????????????????????????????????????????????????????????????????????????????????????????????????
???????? 5 MARTIN??????????????????????????????????????????????????????????????????????????????????????????????????????
??????? 14 MILLER??????????????????????????????????????????????????????????????????????????????????????????????????????
??????? 10 TURNER??????????????????????????????????????????????????????????????????????????????????????????????????????
???????? 2 ALLEN???????????????????????????????????????????????????????????????????????????????????????????????????????
???????? 7 CLARK???????????????????????????????????????????????????????????????????????????????????????????????????????
???????? 6 BLAKE???????????????????????????????????????????????????????????????????????????????????????????????????????
???????? 4 JONES???????????????????????????????????????????????????????????????????????????????????????????????????????

??? ROWNUM ENAME???????????????????????????????????????????????????????????????????????????????????????????????????????
---------- ----------??????????????????????????????????????????????????????????????????????????????????????????????????
???????? 8 SCOTT???????????????????????????????????????????????????????????????????????????????????????????????????????
??????? 13 FORD????????????????????????????????????????????????????????????????????????????????????????????????????????
???????? 9 KING????????????????????????????????????????????????????????????????????????????????????????????????????????

已選擇14行。

SQL> select *
? 2? from emp
? 3? where rownum<=3
? 4? orber by sal desc;
orber by sal desc
*
第 4 行出現(xiàn)錯(cuò)誤:
ORA-00933: SQL 命令未正確結(jié)束


SQL> ed
已寫入 file afiedt.buf

? 1? select *
? 2? from emp
? 3? where rownum<=3
? 4* order by sal desc
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??????????????????????????????????
????? 7369 SMITH????? CLERK?????????? 7902 17-12月-80?????? 800??????????????????? 20??????????????????????????????????

SQL> host cls

SQL> select rownum,ename,sal
? 2? from emp
? 3? where rownum<3;

??? ROWNUM ENAME??????? SAL????????????????????????????????????????????????????????????????????????????????????????????
---------- ---------- -----????????????????????????????????????????????????????????????????????????????????????????????
???????? 1 SMITH??????? 800????????????????????????????????????????????????????????????????????????????????????????????
???????? 2 ALLEN?????? 1600????????????????????????????????????????????????????????????????????????????????????????????

SQL> ed
已寫入 file afiedt.buf

? 1? select rownum,ename,sal
? 2? from emp
? 3* where rownum>3
SQL> /

未選定行

SQL> --關(guān)于rownum的生成機(jī)制:必須從依次取出,然后付到記錄上
SQL> --第二題:將子查詢結(jié)果集視為新表
SQL> --第三題:
SQL> select hiredate from emp;

HIREDATE???????????????????????????????????????????????????????????????????????????????????????????????????????????????
--------------?????????????????????????????????????????????????????????????????????????????????????????????????????????
17-12月-80?????????????????????????????????????????????????????????????????????????????????????????????????????????????
20-2月 -81?????????????????????????????????????????????????????????????????????????????????????????????????????????????
22-2月 -81?????????????????????????????????????????????????????????????????????????????????????????????????????????????
02-4月 -81?????????????????????????????????????????????????????????????????????????????????????????????????????????????
28-9月 -81?????????????????????????????????????????????????????????????????????????????????????????????????????????????
01-5月 -81?????????????????????????????????????????????????????????????????????????????????????????????????????????????
09-6月 -81?????????????????????????????????????????????????????????????????????????????????????????????????????????????
13-7月 -87?????????????????????????????????????????????????????????????????????????????????????????????????????????????
17-11月-81?????????????????????????????????????????????????????????????????????????????????????????????????????????????
08-9月 -81?????????????????????????????????????????????????????????????????????????????????????????????????????????????
13-7月 -87?????????????????????????????????????????????????????????????????????????????????????????????????????????????

HIREDATE???????????????????????????????????????????????????????????????????????????????????????????????????????????????
--------------?????????????????????????????????????????????????????????????????????????????????????????????????????????
03-12月-81?????????????????????????????????????????????????????????????????????????????????????????????????????????????
03-12月-81?????????????????????????????????????????????????????????????????????????????????????????????????????????????
23-1月 -82?????????????????????????????????????????????????????????????????????????????????????????????????????????????

已選擇14行。

SQL> --假設(shè):我們已知道入職的年份有: 80 81 82 87
SQL> -- 第一題
SQL> select rownum,ename,sal
? 2? from? (select * from emp order by sal desc)
? 3? where rownum<=3;

??? ROWNUM ENAME??????? SAL????????????????????????????????????????????????????????????????????????????????????????????
---------- ---------- -----????????????????????????????????????????????????????????????????????????????????????????????
???????? 1 KING??????? 5000????????????????????????????????????????????????????????????????????????????????????????????
???????? 2 SCOTT?????? 3000????????????????????????????????????????????????????????????????????????????????????????????
???????? 3 FORD??????? 3000????????????????????????????????????????????????????????????????????????????????????????????

SQL> select *
? 2? from ?(select rownum r,e1.*
? 3? ? from (select * from emp order by sal) e1
? 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???? SALESMAN??????? 7698 08-9月 -81????? 1500????????? 0???????? 30???????????????????????
???????? 8?????? 7499 ALLEN????? SALESMAN??????? 7698 20-2月 -81????? 1600??????? 300???????? 30???????????????????????

SQL> select e.empno,e.ename,e.sal,d.avgsal
? 2? from emp e,(select deptno, avg(sal) avgsal from emp group by deptno) d
? 3? where e.deptno=d.deptno
? 4? and e.sal>d.avgsal;

???? EMPNO ENAME??????? SAL???? AVGSAL?????????????????????????????????????????????????????????????????????????????????
---------- ---------- ----- ----------?????????????????????????????????????????????????????????????????????????????????
????? 7499 ALLEN?????? 1600 1566.66667?????????????????????????????????????????????????????????????????????????????????
????? 7566 JONES?????? 2975?????? 2175?????????????????????????????????????????????????????????????????????????????????
????? 7698 BLAKE?????? 2850 1566.66667?????????????????????????????????????????????????????????????????????????????????
????? 7788 SCOTT?????? 3000?????? 2175?????????????????????????????????????????????????????????????????????????????????
????? 7839 KING??????? 5000 2916.66667?????????????????????????????????????????????????????????????????????????????????
????? 7902 FORD??????? 3000?????? 2175?????????????????????????????????????????????????????????????????????????????????

已選擇6行。

SQL> --第三題
SQL> select hiredate from emp;

HIREDATE???????????????????????????????????????????????????????????????????????????????????????????????????????????????
--------------?????????????????????????????????????????????????????????????????????????????????????????????????????????
17-12月-80?????????????????????????????????????????????????????????????????????????????????????????????????????????????
20-2月 -81?????????????????????????????????????????????????????????????????????????????????????????????????????????????
22-2月 -81?????????????????????????????????????????????????????????????????????????????????????????????????????????????
02-4月 -81?????????????????????????????????????????????????????????????????????????????????????????????????????????????
28-9月 -81?????????????????????????????????????????????????????????????????????????????????????????????????????????????
01-5月 -81?????????????????????????????????????????????????????????????????????????????????????????????????????????????
09-6月 -81?????????????????????????????????????????????????????????????????????????????????????????????????????????????
13-7月 -87?????????????????????????????????????????????????????????????????????????????????????????????????????????????
17-11月-81?????????????????????????????????????????????????????????????????????????????????????????????????????????????
08-9月 -81?????????????????????????????????????????????????????????????????????????????????????????????????????????????
13-7月 -87?????????????????????????????????????????????????????????????????????????????????????????????????????????????

HIREDATE???????????????????????????????????????????????????????????????????????????????????????????????????????????????
--------------?????????????????????????????????????????????????????????????????????????????????????????????????????????
03-12月-81?????????????????????????????????????????????????????????????????????????????????????????????????????????????
03-12月-81?????????????????????????????????????????????????????????????????????????????????????????????????????????????
23-1月 -82?????????????????????????????????????????????????????????????????????????????????????????????????????????????

已選擇14行。

SQL> select to_char(hiredate,'yyyy') from emp;

TO_C???????????????????????????????????????????????????????????????????????????????????????????????????????????????????
----???????????????????????????????????????????????????????????????????????????????????????????????????????????????????
1980???????????????????????????????????????????????????????????????????????????????????????????????????????????????????
1981???????????????????????????????????????????????????????????????????????????????????????????????????????????????????
1981???????????????????????????????????????????????????????????????????????????????????????????????????????????????????
1981???????????????????????????????????????????????????????????????????????????????????????????????????????????????????
1981???????????????????????????????????????????????????????????????????????????????????????????????????????????????????
1981???????????????????????????????????????????????????????????????????????????????????????????????????????????????????
1981???????????????????????????????????????????????????????????????????????????????????????????????????????????????????
1987???????????????????????????????????????????????????????????????????????????????????????????????????????????????????
1981???????????????????????????????????????????????????????????????????????????????????????????????????????????????????
1981???????????????????????????????????????????????????????????????????????????????????????????????????????????????????
1987???????????????????????????????????????????????????????????????????????????????????????????????????????????????????

TO_C???????????????????????????????????????????????????????????????????????????????????????????????????????????????????
----???????????????????????????????????????????????????????????????????????????????????????????????????????????????????
1981???????????????????????????????????????????????????????????????????????????????????????????????????????????????????
1981???????????????????????????????????????????????????????????????????????????????????????????????????????????????????
1982???????????????????????????????????????????????????????????????????????????????????????????????????????????????????

已選擇14行。

SQL> select count(*) Total,
? 2???????? sum(decode(to_char(hiredate,'yyyy'),'1980',1,0)) "1980"
? 3???????? sum(decode(to_char(hiredate,'yyyy'),'1981',1,0)) "1981"
? 4???????? sum(decode(to_char(hiredate,'yyyy'),'1982',1,0)) "1982"
? 5???????? sum(decode(to_char(hiredate,'yyyy'),'1987',1,0)) "1987"
? 6? from emp;
?????? sum(decode(to_char(hiredate,'yyyy'),'1981',1,0)) "1981"
?????? *
第 3 行出現(xiàn)錯(cuò)誤:
ORA-00923: 未找到要求的 FROM 關(guān)鍵字


SQL> select count(*) Total,
? 2???????? sum(decode(to_char(hiredate,'yyyy'),'1980',1,0)) "1980",
? 3???????? sum(decode(to_char(hiredate,'yyyy'),'1981',1,0)) "1981",
? 4???????? sum(decode(to_char(hiredate,'yyyy'),'1982',1,0)) "1982",
? 5???????? sum(decode(to_char(hiredate,'yyyy'),'1987',1,0)) "1987"
? 6? from emp;

???? TOTAL?????? 1980?????? 1981?????? 1982?????? 1987?????????????????????????????????????????????????????????????????
---------- ---------- ---------- ---------- ----------?????????????????????????????????????????????????????????????????
??????? 14????????? 1???????? 10????????? 1????????? 2?????????????????????????????????????????????????????????????????

SQL> spool off

總結(jié)

以上是生活随笔為你收集整理的Oracle子查询的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。