首頁  >  文章  >  資料庫  >  oracle中with as的用法是什麼

oracle中with as的用法是什麼

WBOY
WBOY原創
2022-02-28 10:57:2026917瀏覽

在oracle中,「with as」語句相當於建立一個臨時表,將一個語句中的中間結果放在臨時表空間,也可以用該語句定義多個臨時表,語法為「with temptablename([欄位清單]) as (select ...)」。

oracle中with as的用法是什麼

本教學操作環境:Windows10系統、Oracle 11g版、Dell G3電腦。

oracle中with as的用法是什麼

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn