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の結果をメインクエリで使用して、顧客テーブルに参加し、顧客名と総売上を取得します。
Common Table Expressions (CTEs) are a feature in SQL that allow you to define a temporary named result set that can be used within a SELECT, INSERT, UPDATE, or DELETE statement. They provide a way to simplify complex queries and improve readability by breaking down a query into smaller, reusable parts.

CTEs can be thought of as named subqueries, as they can be used to encapsulate a query and refer to it later in the same statement. The key difference between subqueries and CTEs is that subqueries are unnamed and can only be used within the same query, while CTEs can be named and can be referred to multiple times within a query.

You should use CTEs when you have a complex query that needs to be broken down into smaller, more manageable parts. They can also be used to improve the readability and maintainability of a query by giving meaningful names to intermediate results. Additionally, CTEs can provide performance benefits, as the query optimizer may be able to use the results of a CTE multiple times without having to recompute them each time.

Here's an example of a query that uses a CTE:

vbnet

WITH TotalSales AS (
   SELECT CustomerID, SUM(Amount) AS TotalAmount
   FROM Orders
   GROUP BY CustomerID
)
SELECT Customers.Name, TotalAmount
FROM Customers
JOIN TotalSales ON Customers.CustomerID = TotalSales.CustomerID

In this example, the CTE named "TotalSales" is used to compute the total sales for each customer. The results of the CTE are then used in the main query to join with the customers table and retrieve the customer name and total sales.