SQL 中級まとめ — JOIN・サブクエリ・ウィンドウ関数の全体像

この記事は、基礎から複雑なSQL,SQLチューニングまでSQLの実践的なスキルを1からマスターする「SQL入門講座の一部」です。
集計関数とGROUP BY、INNER/OUTER JOIN、サブクエリとEXISTS、UNION系の集合演算、CTE、ウィンドウ関数、トランザクションの中級14記事を、図と一覧表で横断整理します。

SQL 中級で学んだ文法の全体像

SQL 中級シリーズで扱った文法を、複数行をまとめる集計複数表をつなぐ結合とサブクエリ行を横断して計算するウィンドウ関数変更をまとめて確定するトランザクションの観点で 1 ページに整理します。

各記事へのリンクから、いつでも復習に戻れます。

SQL 中級でできることの全体像
まとめる集計 / GROUP BYテーブル複数表のデータつなぐJOIN / サブクエリ集合演算UNION / EXISTS / CTE横断計算ウィンドウ関数まとめて確定トランザクション集計結合集合横断更新
行を集計でまとめ、JOIN とサブクエリで複数表を組み合わせ、ウィンドウ関数で行を横断して計算し、トランザクションで変更をまとめて確定する。

集計でまとめ、複数表を結合する

集計関数とGROUP BY複数行を 1 つの値にまとめるJOIN複数の表を共通の列でつなぐ役割です。

下の図で、集計 2 記事と結合 3 記事の関係を整理します。

集計と結合の 5 記事
集計行をまとめる集計関数COUNT / SUM 等GROUP BYと HAVING結合表をつなぐINNER JOINと別名
集計関数で行をまとめ、GROUP BY でグループごとに集計する。JOIN は INNER / OUTER / 実務応用の 3 記事で表のつなぎ方を扱う。
分類記事学べること
集計集計関数COUNT / SUM / AVG / MIN / MAX の全体集計
集計GROUP BY と HAVINGグループ集計・HAVING・集計と WHERE の違い
結合INNER JOIN と別名別名・INNER JOIN・ON / USING
結合OUTER / CROSS / 自己結合LEFT / RIGHT / FULL・CROSS・自己結合
結合JOIN 応用JOIN と WHERE / ORDER BY / CASE の組み合わせ

サブクエリ・集合演算・ウィンドウ関数で組み立てる

サブクエリとEXISTSクエリの中に別のクエリを差し込む、集合演算とCTE結果同士を組み合わせて整理する、ウィンドウ関数は行を横断して順位や累積を計算する役割です。

下の図で、サブクエリ・EXISTS・集合演算・CTE と、ウィンドウ関数 3 記事の関係をそれぞれ整理します。

サブクエリ・集合演算・CTE の 5 記事
サブクエリクエリの中のクエリサブクエリ ①IN・WHERE 系サブクエリ ②FROM・SELECTEXISTS相関サブクエリ集合演算UNION 系CTE / WITH再帰 CTE
サブクエリ・EXISTS はクエリの中に別のクエリを差し込み、集合演算・CTE は結果同士を組み合わせて読みやすく整理する。
ウィンドウ関数とトランザクションの 4 記事
ウィンドウ関数行を横断計算OVERPARTITION BYORDER BYとフレーム順位・分析実行順序トランザクションまとめて確定
ウィンドウ関数は OVER / PARTITION・ORDER とフレーム・順位と分析関数の 3 段で扱う。トランザクションは変更をまとめて確定・取り消す。
分類記事学べること
サブクエリサブクエリ ① IN・WHERE 系スカラ・IN・WHERE 内集計・相関の導入
サブクエリサブクエリ ② FROM・SELECT派生表・SELECT 列サブクエリ・CREATE / INSERT SELECT
EXISTSEXISTS と相関サブクエリEXISTS / NOT EXISTS・NULL と EXISTS
集合演算UNION / INTERSECT / EXCEPT和・積・差の集合演算と UNION ALL
CTEWITH(CTE)と再帰 CTE可読性向上・再帰 CTE での階層展開
ウィンドウ ①OVER / PARTITION BY集計ウィンドウ・PARTITION BY
ウィンドウ ②ORDER BY とフレーム累積・フレーム指定(ROWS / RANGE)
ウィンドウ ③順位・分析関数と実行順序ROW_NUMBER / RANK / LAG / LEAD / NTILE・実行順序
トランザクショントランザクションとロックBEGIN / COMMIT / ROLLBACK・SAVEPOINT・AUTOCOMMIT

お疲れ様でした!

ここまでで、集計とGROUP BYJOINによる複数表の結合、サブクエリとEXISTS、集合演算とCTE、ウィンドウ関数、そしてトランザクションまでを横断的に整理しました。

これらを組み合わせれば、実務でよく書く分析・集計・レポート用クエリの大半が書けます。

気になる記事に戻って、手元のデータで実際に試してみてください。