ホームページ > データベース > mysql チュートリアル > 派生テーブルの代わりに共通テーブル式 (CTE) を使用する必要があるのはどのような場合ですか?

派生テーブルの代わりに共通テーブル式 (CTE) を使用する必要があるのはどのような場合ですか?

Patricia Arquette
リリース: 2025-01-05 22:45:40
オリジナル
241 人が閲覧しました

When Should You Use a Common Table Expression (CTE) Instead of a Derived Table?

共通テーブル式 (CTE) はどのような場合に必要ですか?

すべてのシナリオでは派生テーブルで十分であるように見えますが、共通テーブル式 ( CTE) は、特定の状況下で明確な利点を提供します。

の制限事項派生テーブルと一時テーブル

データを複数回結合する必要があるシナリオを考えてみましょう。通常の SELECT ステートメントまたは派生テーブルを使用すると、インスタンスごとに結合構文が複製されることになり、コードの冗長性が高まります。ただし、CTE を使用すると、クエリ内で複数回参照できる再利用可能なテーブルを定義できます。

「Customers」テーブルがあり、次のことを行うとします。複数の注文をした顧客を検索します。

を使用するCTE:

WITH CustomerOrders AS (
    SELECT CustomerID, COUNT(*) AS OrderCount
    FROM Orders
    GROUP BY CustomerID
)

SELECT *
FROM Customers
JOIN CustomerOrders ON Customers.CustomerID = CustomerOrders.CustomerID
WHERE OrderCount > 1;
ログイン後にコピー

派生テーブルの使用:

(SELECT CustomerID, COUNT(*) AS OrderCount
FROM Orders
GROUP BY CustomerID) AS CustomerOrders

SELECT *
FROM Customers
JOIN CustomerOrders ON Customers.CustomerID = CustomerOrders.CustomerID
WHERE OrderCount > 1;
ログイン後にコピー

ご覧のとおり、CTE アプローチでは、派生テーブルのエイリアスを定義する必要がありません。 ("CustomerOrders") を 2 回。

その他の CTE利点

再利用性とは別に、CTE には追加の利点があります。

  • 再帰: CTE を使用して再帰を実装できるため、階層を横断する複雑なクエリが可能になります。データ構造体。
  • 一時ストレージ: CTE は、明示的な一時テーブルを作成することなく、中間クエリ結果の一時ストレージを提供します。
  • 派生列によるグループ化: CTE により、スカラー サブクエリまたは非決定的関数から派生した列によるグループ化が可能になりますが、派生関数では不可能ですテーブル。

以上が派生テーブルの代わりに共通テーブル式 (CTE) を使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート