oracle sql程式設計學習筆記

2021-06-18 18:34:05 字數 2256 閱讀 5780

上週學習oracle sql 程式設計的前兩章,今天做一下總結。

一、多表插入和merge

1.以前學的是mysql, 沒有遇到多表插入,以及merge合併更新和插入語句的情況,所以看起來還是比較新穎的。

多表插入

insert all/first when cond1 into tab_1  when cond2 into tab_2 else into tab_3

中 insert all 是每一條記錄和所有的判定條件進行一次匹配,匹配成功則進行插入,也就是說一條記錄可能會進行多次插入。

而insert first 則是每一條記錄只在第一次匹配成功時進行插入操作。

2.merge語句

格式:

需要注意的是在oracle 9版本中when matched 和when not matched是不可或缺的,在oracle 10及以上版本二者是可選的。

且今天在公司的oracle 9機子上試過了,在when matched 中包含delete語句時會報錯,update和insert語句包含where條件

時也會報缺少關鍵字的錯誤。

但是網上說oracle 10是可以加入where條件的,並且delete語句也是可選的。

二、sql語句執行

0. sql執行前的處理過程

>> 語法檢查

>> 語義檢查

諸如sql中訪問的物件是否存在和使用者是否具備相應的許可權訪問

>> 解析sql語句

利用內部演算法進行解析,生成解析樹和執行計畫

>> 執行sql,返回結果

1. 軟解析和硬解析

硬解析是指待執行的sql之前沒有執行過,需要利用內部演算法執行所有工作為sql生成解析樹、執行計畫後,再執行

軟解析是指待執行的sql語句已經在庫快取記憶體中存在了,執行時直接提取對應的執行計畫進行執行。

注意:sql 語句大小寫不同或者某個地方多個空格都會單獨的進行硬解析存入共享池,例如

select * from a 和 select         *       from a 就具有不同的hash雜湊值,不能算是相同的sql

select * from a 和 select * from a也具有不同的hash雜湊值,不能算作相同的sql

但是使用引數繫結,繫結不同的值時算作相同的sql

如:variable v_a number;

exec :v_a := 3;

select * from a where a.b=:v_a;

和v_a設定成5時具有相同的hash雜湊值,算作相同的sql

2. 查詢轉換

——發生在語法、語義檢查過後,sql執行之前

——查詢轉換包含以下幾種

——檢視合併

發生外部查詢塊謂語包含下列項的場合:

能夠在另乙個查詢塊的索引中使用的列

能夠在另乙個查詢的分割槽截斷中使用的列

在乙個聯接檢視中能夠限制返回行數的條件

查詢塊包含解析函式、聚合函式、集合運算、order by 子句或使用rownum時檢視合併被禁止

——子查詢解巢狀

filter運算和nested loops鏈結效率對比

——謂語前推

用來將謂語從乙個內含查詢塊中應用到不可合併的查詢塊中。既盡可能早的過濾掉不需要的資料

——使用物化檢視進行查詢重寫

查詢重寫是一種發生在當乙個查詢或查詢的一部分已經被儲存為乙個物化檢視,轉換器重寫該查詢以使用預先算好

的物化檢視資料而不需要執行當前查 詢的轉換。

物化檢視與普通檢視的差別在於物化檢視的查詢已經被執行並將結果集存入一張表中。

3.確定執行計畫

在確定使用哪個執行計畫之前,oracle會計算各個執行計畫的成本值,選擇成本值最小的乙個進行執行。

4.執行計畫並取得資料

其實不管我們平時使用有沒有使用limit限制返回結果行數,我們每次從伺服器獲取的記錄條數都是固定的,這個值可以

通過set arraysize n_number  來設定。

比如我們有如下查詢

select * from game  

game中有1000行資料,現在我們環境中arraysize 為20 則我們實際上與伺服器進行的互動訪問在50次以上

5.sql執行——總覽

Oracle SQL學習筆記

select level,childid,parentid from treetable start with parentid 0 connect by parentid prior childid select level,t.type id,t.type parentid from gwd t...

學習筆記 oracle SQL優化

資料庫設計 設計的原則 1 熟悉需求 2 符合開發規範 命名規範 明確實體與資料表的關係 不能即沒有主鍵也沒有外來鍵 3 審核資料庫設計 4 基本表的特徵 1 原子性 字段不能再分解 2 原始性 是對原始資料的記錄,不是拼 接出來的資訊 3 演繹行 有基本表和關係表中的 資料,可以派生出任何想要的資...

oracle SQL高階程式設計

1 不管你是用什麼方法或工具來輸入和執行sql語句,所有的事情最後都要通過oci oracle呼叫介面 來傳遞到資料庫。這裡的主旨就是不管你所使用的是什麼工具,其本地介面都是一樣的。2 當你退出或關閉sql plus的時候,這些設定命令就不再被保留了。為了避免每次使用sql plus時都重新敲入一遍...