目次
CTEとは何ですか?
CTEの基本的な構文
CTEとサブクエリの違い
再帰CTEを使用して、階層データを処理します
実用的なアプリケーションの提案
ホームページ データベース mysql チュートリアル mysql 8で一般的なテーブル式(CTE)を使用します

mysql 8で一般的なテーブル式(CTE)を使用します

Jul 12, 2025 am 02:23 AM
mysql CTE

CTESは、複雑なクエリの読みやすさとメンテナンスを改善するために、MySQL 8.0によって導入された機能です。 1。CTEは一時的な結果セットであり、現在のクエリでのみ有効で、明確な構造があり、重複する参照をサポートしています。 2。サブQueriesと比較して、CTEはより読みやすく、再利用可能であり、再帰をサポートします。 3.再帰CTEは、初期クエリと再帰部品を含める必要がある組織構造などの階層データを処理できます。 4.提案の使用には、虐待の回避、仕様の命名、パフォーマンス、デバッグ方法に焦点を当てます。

mysql 8で一般的なテーブル式(CTE)を使用します

CTES(一般的なテーブル式)は、MySQL 8.0によって導入された非常に実用的な機能です。複雑なクエリをより明確にし、読みやすくします。ネストされたサブクリーリーまたはマルチレイヤー派生テーブルを使用してSQLを書いたことがある場合、CTEを使用した後、構造が爽やかで維持が容易であることがわかります。

mysql 8で一般的なテーブル式(CTE)を使用します

CTEとは何ですか?

CTEは、クエリで定義し、通常のテーブルを使用するなどの後続のクエリでそれを参照できる一時的な結果セットです。現在のクエリ実行中にのみ存在し、データベースに存在しません。

mysql 8で一般的なテーブル式(CTE)を使用します

簡単な例を見てみましょう。各部門で最高の給与を持っている従業員を見つけたいです。 CTEを使用しない場合は、論理的に回避される複数のサブQuerieをネストする必要がある場合があります。 CTEを使用する場合、最初に「各部門の最大給与」を中間結果として使用し、次に従業員のテーブルを関連付けてデータをフィルタリングできます。

 Maxsalariesと
    max_salaryとしてdepartment_id、max(給与)を選択します
    従業員から
    Group by Department_id
))
eを選択します。*
従業員からe
Maxsalaries MSに参加してください
on e.department_id = ms.department_idおよびe.salary = ms.max_salary;

これはより直感的に見えますか?また、1つのクエリで複数のCTEを定義し、オンデマンドの組み合わせで使用することもできます。

mysql 8で一般的なテーブル式(CTE)を使用します

CTEの基本的な構文

CTEの構造は非常に明確で、 WITHから非常に明確であり、この一時的な結果セットに与えられた名前は、ブラケットのクエリステートメントが続きます。その後、このクエリ範囲内でこの名前を繰り返し使用できます。

フォーマットは次のとおりです。

 with cte_name [(columle_list)] as(
     - クエリステートメント)
 - 後続でCTEを使用するメインクエリ

いくつかのメモ:

  • CTEは列名を持つことができ、指定されていない場合は、デフォルトでクエリから自動的に取得されます。
  • 複数のCTEがある場合、それらはコンマで分離し、順番に定義できます。
  • CTEは現在のクエリでのみ有効であり、クエリ間で再利用することはできません。

CTEとサブクエリの違い

多くの人が尋ねます:CTEとサブクエリの違いは何ですか?実際、機能性は非常に似ていますが、CTEには読みやすさと再利用性がより多くの利点があります。

比較項目サブクエリCTE
構造的な明快さネストされているときは読みにくい分割して理解しやすい
再利用不便な、コピーして貼り付ける必要があります複数回引用することができます
再帰サポートサポートされていません再帰CTEをサポートする(後で説明する)

たとえば、複数の場所で「特定の月の販売概要」を使用したい場合は、サブクリーリーで何度も書く必要があります。また、一度定義する限り、CTEで複数回呼び出すことができます。


再帰CTEを使用して、階層データを処理します

MySQL 8.0は再帰CTEもサポートしています。これは、組織構造、分類ディレクトリ、コメント返信チェーンなどのツリー構造または階層データの処理に非常に適しています。

従業員IDとスーペリアマネージャーIDを含むemployeesテーブルがあるとします。特定のリーダーの下ですべての部下を見つけたい場合、再帰CTEは役に立ちます。

サンプルコードは次のとおりです。

