[SQL]SQLまとめ

## はじめに
学習したことを自分用の参考書のようにまとめていきます。


## SQLとは
SQLは、データベースにデータを挿入したり、検索したりする際に利用します。
SQLを使うことで、データベースのなかにある数万・数百万件ものデータを効率的に操作することが可能になります。﻿

主なSQLの機能や用途には以下のものがあります
- データの検索
- データの追加
- データの更新
- データの削除
- テーブルの作成
- テーブルの削除
- テーブルの主キーの設定
- ユーザー権限の付与


## データベースとは
データベースは、組織や個人がデータを効果的かつ構造的に管理できるようにするための仕組みやシステムです。
データベースは、情報を保存、整理、検索、更新するための仕組みを提供し、様々なアプリケーションやプログラムがデータを取り扱う際の基盤となります。


## 用語

| 用語 | 説明 |
|:----|:----|
| クエリ  | SQLを実行したときに、データベースに送る命令文のこと  |
| 一意  | 一意とは意味や値が一つに確定していることという意味。データの一意とは、大量にあるデータから、1つの情報が特定できる状態を意味する。  |
| NULL  | 何もないという意味  |
| NOT NULL  | データベースの項目に付ける制限（制約）のひとつ。この制限のつけられたカラムにはNULL（空の値）は入れられない。  |
| AUTO_INCREMENT機能  | AUTO_INCREMENTとはそのまま訳すと自動増加という意味。カラムにAUTO_INCREMENTを指定すると、MySQLが自動的に一意の連続した番号を生成してくれる。|
| PRIMARY KEY(主キー)  | テーブルに登録されるレコード(行)の全体の中から、ひとつのデータを特定するためのもの。つまりPRIMARY KEY(主キー)を設定したカラムには同じ値を入れることができない。  |
| 予約語  | テーブル名やカラム名で使えない語句のこと  |


## 事前準備
今回は、MAMPに標準で搭載されているphpMyAdminを使い、ブラウザ上でMySQLの操作を行っていきます。

MAMPを起動して、ブラウザに下記のURLを入力するか、
http://localhost:8888/phpMyAdmin/

以下の手順で操作してください。
1 . WebStartをクリック
![2024-01-15 6.19.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2459296/a494cfa2-ff01-d429-cbac-5f1133cf3bf7.png)

2 . ヘッダーメニューにあるToolsをクリック
3 . phpMyAdminをクリック
![fa55069c-e516-958b-6877-35bb1a4897b5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2459296/4b17352d-01ea-b524-3256-eb70acb2f39c.png)

すると、下記のようなページが表示されます。
![ad21933b-b0a2-d251-423c-0369b9af72f2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2459296/1fa131ae-fe39-cb92-5d01-270862746faa.png)


## データベースを作成する
1. 新規作成をクリック
2. メニュータブのデータベースをクリック
3. データベース名を入力し、作成をクリック
4. 左側のメニューバーに作成したデータベースが追加されます

![スクリーンショット 2024-01-15 21.45.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2459296/a0cbfd2c-dcac-8c7c-20ed-d42e9b511934.png)


## "画面上の操作" でテーブルを作成する
1. 名前とカラム数を入力し、作成をクリック

![スクリーンショット 2024-01-15 21.58.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2459296/9e810c6c-ca28-f1b6-c8c4-4be6a2f4b032.png)

2\. カラムを入力し、保存するをクリック

![スクリーンショット 2024-01-15 22.08.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2459296/44de60ec-d139-2f8d-3d9f-9d6221d692c8.png)

:::note info
ここではテーブルの項目の名前やデータ型、長さ等を入力します。
:::


## データを登録する
1. データを登録したいテーブルをクリック
2. 挿入をクリック

![スクリーンショット 2024-01-15 23.27.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2459296/6c8821df-ab42-faa9-bfdf-249bf1a6b22e.png)

3\. 値にデータを入れ実行をクリックするとデータが登録できる

![スクリーンショット 2024-01-15 23.34.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2459296/bce7c04f-1aa7-c6fb-6da5-00883e792e22.png)


## "SQL" でテーブルを作成する
1\.メニュータブのSQLをクリック

![スクリーンショット 2024-01-15 23.59.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2459296/12f41061-c629-35c6-6a17-c6a49de02a26.png)

2\.このテキストエリアにSQLを書きます。

![スクリーンショット 2024-01-16 0.00.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2459296/ea26511c-ee52-d5dd-703c-29e754bb6b88.png)

"db_qiita"というデータベースを作成した後、下記コードを実行するとテーブルの作成できます。

```sql:
CREATE TABLE db_qiita.test02 (
  id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  code VARCHAR(255),
  occupation VARCHAR(255)
);
```

このようにコードを記述してテーブルを作成する以外にも、データ登録や取得など様々なことができます。

