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

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

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

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

複雑なクエリをより小さく、より管理しやすいピースに分解します。
中間結果に意味のある名前を与えることにより、クエリの読みやすさと保守性を向上させます。
同じクエリ内で中間結果を再利用します。
複雑な計算を複数のステップに分解して、複雑な計算を簡素化します。
一般的に、その複雑さのために理解したり維持したりするのが難しくなっているクエリがある場合、CTEはクエリを簡素化して作業を容易にするための良いソリューションである可能性があります。
human
いくつかの基本的な例は何ですか？
gpt
列「school_id``」、 `` `` school_name``、 `` `` "district_id``、生徒数を備えた学校と呼ばれるテーブルがあるとしましょう。
その地区IDとその地区の学校あたりの生徒の平均数とともに、学校のリストを表示するための質問を書く必要があります。

あなたのロジックは次のとおりかもしれません：

    学校あたりの学生のリストとそれに対応する平均数を含むテーブルを作成します。
    このテーブルを学校のリストに参加させ、必要な情報を表示します。
    各地区の学校あたりの平均生徒数でテーブルを落とします。

CTE（一般的なテーブル式）を使用する場合、テーブルを作成してドロップする必要はありません。以下に示すように、「with」クエリによって作成された一時的な結果セットを単純に参照できます。

`` `
avg_studentsと（
select district_id、avg（desustor）として平均_students
学校から
Group by district_id）
S.School_name、S.District_id、avg.average_studentsを選択します
学校から
AVG_Students Avgに参加します
on s.district_id = avg.district_id;
`` `

したがって、ここでは、「avg_students」を「with query」で一時的な結果セット「avg_students」を定義することから始めます。ブラケットには、この結果セットを定義する「選択」ステートメントがあります。これには、学校ごとの生徒の対応する平均数が含まれています。閉じた括弧の後、メインの「選択」ステートメントを開始します。割り当てられた名前（「avg_students」）を使用して、通常のテーブルのように設定された一時的な結果を参照することに注意してください。出力には、学校名、その地区のID、およびこの地区の平均生徒数が含まれます。


|school_name |District_id |Average_Students |
|--- |--- |--- |
|幸せな子供|2 |238 |
|スマート|2 |238 |
|太陽|5 |176 |
|モンテッソーリ|5 |176 |


他のSQLクエリでは使用できないという意味で、一時的な結果セットは「削除」されます。もちろん、必要に応じて再度定義できます。