プロゲートでSQLクエリ文を学んだので自分なりに簡単にまとめてみる
RailsではSQL文を自動で発行してくれていたので、基本的なSQL知識をつけるために学びました。
参考程度にお願いします。誤字等あったらすみません。
**題目一覧 これを全文検索(Macならcommand+F)すれば早いかもです!!**
⭐️データ取得系⭐️ データの取得 取得したデータのカラム名を別名にする データの取得 複数 データの取得 カラム全部 条件付き 条件付き NOT 複数条件付き 複数条件付き どちらかを満たす場合 "なまえ"を含むデータの取得 前方一致 後方一致 NULLデータの取得 NULLじゃないデータの取得 取得データの並び替え ASC(昇順):小さい順 DESC(降順):大きい順 重複を省く カラムの四則演算 カラムの合計取得 SUM関数 カラムの平均取得 AVG関数 カラムの合計"数"取得 COUNT関数 カラムの最小値取得 MIN関数 カラムの最大値取得 MAX関数 グループ化 複数カラムのグループ化 WHEREとGROUP BY グループ化したデータの更なる絞り込み サブクエリの追加 ⭐️テーブル同士の紐つけ と テーブルを分けるメリット⭐️ テーブルの結合 複数テーブルでのカラムの指定 複数テーブルでのカラムの指定 WHERE NULLの取得をする LEFT JOIN 3つ以上のJOIN ⭐️データの追加編集削除系⭐️ データの追加 データの変更 データの削除(作成終わり後の私)
↑あ…画面右側にメニューが出来るんですね…。そっちのがいいかもです。苦笑
SQL文の処理順番
SQL文にも処理順序があるそうなのでイメージしながらやるとやりやすいです。
実行内容 | SQL文 |
---|---|
テーブル指定 | FROM |
結合 | ON・JOIN |
取得条件 | WHERE |
グループ化 | GROUP BY |
関数 | COUNT・SUM・AVG・MAX・MIN |
更に絞り込み | HAVING |
検索 | SELECT・DISTINCT |
順序 | ORDER BY |
取得数指定 | LIMIT |
##⭐️データ取得系⭐️
データの取得
SELECT カラム名
FROM テーブル名
;
取得したデータのカラム名を別名にする
SELECT カラム名 AS "別名"
FROM テーブル名
;
データの取得 複数
SELECT カラム名①, カラム名②
FROM テーブル名
;
データの取得 カラム全部
SELECT *
FROM テーブル名
;
条件付き
SELECT カラム名
FROM テーブル名
WHERE 条件 細かい演算子は本記事では書きません。
;
条件付き NOT
SELECT カラム名
FROM テーブル名
WHERE NOT 条件 細かい演算子は本記事では書きません。
;
複数条件付き
SELECT カラム名
FROM テーブル名
WHERE 条件 細かい演算子は本記事では書きません。
AND 条件②
;
複数条件付き どちらかを満たす場合
SELECT カラム名
FROM テーブル名
WHERE 条件 細かい演算子は本記事では書きません。
OR 条件②
;
"なまえ"を含むデータの取得
SELECT カラム名
FROM テーブル名
WHERE カラム名 LIKE "%なまえ%"
前方一致
WHERE カラム名 LIKE "名前%"
後方一致
WHERE カラム名 LIKE "%名前"
###NULLデータの取得
SELECT カラム名
FROM テーブル名
WHERE カラム名 IS NULL
;
###NULLじゃないデータの取得
SELECT カラム名
FROM テーブル名
WHERE カラム名 IS NOT NULL
;
###取得データの並び替え ASC(昇順):小さい順 DESC(降順):大きい順
SELECT カラム名
FROM テーブル名
ORDER BY カラム名 DESC or ASC
;
必要な分のデータの取得
SELECT カラム名
FROM テーブル名
LIMIT 数
;
重複を省く
SELECT DISTINCT(カラム名)
FROM テーブル名
;
カラムの四則演算
SELECT カラム名 * 1.08 など
FROM テーブル名
;
カラムの合計取得 SUM関数
SELECT SUM(カラム名)
FROM テーブル名
;
カラムの平均取得 AVG関数
SELECT AVG(カラム名)
FROM テーブル名
;
カラムの合計"数"取得 COUNT関数
SELECT COUNT(カラム名)
FROM テーブル名
;
カラムの最小値取得 MIN関数
SELECT MIN(カラム名)
FROM テーブル名
;
カラムの最大値取得 MAX関数
SELECT MAX(カラム名)
FROM テーブル名
;
グループ化 ※SELECTで使えるのはGROUP BY に指定しているカラム名と集計関数のみ
SELECT カラム名
FROM テーブル名
GROUP BY カラム名
;
複数カラムのグループ化
SELECT カラム名①, カラム名②
FROM テーブル名
GROUP BY カラム名①, カラム名②
;
WHEREとGROUP BY ※WHERE→GROUP BY の順で書く事
SELECT カラム名
FROM テーブル名
WHERE 条件
GROUP BY カラム名
;
グループ化したデータの更なる絞り込み ※WHERE→GROUP BY→HAVING の順で書く事
SELECT カラム名
FROM テーブル名
WHERE 条件
GROUP BY カラム名
HAVING 条件
;
サブクエリの追加 ※追加されたサブクエリが実行されてからクエリが実行されるそうです
SELECT カラム名
FROM テーブル名
WHERE 条件 (
SELECT カラム名
FROM テーブル名
WHERE 条件
);
⭐️テーブル同士の紐つけ と テーブルを分けるメリット⭐️
テーブルA
id | 名前 | 別テーブルのid(外部キー) |
---|---|---|
1 | あいつ | 2 |
2 | こいつ | 1 |
3 | そいつ | 3 |
4 | どいつ | 1 |
テーブルB
id(主キー) | 名前 | 寒さランキング |
---|---|---|
1 | 南極 | 1 |
2 | 北極 | 2? |
3 | 栃木 | 3 |
2つのテーブルを繋ぐための主キーと外部キー
DBの正規化で重要ですね。
テーブルを分けるとデータの管理がしやすくなります。
例えば、上のテーブルBの寒さランキング(笑)がテーブルAに全部まとまっているとしましょう。
①「こいつ」さんと「どいつ」さんは「南極」に住んでる
②もし「南極」の「寒さランキング」が変わったら2箇所のデータを変更しないといけない
これが2つのテーブルに分かれていることにより、「寒さランキング」が変わっても1箇所のデータ変更で済みます。
テーブルの結合 ※結合した場合のクエリの実行順序 FROM→JOIN→ON→SELECT ※NULLは取得しない
SELECT カラム名
FROM テーブルA
JOIN テーブルB
ON テーブルA.カラム名(外部キー) = テーブルB.カラム名(主キー)
;
複数テーブルでのカラムの指定
SELECT テーブル名A.カラム名, テーブル名B.カラム名
FROM テーブルA
JOIN テーブルB
ON テーブルA.カラム名(外部キー) = テーブルB.カラム名(主キー)
;
複数テーブルでのカラムの指定 WHERE
SELECT テーブル名A.カラム名, テーブル名B.カラム名
FROM テーブルA
JOIN テーブルB
ON テーブルA.カラム名(外部キー) = テーブルB.カラム名(主キー)
WHERE テーブル名A.カラム名 条件式など
;
NULLの取得をする LEFT JOIN
SELECT テーブル名A.カラム名, テーブル名B.カラム名
FROM テーブルA
LEFT JOIN テーブルB
ON テーブルA.カラム名(外部キー) = テーブルB.カラム名(主キー)
;
3つ以上のJOIN
SELECT テーブル名A.カラム名, テーブル名B.カラム名, テーブル名.カラム名
FROM テーブルA
JOIN テーブルB
ON テーブルA.カラム名(外部キー) = テーブルB.カラム名(主キー)
LEFT JOIN テーブルC
ON テーブルA.カラム名(外部キー) = テーブルC.カラム名(主キー)
;
##⭐️データの追加編集削除系⭐️
データの追加 ※idカラムはAUTO INCREMENT機能で自動で値が割り当てられるらしい
INSERT INTO テーブル名(カラム名A、カラム名B,カラム名C)
VALUE(カラムAにはいる値、 カラムBにはいる値、 カラムCにはいる値)
select * from テーブル名;
データの変更 ※WHEREのid指定を忘れると全て変わってしまいます。
UPDATE テーブル名
SET カラム名=変更したい値, カラム名B=変更したい値
WHERE id = 削除したいレコードのID
;
データの削除 ※WHEREのid指定を忘れると全て消えてしまいます。
DELETE FROM テーブル名
WHERE id = 削除したいレコードのID
;
以上です。