SQL超基本

#SQLの基本文をまとめました。
railsの現場だけど、SQLを使う機会がたまにあるので、プロゲートをベースにまとめました。

###select文
カラムを指定する。
複数のカラムを指定するときは「,」で区切ればOK。

###from文
テーブルを指定する。

###where文
どこのレコードを抽出するか指定する。
取得するデータは""で囲む。　＊数値はそのまま入力

###Like演算子
「指定したカラムが〇〇を含むレコード」という条件となる。

***ワイルドカード***
どんな文字列にも一致することを指す記号です。
LIKE演算子では「％」をワイルドカードとして扱います。


下記の例のように書くと、
***purchasesテーブルのnameカラムに「プリン」を含むレコードを取り出します（前方一致、後方一致も全て）***

```
SELECT *　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　 ⇦ 「*」は全カラムのデータを取得するということ
FROM purchases
where name  like "%プリン%";    　　⇦ =が入らない。%%も””でくくる

//抽出例
プリン
牛乳プリン
プリンパフェ
```

＊前方一致
where name  like "プリン%"　　⇦ワイルドカード（どんな文字にも一致する記号）を後ろだけに入れると前方一致
＊後方一致
where name  like "%プリン"　⇦ワイルドカードを前だけに入れると後方一致になります

###Not　演算子
「〇〇を含まないデータ」や「〇〇に一致しないデータ」のような条件でデータを取得する時には、「否定」を意味する「NOT演算子」を用います。
演算子の前に「NOT」を置くことで、その条件を満たさないデータを取得することが可能です。

```
SELECT *　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　 ⇦ 「*」は全カラムのデータを取得するということ
FROM purchases
where not name like "%プリン%";    　　⇦ nameカラムに「プリン」を含まないカラムを抽出
```

###NULLのデータを取得
「カラム名 IS NULL」とすることで、「指定したカラムがNULLであるデータ」を取得することが可能です。


###AND演算子
AND演算子を使うと、WHERE文に複数の条件を指定することができます。

###OR演算子
OR演算子は、AND演算子と同様に、複数の条件を扱います。
「WHERE 条件１ OR 条件２」のようにすることで、条件１または条件２のどちらかを満たすデータを検索することができます。

###ORDER BY
データを並び替えるためには、「〜順に並べる」という意味の「ORDER BY」というSQLを用います。

```
SELECT *　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　 ⇦ 「*」は全カラムのデータを取得するというこ
FROM purchases
order by price desc　　　　　　　　　　　　⇦　「order by 並べたいカラム名 並べ方;」　
```
＊order by はwhere 文と併用可能
＊昇順：ASC
＊降順：DESC


###LIMIT
「最大で何件取得するか」を指定するためには、「制限する」という意味の「LIMIT」を用います。

###DISTINCT
DISTINCTを用いると、検索結果から重複するデータを除くことが可能です。「DISTINCT(カラム名)」とすることで、検索結果から指定したカラムの重複するデータを除くことができます。

```
Select distinct(name)　　　⇦nameカラムと抽出（重複させないで抽出）
From purchases;
```

###四則演算
SQLでは四則演算が可能（+, -, *, /）

```
Select name, price*1.08　　　⇦nameカラムと、priceカラムに1.08を掛けた値を抽出
From purchases;
```

##【関数】
ここからは集計関数（関数）の紹介。
集計関数とは、テーブルに保存されている数値データの合計、平均などを求めてくれるやつ。

###SUM関数
SQLで数値の合計を計算する場合は、SUMを用います。

```
Select sum(price)   ⇦これでpriceカラムの合計を抽出
From purchases;
Where character_name = “わんこ”;　　　⇦これでcharacter_nameは「わんこ」を指定。
```
⇨これで「わんこ」のpriceカラムの合計を抽出


###AVG関数
SQLで数値の平均を計算する場合は、AVGを用います。

```
Select avg(price)   ⇦これでpriceカラムの平均を抽出
From purchases;
Where character_name = “わんこ”;　　　⇦これでcharacter_nameは「わんこ」を指定。
```
⇨これで「わんこ」のpriceカラムの平均値を抽出
###COUNT関数
COUNT関数は、指定したカラムのデータの合計数を計算してくれる関数です。
「COUNT( カラム名 )」とすることで、指定したカラムのデータの数を計算します。

```
select count(*)
from purchases;
```
⇨purchasesテーブルの全レコード数（nullを含めて）を抽出

###MAX・MIN関数
SQLでMAXという関数を用いると、指定したカラムのデータの中から最大のデータを取得することができます。
同じく、MINと言う関数を用いることで、最小のデータを取得することができます。

```
Select name, max(price)   ⇦nameカラムの中で、一番priceが高かったものを抽出。,で区切るんやで。
From purchases;
```
###GROUP BY
GROUP BYを用いると、データをグループ化することができます。
「GROUP BY カラム名」とすることで、指定したカラムで、完全に同一のデータを持つレコードどうしが同じグループとなります。

グループ化するには、今までの集計関数を取得するSQLの語尾に「GROUP BY カラム名」を追加します。
集計関数により、各グループごとにデータが集計されます。

```
select sum(price)
from purchases
group by purchased_at;  ⇦purchased_at（日付）が同じレコードでグループ化される
```
⇨purchased_at（日付）が同じレコードでグループ化され、各グループごとにデータが集計される（今回はsumなのでグループごとの合計値が集計される）
*GROUP BYを用いる場合、SELECT文で使えるのは、GROUP BYに指定しているカラム名と、集計関数のみです。

###HAVING
GROUP BYでグループ化したデータを更に絞り込みたい場合には、HAVINGを用います。
「GROUP BY カラム名 HAVING 条件」のようにすることで、条件を満たすグループを取得することができます。
HAVINGはGROUP BYによってグループ化されたデータを検索対象とします。

```
select sum(price)
from purchases
group by purchased_at
having sum(price) > 1000 　　⇦グループ化された後から検索
```