SQL学習入門 | INSERT/SELECT/DELETE/UPDATE　基本構文を学習してみた

※学習中のため間違っている箇所があるかもしれません。
# はじめに
前回まででデータベース、テーブルの作成が完了しました。
そのため今回は作成したテーブルを使用し、データの操作を行っていきます。

SQL基本構文として`INSERT`/`SELECT`/`DELETE`/`UPDATE`があります。
それぞれの役割、意味を正しく理解していきましょう。

# INSERT
まず学習していくのが`INSERT`です。
INSERT文はテーブルにレコードを挿入する際に使用する構文です。
挿入したいデータとどのテーブルに挿入するかを構文で記載し、実行します。

### レコードの挿入
レコードを挿入していきましょう。
まずは基本構文を記載します。

#### `INSERT`構文
```
INSERT INTO テーブル名 (カラム1, カラム2, カラム3) values(データ1, データ2, データ3)
```
各カラムに対応するデータをvalues()内に記載していくことでデータを挿入することができます。

#### 実際のSQL
```sql
INSERT INTO users (name, email, role, created_by, updated_at, delete_flg) 
values ('taro', 'example@example.com', 'USER', 'SYSTEM', NULL, false);
```

前回作成したテーブルにデータを挿入していきましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155918/68767d65-e92b-41cd-a3e0-efd3665a0968.png)

レコードが一件挿入されているのがわかります。

実際の挿入データを見る前にまずはSELECT文の学習していきましょう

## SELECT
`SELECT`文はテーブルからデータを取得する際に使用する構文です。
取得したいカラム、テーブルを記載することで必要なデータのみ取得することができます。

#### `SELECT`構文
```
--構文1
SELECT * FROM テーブル名;
--構文2
SELECT カラム1, カラム2 FROM テーブル名;
```
※「*」はすべてのカラムを対象としていることを表しています。

#### 実際のSQL
```sql
SELECT * FROM users;
```

実際に動かしてみてみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155918/ca9a26fb-888b-40bc-89ec-f3a5f1326d9e.png)

先ほど挿入したデータが表示された場合、成功です。
※created_atは記載していませんが、テーブル定義でdefaultの値が設定されているため、自動で値が設定されます。

ここまでで登録→取得の流れがわかりました。

次でDELETE/UPDATEの構文を確認していきましょう。

## UPDATE
`UPDATE`文は既に存在しているデータを別のデータで上書きするために存在します。
更新したいテーブルとカラムを指定することで、特定の値のみ更新することができます。

#### `UPDATE`構文
```
UPDATE テーブル名 SET カラム名=値, カラム名2=値;
```

#### 実際のSQL
```sql
UPDATE users SET name='jiro', email='jiro@example.com';
```

実際に動かしてみましょう
※SQL実行時、以下のように「WHERE区の存在しない分です」と警告が表示されます
今回は気にせずに実行しましょう。
※WHERE区を省略すると**全レコードが対象となります**。
今回は学習目的なので全件更新していますが、実務では**必ずWHERE区を使用しましょう**。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155918/05355813-ffb0-49bf-8ee2-278c115a1b91.png)

更新完了メッセージが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155918/a51d3351-95a0-400d-a8d5-d2ffacda73ba.png)

#### `SELECT`文で結果を確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155918/5a4a8051-34f1-4f3c-9b91-813f162577c1.png)

nameの値が「jiro」に、emailの値が「jiro@example.com」に変更されているのがわかります。

このように一部のデータを変更する際に`UPDATE`文を使用することが多いので覚えておきましょう。

## DELETE
`DELETE文`はテーブルからレコードを削除する際に使用します。
削除したいテーブルを選択することでレコードを削除できます。

#### `DELETE`構文
```
DELETE FROM テーブル名;
```

#### 実際のSQL
```sql
DELETE FROM users;
```

`DELETE`文も`UPDATE`文同様に警告が出ますが、今回は気にせず行きましょう。
※WHERE区を省略すると**全レコードが対象となります**。
今回は学習目的なので全件更新していますが、実務では**必ずWHERE区を使用しましょう**。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155918/24abd863-c5d3-44d7-bf9c-604b11e9980c.png)

削除完了メッセージが表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155918/70aa079d-87f0-4d36-8d6c-c497e427aefa.png)


#### `SELECT`文で結果を確認
先ほど挿入したデータが消えているのが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155918/c7700e8b-9797-4a5e-96e5-b109292af106.png)


## まとめ
今回はSQLの基本構文である以下の4つを学習しました：

- `INSERT`：データの追加
- `SELECT`：データの取得
- `UPDATE`：データの更新
- `DELETE`：データの削除

これらは実務でも非常によく使う基本構文です。  
確実に使いこなせるようにしておきましょう！

次回は`WHERE`、`ORDER BY`、`LIMIT`、`LIKE`
**「検索条件」に関する構文を学習していく予定です。**

引き続き、SQLの基礎力を高める学習記事を投稿していきます！

[前：SQL学習入門 | SQLでデータベース作成、テーブル作成を行ってみた](https://qiita.com/suica1010/items/8b7a1f75cdf0140fa62c)
[次：SQL学習入門 | WHERE/ORDER BY/GROUP BY/HAVING　基本構文を学習してみた](https://qiita.com/suica1010/items/17ea0f22e1b6750984f1)

参考文献
[【22日間で学ぶ】SQL文、分析関数、テーブル設計、SQLチューニングまでMySQLで覚えるSQL実践講座](https://www.udemy.com/course/3sqlmysql/)