検索
tee / insights
LEARNING / SQLHOME
DATA → QUERY → RESULT

SQL文法マップ

SQLを“何を書くか”ではなく、“データがどう変わるか”から理解する。Snowflake / BigQuery を切り替えて、同じ概念を同じ順序で確認できる。

SQL方言

SQLの全体像

SELECTによる検索・分析の基本構文を扱います。目的か構文名で探し、同じ入力で結果を比較してください。

入力を作る

出所を決める

FROMは処理対象の表・結果を指定する。

名前を付ける / 入れ子にする

WITHとFROM内のsubqueryは、同じ中間結果を表現できる。

横につなぐ:どの行を残す?

一致 / 左を全部 / 両方を全部 / 全組み合わせ。

結合条件 / 結合後の除外

LEFT JOINでは条件を置く場所で残る行が変わる。

ネストした値を行へ

複合値の要素を取り出し、行数を増やす。

行を絞る

いつ絞る?

WHERE=集計前、HAVING=集計後、QUALIFY=window後。

行をまとめる

N行 → 1値

COUNTは何を数えるか、他の集約は何を求めるかで選ぶ。

集約単位 / 重複除去

GROUP BYは集約単位を作り、DISTINCTは選んだ列全体の重複を消す。

行数を保って分析する

まとめる / 各行に付ける

Aggregate=N行→グループごとに1行。Window=N行→N行。

順位:同点の扱い

連番 / 同順位で次を飛ばす / 同順位で次を詰める。

応用:行位置 / 同じ値の範囲

ROWSは行位置、RANGEは並べ替え値で範囲を決める。

値を作る

比較する / 条件を組む

比較はTRUE / FALSE / NULLを返し、論理演算で組み合わせる。

欠損を判定 / 補う

NULLとの等号比較は不明になる。IS NULLで判定する。

汎用分岐 / 二択の短縮形

CASEは複数条件、IF / IFFは二択を簡潔に書ける。

通常変換 / 安全に変換

変換できない値:CASTはエラー、安全版はNULL。

符号を外す / 丸める

ABSは絶対値、ROUNDは指定桁への丸め。

変換 / 抽出 / 結合

同じ文字列に4種類の操作を当てる。

現在 / 加算 / 差 / 粒度化

日付の作用は共通。引数の順番と単位の置き方が違う。

ネストした値 / SQLの文字列

見た目が7でも、返る型が違う。

集合を組み替える

縦につなぐ:重複をどう扱う?

同じA・Bで、重複を保持 / 除去 / 共通 / 左だけを比較する。

応用:列名で合わせる

位置が違っても、同じ列名を対応させる。

結果を整える

最後に整える

重複を消す → 並べる → 先頭を飛ばす → 件数を取る。