再帰的な部下で(
    employee_id、manager_id、nameを選択します
    従業員から
    WHERE MANAGLE_ID = 100-初期条件:直接従属組合をすべて見つけてください

    E.EmployeE_ID、E.Manager_Id、E.Nameを選択します
    従業員からe
    内側の結合e.manager_id = s.employee_idの部下
))
select * from subordinates;

このコードは最初に直接の部下を選択し、次にレコードがなくなるまでこれらの人々の部下を常に再帰的に見つけます。再帰CTEのコアは2つの部分です。

  • 初期クエリ(非再帰部分)
  • UNION ALLを介して接続された再帰部分

再帰は無期限に継続できないことに注意する必要があります。そうしないと、エラーが報告されます。 cte_max_recursion_depthを設定することにより、最大再帰深さを制御できます。


実用的なアプリケーションの提案

CTEは強力ですが、使用するときはいくつかのヒントと予防策があります。

  • CTEを悪用しないでください:すべてのシナリオがCTEの使用に適しているわけではありません。簡単なクエリでCTEに分割する必要はありません。これにより、複雑さが向上します。
  • 命名仕様:CTEに、 TopCustomersRecentOrdersなどの意味のある名前を付けて、他の人があなたのロジックを理解するのを助けることができます。
  • パフォーマンスの問題:CTEは必ずしもパフォーマンスを改善するわけではなく、論理的なパッケージのようなものです。パフォーマンスに敏感な場合は、インデックスおよび実行計画と組み合わせて分析することをお勧めします。
  • デバッグ方法:CTEの中間結果を確認したいですか? cteを直接書き込みSELECT * FROM cte_name簡単にデバッグすることができます。

基本的にそれだけです。 CTEは、特に複雑なクエリを書くときは、最新のSQLの非常に実用的な部分であり、アイデアを明確にし、読みやすさを向上させるのに役立ちます。最初は慣れていないかもしれませんが、始めたら、SQLを書く経験が本当に異なることがわかります。

以上がmysql 8で一般的なテーブル式(CTE)を使用しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP環境で環境変数を設定する方法PHPランニング環境変数の追加の説明 PHP環境で環境変数を設定する方法PHPランニング環境変数の追加の説明 Jul 25, 2025 pm 08:33 PM

PHPに環境変数を設定する3つの主な方法があります。1。Php.iniを介したグローバル構成。 2。Webサーバー(apacheのsetenvやnginxのfastcgi_paramなど)を通過しました。 3。Phpスクリプトでcutenv()関数を使用します。その中でも、PHP.iniはグローバルおよび頻繁に変更された構成に適しており、Webサーバーの構成は分離する必要があるシナリオに適しており、Putenv()は一時的な変数に適しています。永続性ポリシーには、構成ファイル(PHP.INIまたはWebサーバーの構成など)、.ENVファイルにはDoTENVライブラリがロードされ、CI/CDプロセスの変数の動的注入が含まれます。セキュリティ管理に敏感な情報は、ハードコーディングを避ける必要があり、使用することをお勧めします。

PHPコンテナを自動構造をサポートする方法は? PHP環境の継続的に統合されたCI構成方法 PHPコンテナを自動構造をサポートする方法は? PHP環境の継続的に統合されたCI構成方法 Jul 25, 2025 pm 08:54 PM

PHPコンテナが自動構造をサポートできるようにするために、コアは連続統合(CI)プロセスの構成にあります。 1. DockerFileを使用して、基本的な画像、拡張インストール、依存関係管理、許可設定など、PHP環境を定義します。 2. GitlabciなどのCI/CDツールを構成し、.gitlab-ci.ymlファイルを介してビルド、テスト、展開段階を定義して、自動構造、テスト、展開を実現します。 3. phpunitなどのテストフレームワークを統合して、コードの変更後にテストが自動的に実行されることを確認します。 4. Kubernetesなどの自動展開戦略を使用して、deployment.yamlファイルを介して展開構成を定義します。 5. DockerFileを最適化し、マルチステージ構造を採用します

独立したPHPタスクコンテナ環境を構築する方法。 PHPタイムタイムスクリプトを実行するためにコンテナを構成する方法 独立したPHPタスクコンテナ環境を構築する方法。 PHPタイムタイムスクリプトを実行するためにコンテナを構成する方法 Jul 25, 2025 pm 07:27 PM

