ホームページ >データベース >Oracle >oracle での with の使用法は何ですか

oracle での with の使用法は何ですか

WBOY
WBOYオリジナル
2022-02-28 10:57:2026980ブラウズ

Oracle では、"with as" ステートメントは、一時テーブルを作成し、その中間結果を一時テーブル スペース内のステートメントに配置することと同じです。このステートメントを使用して、複数の一時テーブルを定義することもできます。は「with temptablename([field list]) as (select ...)」です。

oracle での with の使用法は何ですか

このチュートリアルの動作環境: Windows 10 システム、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. 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 つの同一のサブクエリが 1 つのクエリに表示されます。

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

の使用 2 つのクエリの比較から、with as 句を使用するとクエリ ステートメントが簡素化され、クエリ速度が向上することがわかります。

推奨チュートリアル: 「

Oracle ビデオ チュートリアル

以上がoracle での with の使用法は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。