C# Aspose.Words 刪除word中的圖片操作
一、DQL(data query language)資料查詢語言
-
單表查詢
-
分頁
-- 偽列(物理不存在的列,Oracle對結果進行計算得到的臨時列)
-- 分頁用到了偽列rownum,因為這個列是不穩定的,變化的,所以要把這個結果當作下一次查詢的資料(select e.*,rownum rn from emp e),這樣在下一個查詢中它就成了一個真實存在的列,就可以進行條件的限定
-- 把偽列轉換為實列(用到了子查詢,把一個查詢作為另一個查詢的一部分就是子查詢,也叫巢狀查詢)
-- 簡單分頁,不帶排序
SELECT t.* FROM (SELECT e.*,ROWNUM rn FROM emp e) t WHERE t.rn>(n-1)*SIZE AND t.rn<=n*SIZE;
-------------------------------
SELECT t.* FROM (SELECT e.*,ROWNUM rn FROM emp e) t WHERE t.rn>(&n-1)*&SIZE AND t.rn<=&n*&SIZE;
------------------------------
-- 帶排序的分頁,三層巢狀,&代表變數,在執行時可以賦值
SELECT * FROM (SELECT t.*,ROWNUM rn FROM (SELECT e.* FROM emp e ORDER BY sal) t) o WHERE o.rn>(&n-1)*&SIZE AND o.rn<=&n*&SIZE;
-
分組(group by)
-- 列表中的列一定要在group by後面的欄位中
-- 按部門和工作進行分組
SELECT deptno,job FROM emp GROUP BY deptno,job;
-- 按工作進行分組
SELECT job FROM emp GROUP BY job;
-
-
多表查詢
-
內連線
-- 標準寫法
SELECT e.empno,e.ename,e.deptno,d.dname FROM emp e INNER JOIN dept d ON e.deptno= d.deptno;
-- 常用寫法
SELECT empno,ename,d.deptno,dname FROM emp e,dept d WHERE e.deptno=d.deptno;-- 因為兩張表中可能存在相同名稱的列,此時在sql語句中一定要表明該列是哪一個表,否則會報錯,如果列名可以明顯區分,則不需要標明是哪個表
SELECT empno,ename,e.deptno,dname FROM emp e INNER JOIN dept d ON e.deptno= d.deptno;
-- 上述sql中的deptno在兩張表中都有,所以一定要標明表
-- 內連線的結果是一一對應,第一張表中的資料一定和第二張表中的資料有關聯。
-
左外連線
-- 查詢的結果中會顯示左表和右表一一對應的記錄,並且還顯示左表中不對應的資料,重點是左表,就是要顯示左表中所有記錄
SELECT empno,ename,d.deptno,dname FROM emp LEFT OUTER JOIN dept d ON emp.deptno = d.deptno;
-
右外連線
SELECT e.empno,e.ename,d.deptno,dname FROM emp e RIGHT OUTER JOIN dept d ON e.deptno=d.deptno;
-
全外連線
SELECT e.empno,e.ename,d.deptno,dname FROM emp e FULL JOIN dept d ON e.deptno=d.deptno;
-
二、TCL(transaction contol language)事務控制語言
-- 設定標誌
savepoint p1;
-- 插入資料
insert into emp(empno) values(5);
-- 回滾到標誌處
rollback to p1;
-- 提交
commit
三、DCL(data control language)資料控制語言
-
建立角色
create role 角色名;
-
分配許可權
grant select on class to 角色名;
四、索引
-
字典中有索引,書中有目錄
-
快速查詢資料
-
優點:DQL快速查詢,為了保證查詢速度,可以犧牲一定的空間和DML的操作時間
-
缺點:佔空間(在儲存正常業務資料的同時,還要額外的儲存索引資訊),在維護正常業務資料的同時,還要維護索引的資料(佔時間)
-
什麼情況下適合建立索引
-
一個條件經常出現在where中,就要考慮是否要建立索引
-
對於列中的資料區分度比較高的列也可以建立索引(反例:性別不適合)
-
如果同時又多個查詢條件,where c1=a and c2 = b,建立聯合索引(c1,c2),索引中的列的順序和where條件中的順序儘量一致
-
索引(c1,c2...)條件是where c1 = a and c2=b 這個是好的,條件是where c2=b這個不是特別理想,或者where c2=b and c1 = a這個也不好
-
-
-
索引的分類
-
聚集索引:會改變記錄的物理位置
-
非聚集索引:資料的順序和它插入時的順序一致,在索引中儲存的是記錄的rowid,找到索引,然後找到rowid,然後找到記錄
-
name1 row1 name2 row3 name3 row4 name4 row2 -- 上面的表格為非聚集索引表格,裡面儲存了rowid
-- 姓名列在插入時的資料是name1,name4,name2,name3,建立索引後不會改變插入順序
-- 在索引中的順序是name1,name2,name3,name4
-