human
SQLの一般的なテーブル式の目的は何ですか？また、いつ使用する必要がありますか？
gpt
共通の表式（CTE）は、選択されたステートメントから派生した一時的な結果セットであり、選択、挿入、更新、または削除ステートメントで使用できます。CTEは、複雑なクエリをより小さく、より管理しやすいピースに分解することにより、複雑なクエリを簡素化するために使用されます。

CTEの目的は、クエリを読み取り、書き込み、保守を容易にすることです。CTEは、単一の選択、挿入、更新、または削除ステートメントの範囲内でのみ表示されるサブクリーリーまたは一時的なビューと呼ばれると考えることができます。それらはデータベースにオブジェクトとして保存されておらず、データベースのパフォーマンスに影響を与えません。

CTEは、複数のレベルのデータ集約または計算を伴う複雑なクエリを扱う場合、または同じサブクエリがより大きなクエリの複数の場所で使用される場合に特に役立ちます。CTEを使用すると、サブクエリを一度書いてクエリ全体で再利用でき、クエリの全体的な構造をよりシンプルで理解しやすくすることができます。

いつCTEを使用するかという点では、あなたが望むとき、それらは良い選択です：

複雑なクエリをより小さく、より管理しやすいピースに分解します。
中間結果に意味のある名前を与えることにより、クエリの読みやすさと保守性を向上させます。
同じクエリ内で中間結果を再利用します。
複雑な計算を複数のステップに分解して、複雑な計算を簡素化します。
一般的に、その複雑さのために理解したり維持したりするのが難しくなっているクエリがある場合、CTEはクエリを簡素化して作業を容易にするための良いソリューションである可能性があります。
human
いくつかの基本的な例は何ですか？
gpt
SQLでCTEを使用する基本的な例を次に示します。

列の累積合計の計算：

cumulative_sumをas（
  選択する
    order_id、
    注文日、
    order_total、
    running_totalとしてsum（order_total）over（order by order_date）
  注文から
））
選択する
  order_id、
  注文日、
  order_total、
  running_total
cumulative_sumから;

複雑なクエリを複数のステップに分解する：

customer_infoをas（
  選択する
    顧客ID、
    顧客名、
    街、
    州
  顧客から
）、、
order_info as（
  選択する
    order_id、
    顧客ID、
    注文日、
    order_total
  注文から
））
選択する
  customer_info.customer_name、
  order_info.order_date、
  order_info.order_total
customer_infoから
order_infoに参加してください
  customer_info.customer_id = order_info.customer_id;

中間結果の再利用：

top_customersを（
  選択する
    顧客ID、
    合計（order_total）as total_spend
  注文から
  customer_idによるグループ
）、、
top_10_customers as（
  選択する
    顧客ID
  top_customersから
  total_spend descによる注文
  制限10
））
選択する
  顧客ID、
  注文日、
  order_total
注文から
customer_id in（top_10_customersからcustomer_idを選択）;

これらの例では、CTEはクエリの全体的な構造を簡素化し、理解して維持しやすくするために使用されます。