高階sql學習 with子句!!!

2021-09-30 08:46:41 字數 1844 閱讀 6702

使用with as 語句可以為乙個子查詢語句塊定義乙個名稱,使用這個子查詢名稱可以在查詢語句的很多地方引用這個子查詢。oracle 資料庫像對待內聯檢視或臨時表一樣對待被引用的子查詢名稱,從而起到一定的優化作用。with子句是9i新增語法。你可以在任何乙個頂層的select 語句以及幾乎所有型別的子查詢語句前,使用子查詢定義子句。被定義的子查詢名稱可以在主查詢語句以及所有的子查詢語句中引用,但未定義前不能引用。with子句中不能巢狀定義《也就是with子句中不能有with子句》,

但子查詢**現的「子查詢定義」語句可以引用已定義的子查詢名稱。

《可以引用前面已經定義的with子句》

with子句優點:

1. sql可讀性增強。比如對於特定with子查詢取個有意義的名字等。

2. with子查詢只執行一次,將結果儲存在使用者臨時表空間中,可以引用多次,增強效能。

with子句語法:

with alias_name as (select1), --as和select中的括號都不能省略

alias_name2 as (select2),--後面的沒有with,逗號分割,同乙個主查詢同級別地方,with子查詢只能定義一次

…alias_namen as (select n) –與下面的實際查詢之間沒有逗號

select ….

1.使用with子句可以讓子查詢重用相同的with查詢塊,通過select呼叫(with子句只能被select查詢塊引用),一般在with查詢用到多次情況下。在引用的select語句之前定義,同級只能定義with關鍵字只能使用一次,多個用逗號分割。

2.with子句的返回結果存到使用者的臨時表空間中,只做一次查詢,反覆使用,提高效率。

3.在同級select前有多個查詢定義的時候,第1個用with,後面的不用with,並且用逗號隔開。

5.最後乙個with 子句與下面的查詢之間不能有逗號,只通過右括號分割,with 子句的查詢必須用括號括起來

6.如果定義了with子句,而在查詢中不使用,那麼會報ora-32035 錯誤:未引用在with子句中定義的查詢名。(至少乙個with查詢的name未被引用,解決方法是移除未被引用的with查詢),注意:只要後面有引用的就可以,不一定非要在主查詢中引用,比如後面的with

查詢也引用了,也是可以的。

7.前面的with子句定義的查詢在後面的with子句中可以使用。但是乙個with子句內部不能巢狀with子句。

8.當乙個查詢塊名字和乙個表名或其他的物件相同時,解析器從內向外搜尋,優先使用子查詢塊名字。

9.with查詢的結果列有別名,引用的時候必須使用別名或*。

with使用例子:

1.一般使用方式

使用with 子句,可以在複雜的查詢中預先定義好乙個結果集,然後在查詢中反覆使用,不使用會報錯。而且with 子句獲得的是乙個臨時表,如果在查詢中使用,必須採用select from with查詢名,比如:

2.子查詢中可以引用前面已經定義的with子句

3.乙個with查詢的例項:

查詢出部門的總薪水大於所有部門平均總薪水的部門。部門表s_dept,員工表s_emp。分析:做這個查詢,首先必須計算出所有部門的總薪水,然後計算出總薪水的平均薪水,再篩選出部門的總薪水大於所有部門總薪水平均薪水的部門。那麼第1 步with 查詢查出所有部門的總薪水,第2 步用with 從第1 步獲得的結果表中查詢出平均薪水,最後利用這兩次的with 查詢比較總薪水大於平均薪水的結果,如下:

從上面的查詢可以看出,前面的with 查詢的結果可以被後面的with查詢重用,並且對with 查詢的結果列支援別名的使用,在最終查詢中必須要引用所有with 查詢,否則會報錯ora-32035 錯誤。

4.乙個查詢,如果查詢的結果行不滿足是10 的倍數,則補空行,直到是查詢出的行數是10 的倍數。

SQL語句之ORDER BY子句

在sql中可以使用order by子句對查詢的結果進行排序。例 現在使用查詢全部的語句查詢表 emp中的所有內容。l select from emp 輸出如下 此時,從查詢結果可以發現,是按照雇員的編號進行排序的,那麼此時如果要對使用指定的列進行排序,則就必須使用order by子句。語法格式如下 ...

批量SQL之 BULK COLLECT 子句

bulk collect 子句會批量檢索結果,即一次性將結果集繫結到乙個集合變數中,並從sql引擎傳送到pl sql引擎。通常可以在select into fetch into以及returning into子句中使用bulk collect。本文將逐一描述bulk collect在這幾種情形下的用...

SQL高階學習(二)

union 操作符用於合併兩個或多個 select 語句的結果集。請注意,union 內部的每個 select 語句必須擁有相同數量的列。列也必須擁有相似的資料型別。同時,每個 select 語句中的列的順序必須相同。select column name s from table1 union se...