Oracle では、"with as" ステートメントは、一時テーブルを作成し、その中間結果を一時テーブル スペース内のステートメントに配置することと同じです。このステートメントを使用して、複数の一時テーブルを定義することもできます。は「with temptablename([field list]) as (select ...)」です。
このチュートリアルの動作環境: Windows 10 システム、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. 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 サイトの他の関連記事を参照してください。