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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ORACLE-WITH 子句详解

發(fā)布時間:2025/3/21 编程问答 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ORACLE-WITH 子句详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

概述

with 子句是在oracle 9i release 2 中引入的。with 子句又叫做子查詢構(gòu)造語句??梢杂脕斫o一個子查詢塊命名。

該查詢塊的檢索結(jié)果會被oracle 保存在用戶的臨時表空間中,該命名塊就像虛表或者內(nèi)聯(lián)視圖一樣。

語法

WITH subquery_name AS (the aggregation SQL statement) SELECT (query naming subquery_name);

With查詢語句不是以select開始的,而是以“WITH”關(guān)鍵字開頭。

可認(rèn)為在真正進(jìn)行查詢之前預(yù)先構(gòu)造了一個臨時表TT,之后便可多次使用它做進(jìn)一步的分析和處理


優(yōu)點(diǎn)

使用SQL with 子句的優(yōu)點(diǎn),

  • 增加了SQL的易讀性,如果構(gòu)造了多個子查詢,結(jié)構(gòu)會更清晰
  • 更重要的是:“一次分析,多次使用”。當(dāng)在一個sql 語句中需要多次使用到某個子查詢的結(jié)果的時候,可以提升sql 語句的性能。 這也是為什么會提供性能的地方,達(dá)到了“少讀”的目標(biāo)。

栗子

取 5到10的數(shù)據(jù),通常我們寫如下sql:

select * from (select level as lv from dual connect by level < 10 ) tt where tt.lv between 5 and 10 ;

現(xiàn)在改為 使用With as 的SQL:

with tt as (select level as lv from dual connect by level <10)select tt.lv from tt where tt.lv between 5 and 10 ;

實戰(zhàn)

查詢系統(tǒng)菜單的后臺sql

WITH TEMPVIEW AS(SELECT B.MENU_ID AS PARTY_ID,'1' AS TYPE,B.DIR_ID AS PARENT_ID,A.PRIV_NAME AS PARTY_NAME,A.URL,A.IS_HOLD,A.IS_AUTHORIZEDFROM BFM_PRIV A, BFM_MENU_DIR BWHERE A.PRIV_ID = B.MENU_IDAND A.STATE = 'A'AND B.DIR_ID IN (SELECT DIR_IDFROM BFM_DIRSTART WITH DIR_ID = :1 --綁定變量CONNECT BY PRIOR DIR_ID = PARENT_IDAND STATE = 'A')UNION ALLSELECT C.DIR_ID AS PARTY_ID,'0' AS TYPE,C.PARENT_ID,C.DIR_NAME AS PARTY_NAME,NULL,NULL,NULLFROM BFM_DIR CSTART WITH DIR_ID = :2 --綁定變量CONNECT BY PRIOR DIR_ID = PARENT_IDAND STATE = 'A') SELECT * FROM TEMPVIEWSTART WITH PARTY_ID = :3 --綁定變量 CONNECT BY PRIOR PARTY_ID = PARENT_IDORDER SIBLINGS BY PARTY_ID ;

ORDER SIBLINGS BY的意思就是在兄弟姐妹之間的排序,和order by所表示的含義絕對不同,針對樹狀sql,我覺得ORDER SIBLINGS BY更有意義,樹狀sql查詢出來的結(jié)果本身就是按照層次(hierarchy)結(jié)構(gòu)排好序的,而加上關(guān)鍵字SIBLINGS 其實是在hierarchy內(nèi)部進(jìn)行排序。

在層次查詢中如需對親兄弟的先后順序進(jìn)行限定,就必須要使用特有的“ORDER SIBLINGS BY”而非“ORDER BY”子句。切記之。

總結(jié)

以上是生活随笔為你收集整理的ORACLE-WITH 子句详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。