100日後にエンジニアになるキミ - 39日目 - データベース - SQLの基礎2

本日はSQL文についてです。

昨日のはこちら

[100日後にエンジニアになるキミ - 38日目 - データベース - SQLの基礎1]
(https://qiita.com/otupy/items/a9e952ad53e828f25600)


## データ操作言語(DML)について

おそらく一番用いられる文法はDMLで
主に下記のような文があります。

`INSERT` : 行データもしくは表データの挿入
`UPDATE` : 表を更新
`DELETE` : 表から特定行の削除
`SELECT` : 表データの検索、結果集合の取り出し

`SELECT`文が最もボリュームが多く
一番用いられる文法かと思いますが
今日は置いておいて残りの3つについてご紹介します。

`INSERT`,`UPDATE`,`DELETE`は
データの追加、更新、削除を行うための文法です。

**INSERT**

テーブルに対してデータを追加するには`INSERT`文を用います。
データを追加するには、あらかじめテーブルが存在していないといけません。

データは1行分のデータを投入する形になります。

書き方：
`INSERT INTO テーブル名 VALUES(値1, 値2, ...);`

テーブルがない場合は作成しておきましょう。

テーブルがない方はこちらの`CREATE`文で作成できます。
`Excute SQL`から`右三角ボタン`で実行

```sql
CREATE TABLE `sample_table3` (
 `id` INTEGER PRIMARY KEY AUTOINCREMENT,
 `name` TEXT NOT NULL,
 `old` INTEGER,
 `address` TEXT
);
```

<img width="495" alt="スクリーンショット 2020-04-28 18.15.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/78ac2a19-6658-b092-76ae-81e1eb4648b1.png">

`Browse Data`からのぞいてみるとデータは無く空っぽのテーブルです。

<img width="517" alt="スクリーンショット 2020-04-28 18.15.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/6da460f3-c586-7d83-bb4d-4e270a2891e3.png">

`INSERT`文でデータを追加します。

```sql
BEGIN TRANSACTION;
INSERT INTO `sample_table3` VALUES ('1','加藤鷹','59','東京都');
INSERT INTO `sample_table3` VALUES ('2','しみけん','34','北海道');
INSERT INTO `sample_table3` VALUES ('3','チョコボール','53','東京都');
INSERT INTO `sample_table3` VALUES ('4','吉村卓','47','愛知県');
COMMIT;
```

<img width="474" alt="スクリーンショット 2020-04-28 18.18.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/429efddf-c666-6028-a366-5401193ceb5e.png">

データを確認してみると

<img width="509" alt="スクリーンショット 2020-04-28 18.18.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/37daf7a3-5c0a-f20b-d31f-a8ff6f5e669d.png">

データが追加されている事が確認できます。

**UPDATE**

テーブルに格納されているデータを新しい値に更新するには`UPDATE`文を使います。

書き方：
`UPDATE テーブル名 SET カラム名1 = 値1, カラム名2 = 値2, ... WHERE 条件式;`

先ほど`INSERT`したテーブルに対して更新をかけてみましょう。

```sql
UPDATE sample_table3 SET old = 61 WHERE name = '加藤鷹';
```

実行して結果を確認してみると

<img width="509" alt="スクリーンショット 2020-04-28 18.24.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/f2ae7af9-ef2e-f27c-957c-fc5069b9001c.png">

指定した条件でデータが変わっています。

***条件式***

更新対象は`WHERE`区の条件式を使ってデータを絞り込んで行きます。
条件式は`カラム 演算子 値`のような形で指定をします。

`name = '加藤鷹'`
`old = 61`

nameカラムのような日本語が含まれている`TEXT`型のデータを指定する場合は
`'`で文字列を囲んで上げる必要があります。
数値型のカラムの場合はそのまま数値を入力します。
`=`演算子は値がその値と同じ値であるという意味です。
演算子についてはまた後日詳しくやっていきたいと思います。

`UPDATE`文では`WHERE`区で条件指定をしない場合
`SET`で指定したカラムの値が全て変わってしまいます。

```sql
UPDATE sample_table3 SET old = 72;
```

<img width="481" alt="スクリーンショット 2020-04-28 18.32.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/7de795af-55fe-18a6-849a-a3c8a44c8475.png">

データ更新をする場合は条件指定を忘れないように注意しましょう。

**DELETE**

テーブルからデータを削除するには DELETE 文を使います。

書き方：
`DELETE FROM テーブル名 WHERE 条件式;`

削除の対象となるデータを`WHERE`句の条件式を使って指定します。
条件式に一致するデータが複数の場合は、複数のデータがまとめて削除されることになります。 
`WHERE`句を省略した場合はテーブルに含まれる全てのデータが削除されます。

```sql
DELETE FROM sample_table3 WHERE address = '北海道';
```

<img width="509" alt="スクリーンショット 2020-04-28 18.36.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/4e5d5b8d-0c24-d79c-bc93-1b8a40c123ab.png">

実行すると条件式に該当する行が削除されています。

条件式を書かない場合は全ての行が削除されます。

```sql
DELETE FROM sample_table3;
```

<img width="499" alt="スクリーンショット 2020-04-28 18.37.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/1011e8d0-e41a-ca50-3b2e-9cbf23db6a1b.png">

条件式を書かないと全部消えてしまうので注意が必要です。
`DELETE`,`UPDATE`を用いる際は条件式を確認してから行いましょう。



## まとめ

データの投入、更新、削除など一連のデータベース操作に慣れておこう。

君がエンジニアになるまであと61日

## 作者の情報

乙pyのHP：
http://www.otupy.net/

Youtube：
https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw

Twitter：
https://twitter.com/otupython