1. 程式人生 > >Oracle複習2

Oracle複習2

10 子查詢
    一般子查詢
    相關子查詢 將主查詢的結果給子查詢使用
    eg :查詢SALES部門的員工資訊
    (1)條件查詢 SELECT e.*  ,d.dname FROM emp  e,dept d where e.deptno =d.deptno and d.dname ='sales';
    (2)一般子查詢 SELECT e.* ,FROM emp e  WHERE e.deptno  =(SELECT deptno from dept where dname ='SALES');
11 查詢相同內容 子查詢和 多表查詢的比較 多表查詢的效率比較高 以空間換時間
12 子查詢的位置放置
		單行子查詢對應單行比較操作符 多行子查詢對應多行比較操作符
		查詢工種和id =7369 一樣 且工資比7902 號員工號的員工資訊
13 in 指其中的一個值 any 是其中的一個 all 所有值
		SELECT *FROM emp e,dept d WHERE e.deptno = d.deptno and sal>all(SELECT SAL FROM emp WHERE DEPTNO =30);
	//查詢不是經理的員工資訊
		SELECT * FROM emp WHERE empno NOT IN (SELECT mgr FROM emp WHERE MGR IS NOT NULL);
14 ORACLE 中特有語法
	TopN問題 排序問題
	 SELECT *FROM (SELECT *FROM emp  ORDER BY SAL DESC) WHERE ROWNUM <=3;
	 注:ROWNUM是ORACLE伺服器返回的結果集的固有屬性,結果集生成則其固定 對其進行的排序不會改變固有屬性 
	 因而 where子句中只能使用 <.<= 不能使用> 或者>=; 生成結果集是一行一行生成的,沒有第一行,就沒有第二行。只能這麼用 
15  分頁問題
		解決分頁問題的思路 首先 應該對要取出的結果進行排序(如果需要的話),然後將其作為子表進行查詢,將得到新的ROWNUB列,
		將該屬性作為子表的新屬性,這樣,便可以使用該子表屬性進行查詢。
			SELECT l.r,l.empno,l.ename from (SELECT ROWNUM ,e.* FROM (SELECT *FROM EMP ORDER BY sal DESC))l where l.r >10  ; 
16 找到本部門薪水大於本部門平均薪水的員工
 (1)方法1 一般子查詢
	先計算每個部門的平均薪水,作為一個子表,原有員工表作為另外一個表。進行多表查詢。根據員工號相同和 sal>avg(sal)進行表的連線
	SELECT *FROM emp e,(SELECT deptno.avg(sal) a FROM emp group by deptno )d where e.deptno = d.deptno and e.sal >e.a;
 (2)方法2 相關子查詢: 主查詢 通過別名將主查詢的值傳遞給子查詢 從而限制每個子查詢只返回一列 作為主查詢的一列(主查詢中的子句只能放置單行子查詢
 否則 會出現一對多的矛盾)
  SELECT e.empno ,e.ename ,e.sal ,(SELECT avg(sal) avgsal from emp ee group by deptno where e.empno  = ee.empno )s 
   FROM emp WHERE e.sal>SELECT avg(sal) avgsal from emp ee group by deptno where e.empno  = ee.empno;
 17 集合運算
 	就是對錶格的拼剪操作 UNION 
 18 sql語句的分類
  DML(data Manipulation Language) 資料庫操作語言 增刪改查
 	DCL(data control language)資料庫控制語言  提交 回滾 儲存點(事務控制)
 	DDL(data Define Language) 資料庫定義語言 建立表 所以 檢視  同義詞
 19 & 可以改變輸入的變數值,進而進行批量操作
 20 建立和原有表相同的表頭的空表
    CREATE table  emp_a as select *from emp WHERE 1 =0;
 21 將一個表資料批量插入另一個表
 		INSERT INTO emp_a SELECT *FROM emp ;
 22 更新資料
 		UPDATE emp set sal =10000 WHERE ENAME ='KING';
 23 刪除資料
 		DELETE FROM EMP WHERE EMPNO =7369;
 24 TRUNCATE 與 DELETE 
 		1 delete 逐條刪除 truncate先摧毀再重建
 		2 delete是MDL語句 truncate是DDL語句
 		3 DML可以閃回 做錯了 並且提交了 可以通過閃回 撤銷操作
 			要開啟閃回,必須開啟行移動功能
 		4 delete不會釋放空間 truncate會釋放空間
 		5 delete 比oracle快
 25 Oracle中的事務
 		(1)顯示提交 commit
 		(2)隱式提交 :
 				1)執行DDL語句 如建立表之前有沒有提交的update 或者insert語句
 				2)正常退出
 		(3)顯示回滾 rollback
 		     隱式回滾 非法退出 掉電 宕機  系統出錯