亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

Oracle 9i 數據庫WITH查詢語法小議

2024-08-29 13:50:29
字體:
來源:轉載
供稿:網友
Oracle9i新增了WITH語法功能,可以將查詢中的子查詢命名,放到SELECT語句的最前面。 下面看一個簡單的例子:
SQL> WITH2 SEG AS (SELECT SEGMENT_NAME, SUM(BYTES)/1024 K FROM USER_SEGMENTS GROUP BY SEGMENT_NAME),3 OBJ AS (SELECT OBJECT_NAME, OBJECT_TYPE FROM USER_OBJECTS)4 SELECT O.OBJECT_NAME, OBJECT_TYPE, NVL(S.K, 0) SIZE_K5 FROM OBJ O, SEG S6 WHERE O.OBJECT_NAME = S.SEGMENT_NAME (+)7 ;OBJECT_NAME OBJECT_TYPE SIZE_KDAIJC_TEST TABLE 128P_TEST PROCEDURE 0IND_DAIJC_TEST_C1 INDEX 128
通過WITH語句定義了兩個子查詢SEG和OBJ,在隨后的SELECT語句中可以直接對預定義的子查詢進行查詢。從上面的例子也可以看出,使用WITH語句,將一個包含聚集、外連接等操作SQL清楚的展現出來。 WITH定義的子查詢不僅可以使查詢語句更加簡單、清楚,而且WITH定義的子查詢還具有在SELECT語句的任意層均可見的特點。 即使是在WITH的定義層中,后定義的子查詢都可以使用前面已經定義好的子查詢:
SQL> WITH2 Q1 AS (SELECT 3 + 5 S FROM DUAL),3 Q2 AS (SELECT 3 * 5 M FROM DUAL),4 Q3 AS (SELECT S, M, S + M, S * M FROM Q1, Q2)5 SELECT * FROM Q3;S M S+M S*M8 15 23 120
利用WITH定義查詢中出現多次的子查詢還能帶來性能提示。Oracle會對WITH進行性能優化,當需要多次訪問WITH定義的子查詢時,Oracle會將子查詢的結果放到一個臨時表中,避免同樣的子查詢多次執行,從而有效的減少了查詢的IO數量。 看一個簡單的例子,首先構造一張大表,現在要取出大表中ID最小、ID最大以及ID等于平均值的記錄,看看普通寫法和WITH語句的區別:
SQL> CREATE TABLE T_WITH AS SELECT ROWNUM ID, A.* FROM DBA_SOURCE A WHERE ROWNUM < 100001; 表已創建。 SQL> SET TIMING ON SQL> SET AUTOT ON SQL> SELECT ID, NAME FROM T_WITH2 WHERE ID IN 3 (4 SELECT MAX(ID) FROM T_WITH 5 UNION ALL6 SELECT MIN(ID) FROM T_WITH7 UNION ALL8 SELECT TRUNC(AVG(ID)) FROM T_WITH9 );ID NAME1 STANDARD50000 DBMS_BACKUP_RESTORE100000 INITJVMAUX已用時間: 00: 00: 00.09執行計劃Plan hash value: 647530712----------------------------------------------------------- Id Operation Name Rows Bytes ----------------------------------------------------------- 0 SELECT STATEMENT 3 129 * 1 HASH JOIN 3 129 2 VIEW VW_NSO_1 3 39 3 HASH UNIQUE 3 39 4 UNION-ALL 5 SORT AGGREGATE 1 13 6 TABLE access FULL T_WITH 112K 1429K 7 SORT AGGREGATE 1 13 8 TABLE ACCESS FULL T_WITH 112K 1429K 9 SORT AGGREGATE 1 13 10 TABLE ACCESS FULL T_WITH 112K 1429K 11 TABLE ACCESS FULL T_WITH 112K 3299K-----------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------1 - access("ID"="$nso_col_1")Note------ dynamic sampling used for this statement統計信息----------------------------------------------------------0 recursive calls0 db block gets5529 consistent gets0 physical reads0 redo size543 bytes sent via SQL*Net to client385 bytes received via SQL*Net from client2 SQL*Net roundtrips to/from client0 sorts (memory)0 sorts (disk)3 rows processed
為了避免第一次執行時物理讀的影響,查詢結果選取了SQL的第三次運行,物理讀為0時的統計信息。 觀察執行計劃可以看到,先后對T_WITH表進行了4次全表掃描,并產生了5529個邏輯讀。下面看看WITH語句的表現:
SQL> WITH2 AGG AS (SELECT MAX(ID) MAX, MIN(ID) MIN, TRUNC(AVG(ID)) AVG FROM T_WITH)3 SELECT ID, NAME FROM T_WITH 4 WHERE ID IN 5 (6 SELECT MAX FROM AGG 7 UNION ALL 8 SELECT MIN FROM AGG 9 UNION ALL 10 SELECT AVG FROM AGG11 );ID NAME---------- ------------------------------1 STANDARD50000 DBMS_BACKUP_RESTORE100000 INITJVMAUX已用時間: 00: 00: 00.07執行計劃----------------------------------------------------------Plan hash value: 1033356310---------------------------------------------------------------------------------- Id Operation Name Rows Bytes ---------------------------------------------------------------------------------- 0 SELECT STATEMENT 3 129 1 TEMP TABLE TRANSFORMATION 2 LOAD AS SELECT T_WITH 3 SORT AGGREGATE 1 13 4 TABLE ACCESS FULL T_WITH 112K 1429K* 5 HASH JOIN 3 129 6 VIEW VW_NSO_1 3 39 7 HASH UNIQUE 3 39 8 UNION-ALL 9 VIEW 1 13 10 TABLE ACCESS FULL SYS_TEMP_0FD9D662E_BF2EDF12 1 13 11 VIEW 1 13 12 TABLE ACCESS FULL SYS_TEMP_0FD9D662E_BF2EDF12 1 13 13 VIEW 1 13 14 TABLE ACCESS FULL SYS_TEMP_0FD9D662E_BF2EDF12 1 13 15 TABLE ACCESS FULL T_WITH 112K 3299K----------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------5 - access("ID"="$nso_col_1")Note------ dynamic sampling used for this statement統計信息----------------------------------------------------------2 recursive calls8 db block gets2776 consistent gets1 physical reads648 redo size543 bytes sent via SQL*Net to client385 bytes received via SQL*Net from client2 SQL*Net roundtrips to/from client0 sorts (memory)0 sorts (disk)3 rows processed
觀察這次的執行計劃,發現只對T_WITH表進行了兩次全表掃描,而從邏輯讀上也可以觀察到,這次只產生了2776的邏輯讀,正好是上面不使用WITH語句的一半。 通過分析執行計劃,Oracle執行了WITH子查詢一次,并將結果放到了臨時表中,在隨后對子查詢的多次訪問中,都從臨時表中直接讀取了數據,這應該也是那1個物理讀的由來。 通過上面的例子可以看到,將子查詢放到WITH語句中不僅可以簡化查詢語句的結構,對于子查詢需要多次執行的情況,還有可能提示查詢的性能。 可惜的是,WITH語句只能用在SELECT語句中,UPDATE和DELETE語句不支持WITH語法:
SQL> SET AUTOT OFFSQL> SET TIMING OFFSQL> WITH SUBQ AS (SELECT 1 FROM DUAL)2 SELECT ID, NAME FROM T_WITH WHERE ID IN (SELECT * FROM SUBQ);ID NAME---------- ------------------------------1 STANDARDSQL> WITH SUBQ AS (SELECT 1 FROM DUAL)2 UPDATE T_WITH SET ID = 1 WHERE ID IN (SELECT * FROM SUBQ);UPDATE T_WITH SET ID = 1 WHERE ID IN (SELECT * FROM SUBQ)*第 2 行出現錯誤:ORA-00928: 缺失 SELECT 要害字SQL> WITH SUBQ AS (SELECT 1 FROM DUAL)2 DELETE T_WITH WHERE ID IN (SELECT * FROM SUBQ);DELETE T_WITH WHERE ID IN (SELECT * FROM SUBQ)*第 2 行出現錯誤:ORA-00928: 缺失 SELECT 要害字


