[MySQL]MySQLコマンド入門

## なんで書いたの?

自分の勉強のために書きました。
MySQLコマンド使うたびに調べてる状態なので、記事にしとこと思って書きました。

## 環境
- ローカルにmysqlを入れてやってます
- MySQL8.0
- MySQLWorkbench <- これはなくてもok

バージョンが何か調べてみる。
mysqlコマンドを入力して確認してみます。コマンドが使えない人は,mysqlをインストールしましょう。

```shell
$ mysql -V
mysql  Ver 8.0.19 for osx10.15 on x86_64 (Homebrew)
```
## 対象読者
- MySQLコマンドわからないって人

## データベースを作成する

### ログインする

ログインしようとするとパスワードが求められるので入力します。今回はrootでやっていきます。

```shell
$ mysql -u root -p
password:

~省略~

mysql >
```

### データベースを追加する

データベースを追加する前に一度作ってあるデータベースを確認します。もしすでに同じ名前のデータベースが登録されていたら、`already exists(もう作ってあるよ！！作れない！！)`といわれてしまいます。

```sql

mysql > SHOW databases;

+-------------+
| Databases   |
+-------------+
| hogehoge_db |
| foobar_db   |
+-------------+
```

こんな感じでデータベースの存在を確認出来ます。

確認出来たのでデータベースを追加します。
ポケモンのデータベースを作ります。

```sql

mysql > CREATE database pokemon_db;
```

きちんと作成されたか確認します。

```sql

mysql > SHOW databases;
```

使うデータベースを指定します。

```sql

mysql > USE pokemon_db;
```

これで今後、テーブルを作ったり,データを投入していくと選択したデータベース対して処理が行われます。

## テーブルを作る

今回はこんなテーブルを作ります。

|カラム名|型|
|---|---|
|ID|整数|
|ニックネーム|文字列|
|タイプ|文字列|
|レベル|整数|
|パートナー|文字列|

テーブルを作っていきます。作るためのコマンドの書き方

```sql

mysql >  CREATE TABLE テーブル名(カラム名 データ型, カラム名 データ型)
```

てことで、ポケモンテーブルを作ります。

```shell
mysql > CREATE TABLE pokemon(id int, nickname varchar(10), type varchar(10), level int, partner varchar(10))
```

作成できたら確認します

```sql

mysql > show tables;
```

MySQLWorkbenchで確認してみます。

<img width="934" alt="スクリーンショット 2020-07-17 18.01.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436363/e1d218d0-3170-597c-0c26-e4edc90aeab2.png">


まだデータを投入していないので表は空になっています。


## テストデータを生成する

これからテストデータを入れていきます。
とりあえず、好きなポケモンを10匹を投入します。

テーブルにデータを投入する際は`INSERT文`を使用して投入していきます。

書き方

```sql

INSERT INTO テーブル名 VALUES (id, ニックネーム, タイプ, レベル, パートナー)
```

いったん一つデータを入れます。やっぱりピカチュウを入れたいです。好きなので。

```sql

mysql > INSERT INTO pokemon VALUES (1, 'ピカチュウ', 'でんき' , 39, 'サトシ');
```

<img width="385" alt="スクリーンショット 2020-07-17 18.24.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436363/c4370eb5-f3e5-220e-5778-d3157d201224.png">

```sql

mysql > INSERT INTO pokemon VALUES
	(2, 'ゼニガメ', 'みず' , 5, 'サトシ')
 ,(3, 'ヒトカゲ', 'ほのお', 5, 'サトシ')
 ,(4, 'フシギダネ', 'くさ', 5, 'サトシ')
```

<img width="305" alt="スクリーンショット 2020-07-17 18.35.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436363/377f5f7a-a5f6-afcf-54b4-53f441ae7e2a.png">


このままだとサトシのポケモンばかりになってしまうので、カスミやタケシのポケモンも追加します。

```sql

mysql > INSERT INTO pokemon VALUES
	(5, 'イワーク', 'いわ' , 14, 'タケシ')
 ,(6, 'イシツブテ', 'いわ', 8, 'タケシ')
 ,(7, 'スターミー', 'みず', 6, 'カスミ')
 ,(8, 'コダック', 'みず', 10, 'カスミ')
 ,(9, 'コラッタ', 'ノーマル', 3, 'やせい')
 ,(10, 'キャタピー', 'くさ', 2, 'やせい')
```

<img width="294" alt="スクリーンショット 2020-07-17 18.37.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436363/e39ab55b-4d39-56ed-5d7c-58480785c814.png">



これで10体登録出来ました。
誰か効率の良いデータ投入の仕方がわかるかた教えていただけると助かります。

## 抽出する
欲しいデータを取れるようになるのを目指します。

基本的な書き方

```sql

SELECT カラム名 FROM テーブル WHERE 条件文;
```

ちなみに`*`で全てを指定出来ます。

1. 全部のポケモンの名前が欲しい

```sql

mysql > SELECT nickname FROM pokemon;

+-----------------+
| nickname        |
+-----------------+
| ピカチュウ      |
| ゼニガメ        |
| ヒトカゲ        |
| フシギダネ      |
| イワーク        |
| イシツブテ      |
| スターミー      |
| コダック        |
| コラッタ        |
| キャタピー      |
+-----------------+
```

