日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

ORACLE-WITH 子句详解

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

概述

with 子句是在oracle 9i release 2 中引入的。with 子句又叫做子查詢構造語句。可以用來給一個子查詢塊命名。

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

語法

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

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

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


優點

使用SQL with 子句的優點,

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

栗子

取 5到10的數據,通常我們寫如下sql:

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

現在改為 使用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 ;

實戰

查詢系統菜單的后臺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查詢出來的結果本身就是按照層次(hierarchy)結構排好序的,而加上關鍵字SIBLINGS 其實是在hierarchy內部進行排序。

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

總結

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

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