Oracle數據庫總結:
Oracle數據庫之基本查詢 Oracle數據庫之過濾和排序 Oracle數據庫之單行函數 Oracle數據庫之多行函數 Oracle數據庫之多表查詢
SQL> 注意的問題:
SQL> 1. 括號 SQL> 2. 合理的書寫風格 SQL> 3. 可以在主查詢的where select having from后面都可以放置子查詢 SQL> 4. 不可以在group by放置子查詢 SQL> 5. 強調from后面的子查詢 SQL> 6. 主查詢和子查詢可以不是同一張表;只要子查詢返回的結果主查詢可以使用即可 SQL> 7. 一般不在子查詢排序;但在top-n分析問題中,必須對子查詢排序 SQL> 8. 一般先執行子查詢,再執行主查詢;但相關子查詢例外 SQL> 9. 單行子查詢只能使用單行操作符;多行子查詢只能使用多行操作符 SQL> 10. 子查詢中的null
SQL> --查詢工資比SCOTT高的員工信息
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> --3. 可以在主查詢的where select having from后面都可以放置子查詢
SQL> select empno,ename,sal,(select job from emp where empno=7839) 第四列 2 from emp;
EMPNO ENAME SAL 第四列
---------- ---------- ---------- --------- 7369 SMITH 800 PRESIDENT 7499 ALLEN 1600 PRESIDENT 7521 WARD 1250 PRESIDENT 7566 JONES 2975 PRESIDENT 7654 MARTIN 1250 PRESIDENT 7698 BLAKE 2850 PRESIDENT 7782 CLARK 2450 PRESIDENT 7788 SCOTT 3000 PRESIDENT 7839 KING 5000 PRESIDENT 7844 TURNER 1500 PRESIDENT 7876 ADAMS 1100 PRESIDENT EMPNO ENAME SAL 第四列
---------- ---------- ---------- --------- 7900 JAMES 950 PRESIDENT 7902 FORD 3000 PRESIDENT 7934 MILLER 1300 PRESIDENT
SQL> --5. 強調from后面的子查詢
SQL> --查詢員工信息:員工號 姓名 月薪 SQL> select * 2 from (select empno,ename,sal from emp);
EMPNO ENAME SAL
---------- ---------- ---------- 7369 SMITH 800 7499 ALLEN 1600 7521 WARD 1250 7566 JONES 2975 7654 MARTIN 1250 7698 BLAKE 2850 7782 CLARK 2450 7788 SCOTT 3000 7839 KING 5000 7844 TURNER 1500 7876 ADAMS 1100 EMPNO ENAME SAL
---------- ---------- ---------- 7900 JAMES 950 7902 FORD 3000 7934 MILLER 1300
SQL> --6. 主查詢和子查詢可以不是同一張表;只要子查詢返回的結果主查詢可以使用即可
SQL> --查詢部門名稱是SALES的員工信息 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
SQL> select e.* 2 from emp e,dept d 3 where e.deptno=d.deptno and d.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
SQL> --in 在集合中
SQL> --查詢部門名稱是SALES和ACCOUNTING的員工 1 select * 2 from emp 3* where deptno in (select deptno from dept where dname=‘SALES’ or dname=‘ACCOUNTING’)
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 7782 CLARK MANAGER 7839 09-6月 -81 2450 10 7839 KING PRESIDENT 17-11月-81 5000 10 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30 7900 JAMES CLERK 7698 03-12月-81 950 30 7934 MILLER CLERK 7782 23-1月 -82 1300 10 已選擇 9 行。
SQL> --any: 和集合中任意一個值比較
SQL> --查詢工資比30號部門任意一個員工高的員工信息 SQL> select * 2 from emp 3 where sal > any (select sal from emp where deptno=30);
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7839 KING PRESIDENT 17-11月-81 5000 10 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 7698 BLAKE MANAGER 7839 01-5月 -81 2850 30 7782 CLARK MANAGER 7839 09-6月 -81 2450 10 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30 7934 MILLER CLERK 7782 23-1月 -82 1300 10 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7876 ADAMS CLERK 7788 23-5月 -87 1100 20
1 select * 2 from emp 3* where sal > (select min(sal) from emp where deptno=30)
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 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 19-4月 -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 23-5月 -87 1100 20 7902 FORD ANALYST 7566 03-12月-81 3000 20 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7934 MILLER CLERK 7782 23-1月 -82 1300 10 已選擇 12 行。
SQL> --all: 和集合中的所有值比較
SQL> --查詢工資比30號部門所有員工高的員工信息 SQL> select * 2 from emp 3 where sal > all (select sal from emp where deptno=30);
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7566 JONES MANAGER 7839 02-4月 -81 2975 20 7788 SCOTT ANALYST 7566 19-4月 -87 3000 20 7839 KING PRESIDENT 17-11月-81 5000 10 7902 FORD ANALYST 7566 03-12月-81 3000 20
1 select * 2 from emp 3* where sal > (select max(sal) from emp where deptno=30)
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7566 JONES MANAGER 7839 02-4月 -81 2975 20 7788 SCOTT ANALYST 7566 19-4月 -87 3000 20 7839 KING PRESIDENT 17-11月-81 5000 10 7902 FORD ANALYST 7566 03-12月-81 3000 20
SQL> --多行子查詢中的null
SQL> --查詢不是老板的員工
SQL> select * 2 from emp 3 where empno not in (select mgr from emp);
未選定行
SQL> --查詢是老板的員工 1 select * 2 from emp 3* where empno in (select mgr from emp) SQL> /
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7902 FORD ANALYST 7566 03-12月-81 3000 20 7698 BLAKE MANAGER 7839 01-5月 -81 2850 30 7839 KING PRESIDENT 17-11月-81 5000 10 7566 JONES MANAGER 7839 02-4月 -81 2975 20 7788 SCOTT ANALYST 7566 19-4月 -87 3000 20 7782 CLARK MANAGER 7839 09-6月 -81 2450 10
SQL> select * 2 from emp 3 where empno not in (select mgr from emp where mgr is not null);
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 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 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30 7934 MILLER CLERK 7782 23-1月 -82 1300 10 7369 SMITH CLERK 7902 17-12月-80 800 20 7876 ADAMS CLERK 7788 23-5月 -87 1100 20 7900 JAMES CLERK 7698 03-12月-81 950 30
Oracle數據庫總結:
Oracle數據庫之集合運算 Oracle數據庫之數據處理 Oracle數據庫之建表和管理表 Oracle數據庫之對象視圖、索引、序列、同義詞
總結
以上是生活随笔 為你收集整理的Oracle数据库之子查询 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。