過去3週間コツコツ勉強していたSQLのSELECT文について、現状理解をまとめておこうと思います。中級者以上の方から見るとBE動詞の種類を羅列している様なもので低レベル極まり無いとは思いますが、生暖かい目で見て頂けますと幸いです。Kellogg1年目の秋~冬学期は必修科目がメインとなり、授業でAnalyticsに触れ始めるのは最速でも一年の春学期となりますが、未来の自分へのタイムカプセルのつもりでここまでの理解を残しておきます。
【過去記事】
記述の順番
SQLの構文は順番通りに記述しないと動かない為、以下順序で記述する必要がある。
- SELECT(列名)
- FROM(テーブル名)
- WHERE(条件)
- GROUP BY(集計キー)/HAVING(集計結果を用いた条件)
- ORDER BY(ソートキー)
- LIMIT(数)/OFFSET(開始列)
1.SELECT(列名)
何の列を取得するかを指定する。
- *を指定すると、FROMで指定したテーブルの全てを対象とする
- 集合関数を指定し、実行結果を出力できる。例:SUM、COUNT、AVG、MIN/MAX
※GROUP BYと組み合わせると、GROUP BYで指定する集計キー毎の結果を出力できるのが大変便利。 - SELECT DISTINCTでユニークな値のみを表示
- CASE式を使うと、判定結果を出力できる。
CASE WHEN (条件1) THEN (結果1)
WHEN (条件2) THEN (結果2)
ELSE (結果3)
END - (出力対象)ASで、AS以下で列名を指定できる
2.FROM(テーブル名)
どのテーブルからデータを取得するか指定する。
- SELECTを使うことも可能
(SELECT…FROM…)で記述した実行結果をデータの取得元として指定できる。 - 複数DBからデータを取得する場合はJOINを用いる
以下例では、JOINで追加するDB、キーとする項目をON以下に記述し、キーがマッチした項目のみを使用(テーブルAを全て残す場合はLEFT JOIN、テーブルBをすべて残す場合はRIGHT JOINを使う)。
FROM (テーブルA)
JOIN (テーブルB)ON a =b
3.WHERE(条件)
取得する条件を指定して、抽出データを絞り込む。
- 文字や日付を条件にするときは””で囲む必要がある
- 条件をつなげる場合はAND/ORが使える
- 一定レンジの間のみを出力したいときは、BETWEEN a AND bの様に、BETWEEN/ANDで指定可能
- 複数項目との条件一致を確認する場合はINが使える
対象値 IN(A, B, …)とすれば、リストアップした値と一致しているかを条件として設定可能。WHERE a IN (SELECT a FROM…)とすると、SELECT以下の実行結果(値は複数)のどれかに一致する項目、という指定が出来る。 - LIKEは曖昧検索。ワイルドカードである%を伴って、LIKE '%a%'等の条件指定が出来る(こちらの例では、「aを含む」が条件)
4.GROUP BY(集計キー)/HAVING(集計結果を用いた条件)
SELECT文で記述した集計のキーを、GROUP BYで指定できる(例えば、SELECT SUM() GROUP BY【性別】とすると、性別ごとの合計を表示)。HAVINGでは、集計結果を条件として設定できる(WHEREは集計前の個別項目の制限をかける)。
5.ORDER BY(ソートキー)
出力結果のソートに用いるキーを指定できる。DESCをつけると、降順に出来る(デフォルトは昇順)。
6.LIMIT(数)/OFFSET(開始列)
出力結果の表示列数を指定。OFFSETで開始列を指定可能。