日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

with as 用法 oracle,with.as oracle的用法

發布時間:2025/4/16 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 with as 用法 oracle,with.as oracle的用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

-----*************************with..as oracle的用法

--語法:

with tempName as (select ....)

select ...

--例:現在要從1-19中得到11-14。一般的sql如下:

select * from

(

--模擬生一個20行的數據

SELECT LEVEL AS lv

FROM DUAL

CONNECT BY LEVEL < 20

) tt

WHERE tt.lv > 10 AND tt.lv < 15

--使用With as 的SQL為:

with TT as(

--模擬生一個20行的數據

SELECT LEVEL AS lv

FROM DUAL

CONNECT BY LEVEL < 20

)

select lv from TT

WHERE lv > 10 AND lv < 15

/*With查詢語句不是以select開始的,而是以“WITH”關鍵字開頭

可認為在真正進行查詢之前預先構造了一個臨時表TT,之后便可多次使用它做進一步的分析和處理

WITH Clause方法的優點

增加了SQL的易讀性,如果構造了多個子查詢,結構會更清晰;更重要的是:“一次分析,多次使用”,

這也是為什么會提供性能的地方,達到了“少讀”的目標。

第一種使用子查詢的方法表被掃描了兩次,而使用WITH Clause方法,表僅被掃描一次。

這樣可以大大的提高數據分析和查詢的效率。

另外,觀察WITH Clause方法執行計劃,其中“SYS_TEMP_XXXX”便是在運行過程中構造的中間統計結果臨時表。*/

-----*************************在視圖中使用WITH語句進行連接

CREATE OR REPLACE VIEW WITH_V AS

WITH DEPT_V AS (SELECT * FROM DEPT),

EMP_V AS (SELECT * FROM EMP)

SELECT D.DNAME,D.LOC,E.* FROM EMP_V E

LEFT JOIN DEPT_V D

ON D.DEPTNO = E.DEPTNO

-----*************************WITH語句的使用例子:

/*查詢出部門的總薪水大于所有部門平均總薪水的部門。部門表s_dept,員工表s_emp。

分析:做這個查詢,首先必須計算出所有部門的總薪水,然后計算出總薪水的平均薪水,

再篩選出部門的總薪水大于所有部門總薪水平均薪水的部門。那么第1 步with 查詢查出所有部門的總薪水,

第2 步用with 從第1 步獲得的結果表中查詢出平均薪水,最后利用這兩次 的with 查詢比較總薪水大于平均薪水的結果,如下:

*/

WITH DEPT_COSTS AS --查詢出部門的總工資

(SELECT D.DNAME, SUM(E.SAL) DEPT_TOTAL

FROM DEPT D, EMP E

WHERE E.DEPTNO = D.DEPTNO

GROUP BY D.DNAME),

AVE_COST AS --查詢出部門的平均工資,在后一個WITH語句中可以引用前一個定義的WITH語句

(SELECT SUM(DEPT_TOTAL) / COUNT(*) AVG_SUM FROM DEPT_COSTS)

SELECT

-----*************************

/*一、WITH AS的含義

WITH AS短語,也叫做子查詢部分(subquery factoring),可以定義一個SQL片斷,該SQL片斷會被整個SQL語句所用到。

特別對于UNION ALL比較有用。因為UNION ALL的每個部分可能相同,但是如果每個部分都去執行一遍的話,則成本太高,

所以可以使用WITH AS短語,則只要執行一遍即可。如果WITH AS短語所定義的表名被調用兩次以上,則優化器會自動將WITH AS

短語所獲取的數據放入一個TEMP表里,如果只是被調用一次,則不會。而提示materialize則是強制將WITH AS短語里的數據放入

一個全局臨時表里。很多查詢通過這種方法都可以提高速度。

二、WITH AS的使用實例

從A表中查詢某個字段出來,如果沒有從B表中查詢,如果A,B表中都沒有,則輸出ERROR

*/

with sql1 as

(select to_char(id) myid from a),

sql2 as

(select to_char(id) myid from b where not exists

(select * from sql1 where rownum > 5))

select * from sql1

union all

select * from sql2

union all

select 'error' from dual

where not exists (select * from sql1 where rownum > 5) and not exists

(select * from sql2 where rownum > 2);

總結

以上是生活随笔為你收集整理的with as 用法 oracle,with.as oracle的用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。