human
SQLの一般的なテーブル式の目的は何ですか？また、いつ使用する必要がありますか？
gpt
Common Table Expressions（CTES）は、SQLの機能であり、選択、挿入、更新、または削除ステートメント内で使用できる一時的な名前付き結果セットを定義できます。それらは、クエリを小さく再利用可能な部分に分解することにより、複雑なクエリを簡素化し、読みやすさを改善する方法を提供します。

CTEは、クエリをカプセル化し、同じステートメントで後で参照するために使用できるため、名前が付いていると考えられます。サブクエリとCTEの重要な違いは、サブ征服が名前が付けられておらず、同じクエリ内でのみ使用できることですが、CTEは名前が付けられ、クエリ内で複数回参照できることです。

より小さく、より管理しやすい部分に分解する必要がある複雑なクエリがある場合は、CTEを使用する必要があります。また、中間の結果に意味のある名前を与えることにより、クエリの読みやすさと保守性を向上させるためにも使用できます。さらに、クエリオプティマイザーは毎回それらを再計算することなく、CTEの結果を複数回使用できる可能性があるため、CTEはパフォーマンスの利点を提供できます。

CTEを使用するクエリの例は次のとおりです。

vbnet

as（
   CustomerID、合計（金額）をTotalamountとして選択します
   注文から
   customeridによるグループ
））
customers.name、totalamountを選択します
顧客から
customers.customerid = totalSales.customeridの合計を結合します

この例では、「TotalSales」という名前のCTEを使用して、各顧客の総売上を計算します。次に、CTEの結果をメインクエリで使用して、顧客テーブルに参加し、顧客名と総売上を取得します。
human
別の例を教えてください。具体的には、おそらくサバイバルゲームの在庫とクラフトの概念をめぐるデータを使用して、ゲームデザインに関する情報を保存するためにそれらを使用する場合の例を使用してください。これをUnityで使用する必要があります。
gpt
確かに、一般的なテーブル式（CTE）を使用してゲームデザイン、特にサバイバルゲームでの在庫とクラフトに関する情報を保存する方法の例です。
inventory_itemsをas（
    item_id、item_name、item_typeを選択します
    game_inventoryから
）、、
crafting_recipes as（
    recipe_id、item_id、requipt_items、output_item_idを選択します
    game_crafting_recipesから
））
I1.ITEM_NAMEをinput_itemとして選択し、i2.item_name as output_itemとして選択します
inventory_items i1から
I1.ITEM_ID = CR.ITEM_IDでCRAFTING_RECIPES CRに参加してください
cr.output_item_id = i2.item_idにinventory_items i2に参加します
この例では、2つのCTEが定義されています：inventory_itemsとcrafting_recipes。Inventory_Items CTEは、アイテム名やタイプなど、ゲームのインベントリ内のすべてのアイテムに関する情報を取得します。CRAFTING_RECIPES CTEは、レシピID、必要なアイテム、結果の出力アイテムなど、クラフトレシピに関する情報を取得します。
最終クエリでは、これらのCTEを使用してinventory_itemsとcrafting_recipesテーブルに参加し、どの出力アイテムを作成するためにどの入力アイテムを使用できるかを確認できます。
このCTEは、メインクエリ内で同じサブクエリを複数回再利用したい場合に役立ち、コードの読み取りと維持が容易になります。