独立したPHPタスクコンテナ環境の構築は、Dockerを通じて実装できます。特定の手順は次のとおりです。1。基礎としてDockerとDockerMomposeをインストールします。 2。DockerFileおよびCrontabファイルを保存するための独立したディレクトリを作成します。 3. dockerfileを書き込み、phpcli環境を定義し、cronと必要な拡張機能をインストールします。 4.タイミングタスクを定義するためにCrontabファイルを書きます。 5。Docker-Compose.ymlマウントスクリプトディレクトリを作成し、環境変数を構成します。 6.コンテナを起動し、ログを確認します。 Webコンテナでタイミングタスクを実行するのと比較して、独立したコンテナには、リソースの分離、純粋な環境、強力な安定性、容易な拡張の利点があります。ロギングとエラーキャプチャを確保するため

PHP PHPログコレクションおよび分析ツールを使用してログ管理システムを構築する方法 PHP PHPログコレクションおよび分析ツールを使用してログ管理システムを構築する方法 Jul 25, 2025 pm 08:48 PM

[ロギング方法]を選択します。初期段階では、PHPに組み込みERROR_LOG()を使用できます。プロジェクトが拡張されたら、モノログなどの成熟したライブラリに切り替え、複数のハンドラーとログレベルをサポートし、ログにタイムスタンプ、レベル、ファイルのライン番号、エラーの詳細が含まれていることを確認してください。 2。設計ストレージ構造:少量のログをファイルに保存できます。多数のログがある場合は、多数の分析がある場合はデータベースを選択します。 mysql/postgresqlを使用して構造化されたデータを使用します。 ElasticSearch Kibanaは、半構造化/非構造化に推奨されます。同時に、バックアップと定期的なクリーニング戦略のために策定されています。 3。開発および分析インターフェイス:検索、フィルタリング、集約、視覚化機能が必要です。キバナに直接統合するか、PHPフレームワークチャートライブラリを使用して、インターフェイスのシンプルさと容易さに焦点を当てて自己開発を開発することができます。

mysql/laravelのリレーショナルデータの高度な条件付きクエリとフィルタリング mysql/laravelのリレーショナルデータの高度な条件付きクエリとフィルタリング Jul 25, 2025 pm 08:39 PM

この記事の目的は、eloquentormを使用して、Laravelフレームワークで関連データの高度な条件付きクエリとフィルタリングを実行して、データベース関係に「条件付き接続」を実装する必要性を解決する方法を探ることを目的としています。この記事では、MySQLにおける外部キーの実際の役割を明確にし、閉鎖関数と組み合わせたメソッドと雄弁さを介して角質除去協会モデルに条項を適用する方法を詳細に説明します。

財務データストレージのためにMySQLを最適化します 財務データストレージのためにMySQLを最適化します Jul 27, 2025 am 02:06 AM

MySQLは金融システムに最適化する必要があります。1。財務データを使用して、10進数タイプを使用した精度を確保する必要があり、タイムゾーンの問題を回避するために時間分野でデータを使用する必要があります。 2。インデックス設計は合理的でなければなりません。フィールドの頻繁な更新を避けてインデックスを構築し、クエリの順序でインデックスを組み合わせ、定期的に役に立たないインデックスをクリーンにします。 3.トランザクションを使用して、一貫性を確保し、トランザクションの粒度を制御し、長いトランザクションを回避し、それに埋め込まれた非コア操作を回避し、ビジネスに基づいて適切な分離レベルを選択します。 4。時間ごとに履歴データを分割し、コールドデータをアーカイブし、圧縮テーブルを使用してクエリ効率を向上させ、ストレージを最適化します。

雲の移行のためのMySQLデータベースコストベネフィット分析 雲の移行のためのMySQLデータベースコストベネフィット分析 Jul 26, 2025 am 03:32 AM

MySQLがクラウドに移動する価値があるかどうかは、特定の使用シナリオに依存します。あなたのビジネスを迅速に立ち上げる必要がある場合は、弾力的に拡張し、運用とメンテナンスを簡素化し、従量制のモデルを受け入れることができます。ただし、データベースが長期間安定している場合、レイテンシに敏感な、またはコンプライアンスの制限が制限されている場合、費用対効果が高い場合があります。コストを管理するためのキーには、適切なベンダーとパッケージの選択、リソースの合理的な構成、予約されたインスタンスの利用、バックアップログの管理、クエリパフォーマンスの最適化が含まれます。

リアルタイムのデータフィード用にMySQLを最適化します リアルタイムのデータフィード用にMySQLを最適化します Jul 26, 2025 am 05:41 AM

tooptimizemysqlforreal-timedatafeeds、firstchoosetheinnodbstorageentionsionsionsionsionsionsionsionsionsionsdrow-fortemporarydata、およびpartitiontime-seriesdatabytime.second、indextrategivallyは、dexestowhere、

See all articles