SQLの超基礎 まとめ (データ分析用)
SQL初心者の自分用まとめメモです。
データ分析を目指した記事になっているので、データベースへの書き込みではなく、データベースからの取得が主になっております。
また、とにかくSQLの書き方を羅列したような記事になっております。
この記事では、以下のような変数名を使用して、書いています。
4つの基本構文
SQLは4つの基本構文からなっている。
1. 取得 SELECT
2. 挿入 INSERT INTO
3. 更新 UPDATE ~ SET
4. 削除 DELETE
まずは、これらを簡単にまとめます。
取得 SELECT
「SELECT 列名 FROM データベース名;」という形でデータを取得してきます。処理の終了を意味する「;」を最後につけてあげます。
SELECT column_name
FROM database_name;
ちなみに、"*" を使用すると、すべての列名の情報を取ってくることができます。また、","区切りで、二つ以上のカラムを繋げて取得できます。
SELECT *
FROM database_name;
SELECT column_name1, column_name2, column_name3
FROM database_name;
挿入 INSERT
INSERT INTO database_name (id,column_name1,column_name2)
VALUES(10,'value1','value2')
また、AUTO INCREMENT機能が使われている場合は、idカラムを設定せずとも、自動で割り振られます。
更新 SET
UPDATE database_name
SET column_name1 = 'value1',column_name2 = 'value2' #指定カラムを新値にする
WHERE id = 3 #更新するレコードをWHEREで指定する。
削除 DELETE
DELETE FROM database_name
WHERE id = 3;
# 削除するレコードidをWHEREで指定する。
# 指定しないと、テーブル内の全てのレコードが削除されてしまう。
WHERE:検索機能
文字列条件(完全一致)
列情報をすべて取得できたが、すべての情報は使用しない。ある条件に一致する情報だけ欲しい時にWHEREを使う。
文字の一致は、以下の通り。'hogehoge'には、一致して欲しい条件をかく
SELECT column_name
FROM database_name
WHERE column_name = ‘hogehoge’;
部分一致
部分一致しているデータを取得したい場合は、'%'を使う。
また、'='を使うのではなく、'LIKE'を使用する。
・後方一致
SELECT column_name
FROM database_name
WHERE column_name LIKE ‘hoge%’;
・前方一致
SELECT column_name
FROM database_name
WHERE column_name LIKE ‘%hoge’;
・部分一致
SELECT column_name
FROM database_name
WHERE column_name LIKE ‘%hoge%’;
数値条件
先ほどは、文字列条件をhogehogeで指定したが、数値に関する条件も記入可能。
数値では、"=",">","<","<=",">="で指定が可能。
SELECT column_name
FROM database_name
WHERE column_name >= 10;
AND OR などを使えば、さらに範囲などを指定できる。
SELECT column_name
FROM database_name
WHERE column_name <= 10 AND column_name >=5;
検索結果の加工
ORDER BY 並び替え
検索結果を並び替える。
昇順:ASC
降順:DESC
に並び替える
SELECT *
FROM database_name
ORDER BY column_name ASC
DISTINCT 重複除外
コラム中の重複データを除外して、取得してくれる
SELECT DISTINCT column_name
FROM database_name;
NULLの扱い方
データベース内に空のセル(数値が何も入っていない)'NULL’がある時がある。
NULLを取得したい場合は、'='を使うのではなく、ISで取得する。
SELECT column_name
FROM database_name
WHERE column_name IS NULL;
四則演算
・足し算 : +
・引き算 : -
・掛け算 : *
・割り算 : /
ができる。四則演算した値を表示できる。
以下では、1.08を数値に掛け算している。
SELECT column_name * 1.08
FROM database_name
WHERE column_name = ‘hogehoge’
集計と計数
SUM()関数
取得したデータ(列)に対して、合計を取るSUM()関数
WHEREを使えば、一致した部分の合計だけ取得できる。
SELECT SUM(column_name1)
FROM database_name
WHERE column_name2 = ‘hogehoge’;
AVG()関数
取得したデータ(列)に対して、平均を取るAVG()関数
SUM()と同様に、WHEREWO使えば、一致した部分の合計だけ取得できる。
SELECT AVG(column_name1)
FROM database_name
WHERE column_name2 = ‘hogehoge’;
MAX()関数,MIN()関数
取得したデータ(列)の最大値(MAX())または、最小値(MIN())を取得できる。
もちろんWHEREで条件を絞った上で、使用可能
SELECT MAX(column_name1)
FROM database_name
WHERE column_name2 = ‘hogehoge’;
COUNT()
取得した列中のデータの個数を数える。
WHEREを使用すれば、条件に当てはまったデータの個数をカウントできる。
SELECT MAX(column_name)
FROM database_name
WHERE column_name = ‘hogehoge’;
GROUP BY()
グループごとにデータを集計した(平均・合計を出したいなど)の時に使用する。
・グループごとの合計を取得
SELECT SUM(column_name1),column_name2
FROM database_name
GROUP BY column_name2;
もちろんWHEREを使用して、条件を絞った上でGROUP BYも使用できる。
ただし、WHEREはGROUP BYの前に入れる。
・以下は、column_name1, column_name2をそれぞれグループにして、
それぞれのグループのデータの数をCOUNT()を用いて取得している。
SELECT COUNT(*), column_name1, column_name2
FROM database_name
WHERE column_name3 = ‘hogehoge’
GROUP BY column_name1, column_name2;
HAVING()
グループ化したデータをさらに絞り込みたい場合、HAVING()を用いる。
・以下では、グループ化し、グループのcolumn_name1の合計が1000以上になるグループのみを取得するようになっている。
SELECT SUM(column_name1), column_name2
FROM database_name
GROUP BY column_name2
HAVING SUM(column_name) > 1000;
グループ化した後のデータを絞り込む際に、WHEREではなく、HAVINGを用いるのは、SQLの各コマンドが、以下の順番で実行されるためとなっております。
- 検索 : WHERE
- グループ化 : GROUP BY
- 関数 : SUM, AVG, MAX, MIN, COUNT
- HAVING : HAVING
*ただいま、内容追加中です。