上一篇:Oracle 的數據庫的數據備份與恢復

下一篇:在Oracle的網絡結構中解決連接問題

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品亚洲一区二区三区在线观看| 亚洲欧洲日产国码av系列天堂| 国产做受高潮69| 欧美激情亚洲国产| 国产在线观看不卡| 日韩在线www| 欧美性一区二区三区| 另类天堂视频在线观看| 国产精品h片在线播放| 国产精品爽黄69天堂a| 日韩视频亚洲视频| 亚洲人成在线免费观看| 欧美中文字幕在线观看| 亚洲第一视频网站| 91在线中文字幕| 日韩中文字在线| 亚洲第一网中文字幕| 亚洲精品第一页| 91精品国产自产在线观看永久| 久久视频免费在线播放| 国内精品久久久久久久| 亚洲电影免费观看高清完整版在线观看| www.日本久久久久com.| 琪琪亚洲精品午夜在线| 日韩精品在线免费观看视频| 狠狠干狠狠久久| 国产成人在线精品| 久久视频中文字幕| 国产精品一区二区久久国产| 国产成人一区三区| 欧美成aaa人片在线观看蜜臀| 国产精品1区2区在线观看| 国模叶桐国产精品一区| 亚洲裸体xxxx| 一区二区亚洲精品国产| 欧美成人午夜影院| 久久久免费av| 全亚洲最色的网站在线观看| 国产做受69高潮| 91夜夜未满十八勿入爽爽影院| 日韩av片永久免费网站| 久久香蕉国产线看观看av| www.日韩系列| 亚洲国产免费av| 国产精品久久久久久久久久免费| 亚洲国产成人久久综合一区| 91精品久久久久久久久久久久久久| 国产精品视频精品| 日韩亚洲一区二区| 亚洲成成品网站| 亚洲毛片在线看| 欧美亚洲国产视频| 国产一区欧美二区三区| 亚洲国产欧美一区二区三区同亚洲| 青草青草久热精品视频在线观看| 国产一区二区在线免费| 精品视频偷偷看在线观看| 亚洲电影免费观看高清完整版在线观看| 色妞欧美日韩在线| 久久精品成人动漫| 国产精品欧美日韩| 亚洲一区二区三区777| 另类色图亚洲色图| 精品久久久视频| 欧美成年人视频| 一区二区三区视频免费在线观看| 欧美色道久久88综合亚洲精品| 欧美三级免费观看| 成人xxxx视频| 亚洲国产欧美一区二区丝袜黑人| 日韩av电影手机在线观看| 日韩av最新在线观看| 国产精品黄页免费高清在线观看| 国产精品一二三在线| 亚洲精品自拍视频| 欧美电影在线观看完整版| 国产午夜精品免费一区二区三区| 欧美日韩人人澡狠狠躁视频| 国产精品网红福利| 伊人一区二区三区久久精品| 亚洲精品suv精品一区二区| 欧美日韩999| 亚洲的天堂在线中文字幕| 亚洲最大av网| 国产综合久久久久久| 亚洲福利视频网站| 欧美激情极品视频| 国产精品极品美女粉嫩高清在线| 中文国产成人精品久久一| 国产成人精品日本亚洲专区61| 亚洲激情视频网站| 久久中文字幕在线视频| 国产91精品在线播放| 欧美疯狂性受xxxxx另类| 国产精品一久久香蕉国产线看观看| 高潮白浆女日韩av免费看| 亚洲精品v天堂中文字幕| 色婷婷综合成人av| 欧美在线激情网| 国内成人精品视频| 欧美成人高清视频| 91sao在线观看国产| 日韩av在线网址| 久久亚洲影音av资源网| 国产成人av在线| 亚洲国产精品久久精品怡红院| 国产精品中文字幕在线观看| 日韩美女毛茸茸| 欧美成人亚洲成人| 色悠悠国产精品| 日韩亚洲精品视频| 日韩在线视频免费观看高清中文| 国产一区二区三区精品久久久| 亚洲视频精品在线| 欧美另类精品xxxx孕妇| 亚洲一区国产精品| 亚洲电影免费观看高清完整版在线| 日韩成人激情在线| 亚洲理论电影网| 1769国产精品| 91免费人成网站在线观看18| 国产精品wwww| 97视频在线免费观看| 97精品免费视频| 亚洲三级 欧美三级| 日韩av免费看| 亚洲欧美日韩一区在线| 亚洲va欧美va国产综合久久| 亚洲人成电影网| 69国产精品成人在线播放| 久久久久国色av免费观看性色| 国产精品嫩草影院一区二区| 国产成人综合av| 91精品久久久久久综合乱菊| 国产一区二区三区在线观看网站| 久久国产精品久久久久| 国产精品视频xxx| 97人洗澡人人免费公开视频碰碰碰| 亚洲国产婷婷香蕉久久久久久| 日韩欧美精品中文字幕| 91国内在线视频| 日韩av影视综合网| 韩国19禁主播vip福利视频| 成人国产亚洲精品a区天堂华泰| 北条麻妃久久精品| 欧美超级免费视 在线| 日韩视频在线观看免费| 亚洲天堂免费在线| 日韩一区二区久久久| 91精品国产高清自在线看超| 欧美体内谢she精2性欧美| 亚洲www永久成人夜色| 欧美诱惑福利视频| 欧美一级成年大片在线观看| 欧美一级片久久久久久久| 欧美成人中文字幕| 欧美激情奇米色| 久久视频在线播放| 亚洲精品一区中文字幕乱码| 中文字幕日韩有码| 在线视频欧美日韩精品| 日韩av高清不卡| 欧美日韩国产成人| 久久久亚洲欧洲日产国码aⅴ|