SQL のサブクエリと CTE を使う
サブクエリは、クエリの中に別のクエリをネストします。CTE(WITH 句)は名前付きで読みやすいサブクエリを提供します。それぞれの使い分けを学びましょう。
- 1
サブクエリは SELECT、FROM、WHERE、HAVING 句の中に現れます。種類:スカラー (1 つの値を返す)、行 (1 行)、テーブル (複数行) です。CTE (Common Table Expressions、WITH name AS (...)) は名前付きサブクエリで、可読性が向上し、再帰も可能です。可読性のため、入れ子のサブクエリよりも CTE を優先してください。ほとんどのデータベースで、オプティマイザーは両者を同等に扱います。
- 2 SQL フォーマッター →
サブクエリや CTE を含むクエリを整形します。サブクエリでは、整形により入れ子の深さが分かります。CTE では、各名前付きクエリが明確になります。CTE 構文を優先してください。深く入れ子になったサブクエリより読みやすく、デバッグしやすいです。
- 3 sql-format → word-count
SQL 整形ワークフローを使って、複数の CTE やサブクエリを含む複雑なクエリを整形します。理解しやすく保守しやすい、整然としたコメント付き SQL が得られます。
よくある質問
- CTE とサブクエリはどちらがよいですか?
- CTE は (名前付きで、順次記述でき、フラットなため) 可読性が高く、再帰も可能です。サブクエリは単純なケースではよりコンパクトです。性能は通常同じです。オプティマイザーが CTE をインラインに展開します。複雑なクエリや再帰には CTE を、単純な 1 回限りのケースにはサブクエリを使ってください。
- 再帰 CTE とは何ですか?
- 自分自身を参照する CTE で、階層データ (組織図、ファイルシステム、グラフ探索) に使われます。構造:WITH RECURSIVE name AS (基底ケース UNION ALL 再帰ステップ)。再帰は、新しい行が生成されなくなるまで続きます。PostgreSQL、MySQL 8 以降、SQLite、SQL Server でサポートされています。
このタスクを解決するワークフロー
SQL フォーマットと単語統計によるドキュメント化
SQL クエリを整形し、その後フォーマットされた出力を単語統計で分析する。 パイプライン
Lorem Ipsum 生成と単語カウント
Lorem Ipsum テキストを生成し、その後単語をカウントする。 パイプライン
SQL フォーマットと構文検証
SQL クエリをフォーマットし、その後構文を検証する。 パイプライン
テキストのクリーンアップ後の単語統計分析
テキストをトリムして正規化し、その後単語/文字/行統計を計算する。 パイプライン
行の重複除去と単語カウント
行をソートして重複を除去し、その後残りの単語をカウントして簡単な在庫を得る。 パイプライン
テキストの小文字化と単語カウント
テキストのケースを正規化し、その後分析のために単語をカウントする。 パイプライン
URL 除去と単語カウント
テキストから URL を除去し、その後残りの単語をカウントする。 パイプライン
Title Case と単語カウント
Title Case に変換し、その後単語をカウントする。 パイプライン
テキストの折り返しと単語カウント
長いテキストを折り返し、その後結果の単語をカウントする。 パイプライン
関連ツール
SQL フォーマッター
Beautify or minify SQL queries online. Uppercase keywords, indent clauses, or compress to a single line。無料、プライベート、100%クライアントサイド。 ツール
JSON バリデーター
Validate JSON and pinpoint syntax errors by line and column。無料、プライベート、100%クライアントサイド。 ツール
テーブル編集&変換ツール
Edit tabular data and export to CSV/JSON/HTML/Markdown。無料、プライベート、100%クライアントサイド。 ツール