SQL 超基礎まとめ

#SQLの超基礎　まとめ　（データ分析用）

SQL初心者の自分用まとめメモです。
データ分析を目指した記事になっているので、データベースへの書き込みではなく、データベースからの取得が主になっております。
また、とにかくSQLの書き方を羅列したような記事になっております。

この記事では、以下のような変数名を使用して、書いています。

##４つの基本構文
SQLは４つの基本構文からなっている。
1.　取得 SELECT
2.　挿入 INSERT INTO
3.　更新 UPDATE ~ SET
4.　削除 DELETE 

まずは、これらを簡単にまとめます。

###取得 SELECT
「SELECT 列名 FROM データベース名;」という形でデータを取得してきます。処理の終了を意味する「;」を最後につけてあげます。

```sql:SQL.sql
SELECT column_name
FROM database_name;
```

ちなみに、"*"　を使用すると、すべての列名の情報を取ってくることができます。また、","区切りで、二つ以上のカラムを繋げて取得できます。

```sql:SQL.sql
SELECT *
FROM database_name;
```

```sql:SQL.sql
SELECT column_name1, column_name2, column_name3
FROM database_name;
```
###挿入 INSERT

```sql:insert.sql
INSERT INTO database_name (id,column_name1,column_name2)
VALUES(10,'value1','value2')
```
また、AUTO INCREMENT機能が使われている場合は、idカラムを設定せずとも、自動で割り振られます。
###更新 SET
```sql:set.sql
UPDATE database_name
SET column_name1 = 'value1',column_name2 = 'value2' #指定カラムを新値にする
WHERE id = 3 #更新するレコードをWHEREで指定する。
```
###削除 DELETE
```sql:delete.sql
DELETE FROM database_name
WHERE id = 3;
#削除するレコードidをWHEREで指定する。
#指定しないと、テーブル内の全てのレコードが削除されてしまう。
```

##WHERE：検索機能
###文字列条件（完全一致）
列情報をすべて取得できたが、すべての情報は使用しない。ある条件に一致する情報だけ欲しい時にWHEREを使う。
文字の一致は、以下の通り。'hogehoge'には、一致して欲しい条件をかく

```sql:where.sql
SELECT column_name
FROM database_name
WHERE column_name = ‘hogehoge’;
```

###部分一致
部分一致しているデータを取得したい場合は、'%'を使う。
また、'='を使うのではなく、'LIKE'を使用する。
・後方一致

```sql:Kouhouicchi.sql
SELECT column_name
FROM database_name
WHERE column_name LIKE  ‘hoge%’;
```
・前方一致

```sql:Zenpouicchi.sql
SELECT column_name
FROM database_name
WHERE column_name LIKE  ‘%hoge’;
```
・部分一致

```sql:Bubunnicchi.sql
SELECT column_name
FROM database_name
WHERE column_name LIKE  ‘%hoge%’;
```

###数値条件
先ほどは、文字列条件をhogehogeで指定したが、数値に関する条件も記入可能。
数値では、"=",">","<","<=",">="で指定が可能。

```sql:SQL.sql
SELECT column_name
FROM database_name
WHERE column_name >= 10;
```
AND OR などを使えば、さらに範囲などを指定できる。

```sql:SQL.sql
SELECT column_name
FROM database_name
WHERE column_name <= 10 AND column_name >=5;
```
##検索結果の加工
###ORDER BY 並び替え
検索結果を並び替える。
昇順：ASC
降順：DESC
に並び替える
```sql:order.sql
SELECT *
FROM database_name
ORDER BY column_name ASC
```
###DISTINCT 重複除外
コラム中の重複データを除外して、取得してくれる

```sql:distinct.sql
SELECT DISTINCT column_name
FROM database_name;
```

##NULLの扱い方
データベース内に空のセル（数値が何も入っていない）'NULL’がある時がある。
NULLを取得したい場合は、'='を使うのではなく、ISで取得する。

```sql:Null.sql
SELECT column_name
FROM database_name
WHERE column_name IS NULL;
```

##四則演算
・足し算 : +
・引き算 : -
・掛け算 : *
・割り算 : /
ができる。四則演算した値を表示できる。
以下では、1.08を数値に掛け算している。

```sql:enzan.sql
SELECT column_name * 1.08
FROM database_name
WHERE column_name = ‘hogehoge’
```

##集計と計数

###SUM()関数
取得したデータ（列）に対して、合計を取るSUM()関数
WHEREを使えば、一致した部分の合計だけ取得できる。

```sql:sum.sql
SELECT SUM(column_name1)
FROM database_name
WHERE column_name2 = ‘hogehoge’;
```

###AVG（）関数
取得したデータ（列）に対して、平均を取るAVG()関数
SUM()と同様に、WHEREWO使えば、一致した部分の合計だけ取得できる。

```sql:avg.sql
SELECT AVG(column_name1)
FROM database_name
WHERE column_name2 = ‘hogehoge’;
```

###MAX()関数,MIN()関数
取得したデータ（列）の最大値(MAX())または、最小値(MIN())を取得できる。
もちろんWHEREで条件を絞った上で、使用可能

```sql:max.sql
SELECT MAX(column_name1)
FROM database_name
WHERE column_name2 = ‘hogehoge’;
```

###COUNT()
取得した列中のデータの個数を数える。
WHEREを使用すれば、条件に当てはまったデータの個数をカウントできる。

```sql:count.sql
SELECT MAX(column_name)
FROM database_name
WHERE column_name = ‘hogehoge’;
```

##GROUP BY()
グループごとにデータを集計した（平均・合計を出したいなど）の時に使用する。
・グループごとの合計を取得

```sql:groupby.sql
SELECT SUM(column_name1),column_name2
FROM database_name
GROUP BY column_name2;
```

もちろんWHEREを使用して、条件を絞った上でGROUP BYも使用できる。
ただし、WHEREはGROUP BYの前に入れる。
・以下は、column_name1, column_name2をそれぞれグループにして、
それぞれのグループのデータの数をCOUNT()を用いて取得している。

```sql:where_groupby.sql
SELECT COUNT(*), column_name1, column_name2
FROM database_name
WHERE column_name3 = ‘hogehoge’
GROUP BY column_name1, column_name2;
```

##HAVING()
グループ化したデータをさらに絞り込みたい場合、HAVING（）を用いる。

・以下では、グループ化し、グループのcolumn_name1の合計が1000以上になるグループのみを取得するようになっている。

```sql:HAVING.sql
SELECT SUM(column_name1), column_name2
FROM database_name
GROUP BY column_name2
HAVING SUM(column_name) > 1000;
```

グループ化した後のデータを絞り込む際に、WHEREではなく、HAVINGを用いるのは、SQLの各コマンドが、以下の順番で実行されるためとなっております。

1. 検索 ： WHERE
2. グループ化 ： GROUP BY
3. 関数 ： SUM, AVG, MAX, MIN, COUNT
4. HAVING ： HAVING

*ただいま、内容追加中です。