100日後にエンジニアになるキミ - 37日目 - データベース - SQLの環境構築

本日もデータベース関連のお話です。

昨日のデータベースについてはこちら
[100日後にエンジニアになるキミ - 36日目 - データベース - データベースについて](https://qiita.com/otupy/items/7af17635d576677606dc)

## SQLについて

こちらは昨日と全く一緒の内容です。

SQLはリレーショナルデータベースを操作するための言語になりますが
SQLそのものはプログラム言語ではありません。

ただしプログラム内ではSQLを作成して
データベースにアクセスするのに利用されます。

SQLには沢山の亜種も存在しますが、一応標準規格があるようで
ここで主に取り扱うのは`標準SQL`の話になります。

SQLは操作用の`文`を書いてコマンドラインなどで実行することにより
データベースの様々な操作を執り行う事が出来るようになっています。

SQLの文法の種別は主に3つの系統に別れています。
`DDL`データ定義言語 (data definition language)
`DML`データ操作言語 (data manipulation language)
`DCL`データ制御言語 (data control language)

**データ定義言語(DDL)**

データベースそのものを定義するために最初に行うもので
主に下記のような`文`があります。
`CREATE` データベースオブジェクト（表、インデックス、制約など）の定義
`DROP` データベースオブジェクトの削除
`ALTER` データベースオブジェクトの定義変更

**データ操作言語(DML)**

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

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

**データ制御言語(DCL)**

データベースの利用に様々な制限をつけるための文法で
主に下記のような`文`があります。

`GRANT`特定のデータベース利用者に特定の作業を行う権限を与える
`REVOKE`特定のデータベース利用者からすでに与えた権限を剥奪する
`SET TRANSACTION`トランザクションモードの設定
`BEGIN`トランザクションの開始
`COMMIT`トランザクションの確定
`ROLLBACK`トランザクションの取り消し
`SAVEPOINT`任意にロールバック地点を設定する
`LOCK`表などの資源を占有する

## SQLiteのインストール

SQLを習得するには、まずSQLを動かせる環境を用意しないといけません。

SQLは一般的なリレーショナルデータベースであれば
何でも実行する事ができます。

今回はその中でも比較的インストールなどが簡単な
`SQLite`を用いることにします。

Macの人は最近のPCであればすでにインストールされていると思います。

ターミナルなどで確認してみましょう。
`sqlite3 -version`

<img width="1386" alt="スクリーンショット 2020-04-26 15.47.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/c0b561d4-2596-36db-0a05-ce827338a667.png">

version情報が出てきていたらインストール済みです。
出てこない場合はダウンロードしましょう。

**SQLiteのダウンロード**

まずは下記のページから`SQLite`をダウンロードしましょう。
[SQLite Download](https://www.sqlite.org/download.html)

ダウンロードしたらZIPファイルを解凍します。

中身は
<img width="203" alt="スクリーンショット 2020-04-26 15.53.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/6035e49a-852e-bd01-2707-63a829e688f3.png">

コマンドラインツール
アナライザーツール
DIFFツール
3つのファイルが入っていると思います。

Windowsの人はフォルダを移動させ`Cドライブ`の分かりやすいところに置きましょう。

**SQLの実行**

SQLの実行は`コマンドライン`かビューアーツールで行う事ができます。
Windowsの人は先ほどダウンロードしたフォルダまで移動する必要があります。

移動したらコマンドを実行してみましょう。
Macの人は特に気にせず、コマンド実行できると思います。

***SQLite3の起動***

`sqlite3 データベース名.db`

```
sqlite3 sample.db
```
<img width="702" alt="スクリーンショット 2020-04-26 16.10.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/a5db318a-e493-6fd8-8c46-83ae5876626d.png">

起動したら`sqlite>`と表示されます。
これで`SQLite`が起動できてデータベースの操作ができるようになりました。

初めはデータベースが存在しない状態なのですが
これでデータベースが作成されている状態です。

どこに出来たか確かめてみましょう。
`.database`

<img width="397" alt="スクリーンショット 2020-04-26 16.14.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/55314e15-083c-f743-fafe-8994c38ef683.png">

***SQLite3の終了***

`.quit`
`.exit`

これでコマンドラインに戻る事ができます。




## DB Browserのインストール

`SQLite`単体でもSQL実行できますが
データを見たりするのは専用のツールがあったほうがやりやすいです。
下記からビューアーツールをダウンロードしましょう。

[DB Browser](https://sqlitebrowser.org/dl/)

Macの人は`DB Browser for SQLiteのdmg`ファイルを使ってアプリケーションにコピー
<img width="497" alt="スクリーンショット 2020-04-26 15.53.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/eec9ded5-fac6-927e-8432-73afe3f5643f.png">



Windowsの人は`DB Browser for SQLite - .zip (no installer) for 64-bit Windows`から
ダウンロードして解凍しましょう。
<img width="338" alt="スクリーンショット 2020-04-26 16.00.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/c5e6fceb-e587-4bf6-1133-b6bf7021a40f.png">

**DB Browserの起動**

Macの人は`アプリケーション`内の`DB Browser`
Windowsの人は解凍したフォルダ内の`DB Browser for SQLite.exe`
をダブルクリックなどで起動します。

<img width="1105" alt="スクリーンショット 2020-04-26 16.28.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/1568bd5f-a9ce-85d8-b521-4184c97aeaf5.png">

**新しいデータベースの作成**

画面左上にある`New Database`をクリックします。

<img width="138" alt="スクリーンショット 2020-04-26 16.30.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/fda1bcaa-852a-c4dd-b414-39d4335bf6d4.png">

名前をつけて保存します。

<img width="432" alt="スクリーンショット 2020-04-26 16.31.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/ef9af236-9198-e2a0-f70a-e3fb28b5e859.png">

作成画面が開くので

<img width="639" alt="スクリーンショット 2020-04-26 16.34.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/f4c5f108-3f69-1e7d-e34a-46e7b50ba4bd.png">

テーブル名を`sample_table1`
カラムを追加するなら`Add field`をクリックして追加します。

ここでは
カラム名 : Type
`id`   : 'INTEGER'
`name` : `TEXT`
`num`  : `INTEGER`
を指定して`OK`をクリックします。

<img width="543" alt="スクリーンショット 2020-04-26 16.37.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/d25546c1-f670-d926-c8f0-7e3a4b946d34.png">

これでテーブルが作成されました。

データベース上では`CREATE`文を用いて作成をすることもできます。
`DB Browser`で作成した際にはどのような`CREATE`文で作成したのかが
`Schema`の部分に表示されます。

`Schema`スキーマはテーブルの構造を意味します。
どのようなカラムが存在するか、どのようにデータを格納できるのかなどは
このスキーマを見ることで確認する事ができます。

**データの格納**

テーブルへのデータの格納方法としては
`INSERT`文で格納する。
`CSV`ファイルなどを読み込んで格納する。
という方法があります。

***INSERT文で格納する方法***

下記を実行してみましょう。

```
BEGIN TRANSACTION;
INSERT INTO `sample_table1` VALUES ('1','鮎川なお','35');
INSERT INTO `sample_table1` VALUES ('2','及川なお','40');
INSERT INTO `sample_table1` VALUES ('3','菜々緒','30');
COMMIT;
```

実行方法は画面中央の`Execute SQL`をクリックして
エディター画面に移動して貼り付けます。

<img width="570" alt="スクリーンショット 2020-04-26 16.59.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/da28581f-c75d-8970-b970-494498884734.png">

貼り付けたら`右三角`の実行ボタンをクリックすると`INSERT`文が実行されます。
クリックするたび実行されてしまうので、1回だけにしましょう。

実行結果は`Browser Data`をクリックしてテーブルのデータを確認できます。

<img width="530" alt="スクリーンショット 2020-04-26 17.00.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/6814519c-1ddd-2022-27e9-fe403e21a4c0.png">

ちなみに上記SQL文の中で
`INSERT`の部分が投入するデータの部分で
`BEGIN TRANSACTION;`,`COMMIT;`はトランザクションの開始、終了を意味します。



`CREATE`文と`NSERT`文を同時に実行することもできます。

```
BEGIN TRANSACTION;
CREATE TABLE `sample_table2` (
 `id` INTEGER PRIMARY KEY AUTOINCREMENT,
 `name` TEXT NOT NULL,
 `old` INTEGER,
 `address` TEXT
);
INSERT INTO `sample_table2` VALUES ('1','加藤鷹','59','東京都');
INSERT INTO `sample_table2` VALUES ('2','しみけん','34','北海道');
INSERT INTO `sample_table2` VALUES ('3','チョコボール','53','東京都');
INSERT INTO `sample_table2` VALUES ('4','吉村卓','47','愛知県');
COMMIT;
```

<img width="544" alt="スクリーンショット 2020-04-26 17.03.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/a2f88da1-4e2d-2d56-6bd7-582e95f3f67b.png">

新しく`sample_table2`を作成してデータも投入します。
`Table`の部分でテーブル名を選択して切り替えます。

<img width="516" alt="スクリーンショット 2020-04-26 17.03.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/c94bd163-8190-c361-103d-e6431264eea0.png">


作成したテーブルは`Databese Structure`でテーブル一覧から確認できます。
テーブルを消すにはテーブル名を右クリックして`Delete Table`を選択します。
<img width="538" alt="スクリーンショット 2020-04-26 17.05.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/f6316269-7d35-2325-d442-0ab2e5d2ec8a.png">



***CSVファイルから格納する方法***

```sample2.csv
id,name,old,address
1,加藤鷹,59,東京都
2,しみけん,34,北海道
3,チョコボール,53,東京都
4,吉村卓,47,愛知県
```

上記をコピーしてCSVファイルを作成しましょう。
名前は`sample2.csv`とします。

読み込み方は`File`,`Import`から`Table from CSV file`を選択し
保存した`sammple2.csv`を選択します。

<img width="632" alt="スクリーンショット 2020-04-26 17.12.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/2e8dc48f-fd00-5817-c8c8-e92ddcc11569.png">


<img width="625" alt="スクリーンショット 2020-04-26 17.14.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/c1659916-e290-bfe1-6520-ebf99143d805.png">

`OK`をクリックすると`sample2`でテーブル作成がされると思います。

SQL文の実行にはデータが必要なので
テーブルを用意できるようにしておきましょう。

## まとめ

データベースをインストールしてSQL文が実行できる環境を整えておこう。
データベースに関しては`MySQL`など他にも沢山あるので
好きなデータベース環境を構築してみよう。


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

## 作者の情報
乙pyのHP：
http://www.otupy.net/

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

Twitter：
https://twitter.com/otupython