2. タイプがみずタイプのみのポケモンが欲しい

WHERE句で条件を指定出来ます。今回はタイプがみずタイプのポケモンが欲しいので以下のように`type="みず"`で条件を指定しています。

```sql

mysql > SELECT * FROM pokemon WHERE type="みず";

+------+-----------------+--------+-------+-----------+
| id   | nickname        | type   | level | partner   |
+------+-----------------+--------+-------+-----------+
|    2 | ゼニガメ        | みず   |     5 | サトシ    |
|    7 | スターミー      | みず   |     6 | カスミ    |
|    8 | コダック        | みず   |    10 | カスミ    |
+------+-----------------+--------+-------+-----------+
```

3. パートナーがサトシのポケモンが欲しい

これも先ほどと同じパターンでとってこれます。

```shell
mysql > SELECT * FROM pokemon WHERE partner="サトシ";

+------+-----------------+-----------+-------+-----------+
| id   | nickname        | type      | level | partner   |
+------+-----------------+-----------+-------+-----------+
|    1 | ピカチュウ      | でんき    |    39 | サトシ    |
|    2 | ゼニガメ        | みず      |     5 | サトシ    |
|    3 | ヒトカゲ        | ほのお    |     5 | サトシ    |
|    4 | フシギダネ      | くさ      |     5 | サトシ    |
+------+-----------------+-----------+-------+-----------+
```

4. レベルが10以上のポケモンが欲しい

```sql

mysql > SELECT * FROM pokemon WHERE level>=10;

+------+-----------------+-----------+-------+-----------+
| id   | nickname        | type      | level | partner   |
+------+-----------------+-----------+-------+-----------+
|    1 | ピカチュウ      | でんき    |    39 | サトシ    |
|    5 | イワーク        | いわ      |    14 | タケシ    |
|    8 | コダック        | みず      |    10 | カスミ    |
+------+-----------------+-----------+-------+-----------+
```

5. レベルがくさタイプでパートナ-がサトシのポケモン

〜なおかつ〜の場合は`and`を使用します

```shell
mysql > SELECT * FROM pokemon WHERE type="くさ" and partner="サトシ";

+------+-----------------+--------+-------+-----------+
| id   | nickname        | type   | level | partner   |
+------+-----------------+--------+-------+-----------+
|    4 | フシギダネ      | くさ   |     5 | サトシ    |
+------+-----------------+--------+-------+-----------+
```

6. レベルが５以上のみずタイプのポケモンでパートナーがカスミかサトシのポケモン

```sql

mysql > SELECT * FROM pokemon WHERE level>=5 and partner="カスミ" or partner = "サトシ";

+------+-----------------+-----------+-------+-----------+
| id   | nickname        | type      | level | partner   |
+------+-----------------+-----------+-------+-----------+
|    1 | ピカチュウ      | でんき    |    39 | サトシ    |
|    2 | ゼニガメ        | みず      |     5 | サトシ    |
|    3 | ヒトカゲ        | ほのお    |     5 | サトシ    |
|    4 | フシギダネ      | くさ      |     5 | サトシ    |
|    7 | スターミー      | みず      |     6 | カスミ    |
|    8 | コダック        | みず      |    10 | カスミ    |
+------+-----------------+-----------+-------+-----------+
```

## データを削除する

データの基本的な抽出の方法はわかったので、次はデータの削除をします。

基本的な書き方

```shell
DELETE FROM テーブル名
```

1. くさタイプのポケモンを消す

```sql

mysql > DELETE FROM pokemon WHERE type="くさ";
```

<img width="253" alt="スクリーンショット 2020-07-17 19.38.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436363/10120011-8f20-6559-dfb3-bb34fa6b8ef9.png">

くさタイプのポケモンがいなくなりました。

2. ピカチュウと野生のポケモンを消す

`and`ではないです。andだとニックネームが`ピカチュウかつパートナーがやせい`のデータを削除してしまうので...

```sql
mysql > DELETE FROM pokemon WHERE nickname="ピカチュウ" or partner="やせい";
```

<img width="291" alt="スクリーンショット 2020-07-17 19.40.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436363/480cbe8b-66d3-a566-f87c-7ba1e1a27130.png">


3. テーブルを消す

テーブルごと消す。

```shell
mysql > DELETE FROM pokemon;
```

これでテーブルごと消えたかと思いましたが、消えていませんでした。

```sql

mysql > SHOW tables;

+----------------------+
| Tables_in_pokemon_db |
+----------------------+
| pokemon              |
+----------------------+
```

テーブルごと消すためには、`DROP`を使うみたいです。

```shell
mysql > DROP TABLE pokemon;
```

確認します。

```sql

mysql> show tables;
Empty set
```

## データベースの削除

最後にデータベースを削除して終わります。こちらも`DROP`を使います。

```sql

mysql > DROP DATABASE pokemon_db;
```

確認すると消えているのがわかります。

```sql

mysql > SHOW databases;
```

最後まで読んでいただきありがとうございます。