Oracle複習2
阿新 • • 發佈:2018-11-22
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 隱式回滾 非法退出 掉電 宕機 系統出錯