## SQLコマンド

### CREATE(テーブルを作成)
```sql
CREATE TABLE DB名.テーブル名 (
  column1 データ型(長さ) その他オプション,
  column2 データ型(長さ) その他オプション,
  column3 データ型(長さ) その他オプション,
  column4 データ型(長さ) その他オプション
);
```

### INSERT(データを登録)
```sql
INSERT INTO DB名.テーブル名 (カラム名1,カラム名2,カラム名3) VALUES(値１, 値２, 値３);
```

### SELECT(データを取得)
```sql
SELECT カラム名 FROM DB名.テーブル名;
```

### WHERE(条件検索)
```sql
SELECT * FROM DB名.テーブル名 WHERE 条件式;
```

| 演算子 | 説明 |
|:-:|:-:|
|=|等しい|
|＞|大きい|
|＜|小さい|
|＞=|大きい、もしくは等しい|
|＜=|小さい、もしくは等しい|
|!=|等しくない|
|＜＞|等しくない|
|AND|2つの条件を結合し、両方の条件が真|
|OR|2つの条件のうち、どちらか一方が真|
|NOT|式の結果を反転|
|BETWEEN a AND b|対象のフィールドが a と b の範囲内|
|IN|対象のフィールドが式の一覧の1つに一致|
|LIKE|対象のフィールドがパターンに一致|

### UPDATE(データの更新)
```sql
UPDATE DB名.テーブル名 SET 項目名=更新する値 WHERE 編集したいレコードを特定できる式;
```

### DELETE(データの削除)
```sql
DELETE FROM DB名.テーブル名 WHERE 条件式;
```

### DROP(テーブル、データベースの削除)
```sql
DROP TABLE DB名.テーブル名;
```

### IN(リストに一致するものを取得)
```sql
[対象の要素名] IN([値1,値2,値3…]);
```

### LIKE(文字列を部分一致検索)
```sql
SELECT 列名 FROM テーブル名 WHERE 列名 LIKE '検索文字';
```

### NOT(条件式などを否定)
```sql
SELECT カラム名 FROM テーブル名 WHERE カラム名 NOT LIKE '検索文字';
```

### iS NULL(nullのものを取得)
```sql
SELECT カラム名 FROM テーブル名 WHERE カラム名 is NULL;
```

### COUNT(数を数える関数)
```sql
SELECT COUNT(カラム名) FROM テーブル名;
```

### GROUP BY(カラムごとの集計)
```sql
SELECT カラム名、COUNT(カラム名) FROM db_test.test01 GROUP BY code;
```

### CASE(条件分岐)
```sql
SELECT
  *,
  CASE
    WHEN 条件式 THEN 条件を満たしたら表示する内容
    WHEN 条件式 THEN 条件を満たしたら表示する内容
    ELSE 条件を満たしていなかったら表示する内容
  END
FROM DB名.テーブル名;
```

### SUM(カラムの数値の合計値を取得)
```sql
SELECT SUM(カラム名) FROM テーブル名;
```

### AVG(カラムの数値の平均値を取得)
```sql
SELECT AVG(カラム名) FROM テーブル名;
```

### MAX,MIN(最大値、最小値を取得)
```sql
SELECT MAX(カラム名) FROM テーブル名;
```
```sql
SELECT MIN(カラム名) FROM テーブル名;
```

### ORDER BY(指定したカラムを対象に昇順(または降順)に並び替える)
```sql
SELECT カラム名 FROM テーブル名 ORDER BY カラム名 ASC;
```
```sql
SELECT カラム名 FROM テーブル名 ORDER BY カラム名 DESC;
```

### INNER JOIN
```sql
SELECT 取得するカラム FROM DB名.テーブルA INNER JOIN DB名.テーブルB 
 ON Aの対象カラム = Bの対象カラム;
```

### LEFT（RIGHT） JOIN
```sql
SELECT 取得するカラム FROM DB名.テーブルA LEFT(RIGHT) JOIN DB名.テーブルB 
 ON Aの対象カラム = Bの対象カラム;
```


## SQLの記述順序と実行順序
SQLはコードを記述順序と実行順序が決められています。
順序を意識して記述すると、SQLの処理が早くなったり、行いたい処理がスムーズに実行できることがあります。
意図しない動きがあった時はこの順序が関係しているかもしれません。

### 記述順序
1. SELECT
2. FROM
3. JOIN
4. WHERE
5. GROUP BY
6. WITH CUBE または WITH ROLLUP
7. HAVING
8. DISTINCT
9. ORDER BY
10. TOP

### 実行順序
1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. WITH CUBE または WITH ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10. ORDER BY
11. TOP



## さいごに
いかがだったでしょうか。

他にもいろいろな記事を書いているのでぜひ読んでいただけたら嬉しいです。