sqlを勉強していて気になった演算子、句やどの文にどの句が順番で来ているかをまとめたい
4大命令の構文は何が大切かをイメージしろ
4大命令の構文でどの場所にどの句があってどこにテーブル名を書くのか度々忘れてしまうことが多くあった。そのため自分なりに忘れない方法を考えた。それは、4大命令は何を1番の目的としているかである。当たり前かもしれないが、それを考えるだけで構文の把握がしやすくなる。命令で何をしたいのかを考えると、命令文のあとにどの順番で記述していけばいいかが導き出せる。
SELECT文
SELECT文の1番の目的は、検索である。列名を取り出すことがいちばんの目的であるため、命令文の後は列名を記述する。その後、どこから取ってきたいのかを明確にするためFROMでテーブル名を記述し、どの条件の列名を取り出したいかでWHERE句と続いていく。
SELECT 列名 FROM テーブル名 WHERE 条件
INSERT文
INSERT文の1番の目的は、挿入である。挿入は、どのテーブルまたは列名に対して何を挿入するかが大切であるため、命令文の後は、テーブル名を記述する。ただし、ある特定の列名に対してだけ値を追加したいときはテーブル名の後に列名を記述する。その後、何をその列名に対して、挿入を指定するため、VALUESのあとに挿入したい値を記述していく。
INSERT INTO テーブル名 (列名1, 列名2, …) VALUES (値1, 値2, …)
*ただし、全列に挿入する場合はテーブル名の後の列名は省略可能
UPDATE文
UPDATE文の1番の目的は、更新である。更新は、どのデータをどう変えるかが大切になる。この命令文は少し考え方がずれてしまうが、SET句があり、そこに新しい値をセットする
UPDATE テーブル名 SET 列名 = 新しい値 WHERE 条件
HAVING句
今までHAVINGがどのように使われているかWEHEREとは何が違うのか明確には理解していなかった。
HAVING句は、集計関数を使って得られた集計結果に対して絞りこむための操作である。
つまり、集計結果に対するWHERE句なのである。
グループ集計が行われる流れは、
1.WHERE句によって行を絞り込む
↓
2.グループごとに分類される
↓
3.各グループが集計される。SELECT句によって列を絞り込む
という流れである。そのため集計関数が評価されるのはWHERE句よりも遅いため集計関数を使って絞り込みたい時にHAVING句を使う。
集計関数一覧
| 集計関数 | 処理内容 |
|---|---|
| SUM | 合計値を返す |
| MAX | 最大値を返す |
| MIN | 最小値を返す |
| AVG | 平均値を返す |
| COUNT | 検索結果の行数を返す |
COUNT(*)を使う時は、GROUP BY 列名を使ってグループ集計すると列名ごとの行数を取得できる。その際、SELECT句で指定した列名をGROUP BY句でも指定しておく。そうしないとデータが凸凹になってしまい、n行m列のデータにならないため。
INNER JOINとUNIONの違い
INNER JOINでは共通のキーを結びつけて横に結合していくが、UNIONは縦に積み上げていくイメージ。つまりINNER JOINは、既存の行に新しい項目が追加されるが、UNIONは新たな行がテーブルに追加されると言うことである。