SQLの基本

#データベース
表のことを「テーブル」、行を「レコード」、列を「カラム」という
カラムごとにデータ型を設定する
数値データはクォーテーションで囲わない
日付データはクォーテーションで囲う
#データを取得する

```sample.sql
SELECT name,price #(カラム名)
FROM purchases; #(テーブル名)
#クエリ終了は;

#全てのカラムを取得する
SELECT *
FROM purchases;

#特定のデータを取得する
SELECT *
FROM purchases
WHERE category = '食費';
#比較演算子が利用できる（日付データでも利用可）

＃LIKE演算子
SELECT *
FROM purchases
WHERE category LIKE = '%税%';
#文字列の中に税を含むデータを取得する
#税で始まる文字列'税%'、税で終わる文字列'%税'

#NOT演算子
SELECT *
FROM purchases
WHERE NOT category LIKE = '%税%';
#税を含まないデータを取得する

#NULLデータを取得する
SELECT *
FROM purchases
WHERE category IS NULL;

#NULLではないデータを取得する
SELECT *
FROM purchases
WHERE category IS NOT NULL;

#AND演算子
SELECT *
FROM purchases
WHERE category = '食費'
AND name = '外食';

#OR演算子
SELECT *
FROM purchases
WHERE name = '食料品'
OR name = '外食';
```
#データを並び替える

```sample.sql
#ORDER BY
SELECT *
FROM purchases
WHERE category = '食費'
ORDER BY price DESC;
#ASC：ascend（昇順）、DESC：descend（降順）
```
#特定範囲のデータを取得する
```sample.sql
#LIMIT
SELECT *
FROM purchases
WHERE category = '食費'
ORDER BY price DESC
LIMIT 10;

#MAXとMIN
SELECT MAX(price)
FROM purchases
WHERE category = '食費';
#一番高額な食費のpriceを取得する
```
#特定のデータを取り除く

```sample.sql
#DISTINCT
SELECT DISTINCT(name)
FROM purchases;
#重複したデータを取り除く
```
#データを使って計算する

```sample.sql
#四則演算
SELECT name,price,price*1.08
FROM purchases;
#priceに1.08をかける

#SUM関数
SELECT　SUM(price)
FROM purchases
WHERE category = '食費';
#食費のpriceを合計する

#AVG関数
SELECT　AVG(price)
FROM purchases
WHERE category = '食費';
#食費のpriceの平均値を計算する

#COUNT関数
SELECT　COUNT(price)
FROM purchases
WHERE category = '外食';
#外食の回数を計算する
#priceが空欄（NULL）の場合はCOUNTされない
#COUNT(*)の場合はNULLもCOUNTされる
```

#データをグループ化する
```sample.sql
#GROUP BY
SELECT SUM(price),purchased_at
FROM purchases
GROUP BY purchased_at;
#日付ごとにpriceの合計を計算する（1日の支出がわかる）
#GROUP BYを使えるのは、GROUP BYに指定しているカラム名と集計関数のみ
#WHEREの後にGROUP BYを記述する

#複数のカラムをグループ化する
SELECT COUNT(price),purchased_at,category
FROM purchases
GROUP BY purchased_at,category;
#日付ごとに、categoryごとの買い物回数をまとめる

#HAVING
SELECT SUM(price),purchased_at
FROM purchases
WHERE category = '食費'
GROUP BY purchased_at
HAVING SUM(price) >= 1000;
#グループ化したデータを絞り込む
```
#サブクエリ（入れ子）

```sample.sql
#サブクエリ()
SELECT name
FROM purchases
WHERE price >(
  SELECT price
  FROM purchases
  WHERE　name = '焼肉'
);
#焼肉よりも高額な支出を抽出する
```
#カラム名を変更する
```sample.sql
#AS
SELECT price AS '焼肉料金'
FROM purchases
WHERE name = '焼肉';
#カラム名をpriceから焼肉料金に変更
```
#複数のテーブルからデータを取得する
主キーと外部キーでテーブルを紐づける

```sample.sql
#JOIN,LEFT JOIN
SELECT shops.name
FROM purchases
JOIN shops
ON purchases.shop_id = shops.id
WHERE purchases.name = '焼肉';
#purchasesテーブルの外部キーをshopsテーブルの主キーと紐づける
#焼肉のお店が一覧表示される
#LEFT JOINにすればidがNULLのデータも取得できる
#JOIN ONを使えば、複数のテーブルを結合できる
```

#タスクの順序
テーブルの指定(FROM)→結合（ON,JOIN）→取得条件(WHERE)→グループ化(GROUP BY)→関数(COUNT,SUM,AVG,MAX,MIN)→HAVING→検索（SELECT,DISTINCT）→順序(ORDER BY)→LIMIT

#データを追加する

```sample.sql
#INSERT
INSERT INTO purchases(name,price)
VALUES('焼肉',1000);
#AUTO INCREMENTによって、idとid番号は自動で挿入される
```
#データを更新する

```sample.sql
#UPDATE
UPDATE purchases
SET name = 'ハンバーグ',price = 800
WHERE id = 5;
```
#データを削除する

```sample.sql
#DELETE
DELETE FROM purchases
WHERE id = 5;
```
#取得・追加・更新・削除
取得：SELECT カラム名　FROM テーブル名;
追加：INSERT INTO テーブル名(カラムA,カラムB) VALUES(値１,値２);
更新：UPDATE テーブル名　SET　カラムA = 値１,カラムB = 値2 WHERE 条件;
削除：DELETE FROM テーブル名　WHERE 条件;