SQL SELECT基礎 目次

  • 33
    いいね
  • 0
    コメント

見ての通り、絶賛書きかけだよ

弊社では職種を問わずSQL(SELECT文)を書いて、分析や簡単な自動化を行ったりする機会があります。
ただ、SQLは(構文や概念が独特という意味で)難しいので、SELECT文に限って、段階を踏んできっちり説明する資料が欲しいと思い、つらつらと書いていきます。

この記事は、データベースを作っていく立場ではなく、既に存在するデータベースを参照して何か情報を得ようとする人に向けて書いています。入門書だとたいてい、環境構築にそれなりのページが割かれるのですが、そこは社内的に必要ないので省略します。

MySQLで使える構文をベースに解説していきます。

はじめに

  • SELECT文とは、データの集合を加工し、別のデータの集合を作っていく構文です。
  • 変数やループは使わず、集合全体を、くっつけ、削り取り、集約し、またくっつけ、…というふうに書きます。このイメージを掴むことがとても大事
    • 本職のプログラマでもSQL苦手という人がいます
    • 手続き型言語とはだいぶ違う思考回路が必要なので、覚えるとプログラマとしての幅が広がるかもしれません。
  • SQLの構文キモいって言ってる偉い人(C. J. Date)もいるので、難しいと思うのはあなたがアホだからではありません。SQLが悪い。SQLが悪いということにしていいので、諦めないでね。

目次(予定)

基礎編

  1. データと表
  2. スカラ値いろいろ
  3. その場で表を作る
  4. 表の加工
    1. 列を減らす (project 射影)
    2. 行を減らす (WHERE句、restrict 制限)
    3. 縦方向にくっ付ける (UNION 和)
    4. 横方向にくっ付ける (NATURAL JOIN 自然結合)
    5. 左右でバランスが悪い場合その1 (LEFT OUTER JOIN 外部結合)
    6. 左右でバランスが悪い場合その2 (INNER JOIN 内部結合)
    7. 考えうる全ての組み合わせを作る (CROSS JOIN デカルト積)
    8. 並び替え (ORDER BY)
    9. 件数制限 (LIMIT)
  5. 加工した表を更に加工する (サブクエリ)
  6. 1x1の表 (スカラサブクエリ)
  7. 区切って集約 (GROUP BY)
  8. 相関サブクエリ (EXISTS)
  9. スカラ値の加工
    1. CASE式
    2. CONCATによる文字列結合

雑学編

  1. NULLの理解
  2. 真偽値
  3. SELECT文の実行順序
  4. MySQLの日時の扱い

組み合わせ編

  1. 最大/最小の取得 (ORDER BYとLIMITの組み合わせ)
  2. 時間ごとの集計 (GROUP BYと集約関数)
  3. 抽選 (ORDER BY RAND)
  4. 表と表の比較

現実世界編

  1. パフォーマンスチューニングの考え方
  2. インデックスの基礎
  3. OR条件をUNIONにする
  4. 平らにする
  5. サブクエリの大きさを気にする