在oracle中,「with as」語句相當於建立一個臨時表,將一個語句中的中間結果放在臨時表空間,也可以用該語句定義多個臨時表,語法為「with temptablename([欄位清單]) as (select ...)」。
本教學操作環境:Windows10系統、Oracle 11g版、Dell G3電腦。
Oracle查詢中的with as子句相當於建立一個臨時表,將一個語句中的某些中間結果放在臨時表空間。將查詢中的子查詢命名,放到SELECT語句的最前面。語法如下:
with temptablename([字段列表]) as (select ...) select ...
也可以使用with as子句定義多個臨時表,並建立多個臨時表時,後面的臨時表可以存取前面已經建立的臨時表。語法如下:
with temptablename1([字段列表]) as (select ...), temptablename2([字段列表]) as (select ...) select ...
說明:
(1)使用with as子句建立的臨時表在檢索查詢完成以後就被消除。
(2)在建立多個臨時表時,後者可以存取前面已經建好的臨時表。
(3)當一個查詢有多個相同的子查詢時,一般使用with as子句,因為子查詢結果存在記憶體臨時表中,執行效率較高。
用法範例
查詢哪些部門的薪資總額高於所有部門的平均薪資:
1、不用with as
程式碼及查詢結果如下:
SELECT deptno,total_sal FROM (SELECT deptno,sum(sal) as total_sal FROM employee GROUP BY deptno) temp1 WHERE total_sal>( SELECT avg(total_sal) FROM (SELECT deptno,sum(sal) as total_sal FROM employee GROUP BY deptno) 10:46:44 10 ); DEPTNO TOTAL_SAL ---------- ---------- 20 5701632000 Elapsed: 00:00:02.33
在這個範例中,在一個查詢中出現了兩個相同的子查詢。
2、使用with as
10:45:47 SQL> WITH tempA AS (SELECT deptno,sum(sal) as total_sal FROM employee GROUP BY deptno) SELECT * FROM tempA WHERE total_sal>( SELECT AVG(total_sal) FROM tempA 10:46:02 10 ); DEPTNO TOTAL_SAL ---------- ---------- 20 5701632000 Elapsed: 00:00:01.42
透過兩個查詢的比較可以看出,使用with as子句可以簡化查詢語句,並且可以提高查詢的速度。
推薦教學:《Oracle影片教學》
以上是oracle中with as的用法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!