ホームページ  >  記事  >  データベース  >  SQL文でのwithの使い方

SQL文でのwithの使い方

醉折花枝作酒筹
醉折花枝作酒筹転載
2021-08-06 17:54:003711ブラウズ

WITH AS 句はサブクエリ部分とも呼ばれ、SQL ステートメント全体で使用される SQL フラグメントを定義できます。 SQL ステートメントを読みやすくしたり、UNION ALL のさまざまな部分にデータを提供する部分として使用したりできます。

SQL文でのwithの使い方

– 1 つのエイリアスの場合

with tmp as (select * from tb_name)

– 複数のエイリアスの場合

with
tmp as (select * from tb_name),
tmp2 as (select * from tb_name2),
tmp3 as (select * from tb_name3),
…

– 一時テーブルの構築と同等

with e as (select * from scott.emp e where e.empno=7499)
select * from e;

-これは、e および d の一時テーブルを構築するのと同じです

with
e as (select * from scott.emp),
d as (select * from scott.dept)
select * from e, d where e.deptno = d.deptno;

実際には、繰り返し使用される SQL ステートメントを as を使用して配置し、エイリアスを取得し、それを後続のクエリで使用することです。これは、SQL ステートメントの大規模なバッチで最適化の役割を果たし、明確です。

テーブルにデータを挿入する用途として

insert into table2
with
s1 as (select rownum c1 from dual connect by rownum <= 10),
s2 as (select rownum c2 from dual connect by rownum <= 10)
select a.c1, b.c2 from s1 a, s2 b where…;

s1、s2からs1.sid、s2.sidを選択するには、関連する条件が必要です。そうでない場合、結果はデカルト積になります。

with は仮想ビューと同等です。

as フレーズ (サブクエリ ファクタリングとも呼ばれる) を使用すると、SQL ステートメント全体で使用される SQL フラグメントを定義して、さまざまなことができます。 SQL ステートメントを読みやすくするためである場合もあれば、データを提供する部分として Union All の別の部分に存在する場合もあります。

特にユニオンオールに便利です。 Union all の各部分は同じかもしれませんが、各部分を 1 回実行するとコストが高すぎるため、1 回だけ実行すればよい with as 句を使用できます。 with as 句で定義されたテーブル名が 2 回以上呼び出された場合、オプティマイザは with as 句で取得したデータを一時テーブルに自動的に配置しますが、1 回しか呼び出されなかった場合は、自動的に配置されません。プロンプト・マテリアライズにより、with as フレーズ内のデータがグローバル一時テーブルに強制的に入れられます。この方法で多くのクエリを高速化できます。

with
sql1 as (select to_char(a) s_name from test_tempa),
sql2 as (select to_char(b) s_name from test_tempb where not exists (select s_name from sql1 where rownum=1))
select * from sql1
union all
select * from sql2
union all
select ‘no records’ from dual
where not exists (select s_name from sql1 where rownum=1)
and not exists (select s_name from sql2 where rownum=1);

WITH ステートメントの利点:

(1). SQL の可読性が向上します。たとえば、サブクエリなどを使用して特定のものに意味のある名前を付けます。

(2). with サブクエリは 1 回だけ実行され、結果はユーザーの一時表スペースに保存され、パフォーマンスを向上させるために複数回参照できます。

例: EXCEL のインポート処理中に、データを一時テーブルに保存する必要がある場合があります。次回インポートを実行すると、一時テーブルのデータはクリアされます。ただし、この時点では、一時テーブルのデータはクリアされます。同時実行の問題がある場合、2 人のユーザーがお互いのデータを別々に操作するため、混乱が生じる可能性があります。ただし、WITH 関数と UNION ステートメントを使用して SQL ステートメントを結合し、SESSION に保存することができます。エラー情報をエクスポートするには、この Statements 構成データを使用できます。

関連する推奨事項: 「mysql チュートリアル

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

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。