【MySQL】超初心者向けMySQL入門

こんにちは。
本日はSQL初心者の方に向けて、基礎から簡単なコマンド操作までを解説していきます。

## 目次
[1.用語解説](#1-用語解説)
[2.新しいDBの作成](#2-新しいdbの作成)
[3.テーブルの作成](#3-テーブルの作成)
[4.レコードの作成](#4-レコードの作成)
[5.レコードの検索](#5-レコードの検索)
[6.レコードの並べ替え](#6-レコードの並べ替え)
[7.最後に](#7-最後に)


# 1. 用語解説
はじめにDB関連の基礎的な用語を解説していきます。
聞き慣れないワードが出てきて、イメージしにくいこともあると思うので、
今回は韓国アイドルグループのSEVENTEENを例にして解説していきます。

* SQL
　→データの操作や定義を行うためのDB言語

* DB(データベース)
　→データの集まり。今回は事務所に例えて、「HYBE」というデータベースを作成します。

* テーブル
        　→データを保存しておくための「表」にあたるものです。今回はグループ自体を例えて、「SEVENTEEN」というテーブルを作成します。ひとつのDBの中には、複数のテーブルを作成することができます。

* レコード
　→テーブルの「行」にあたるものです。例えばメンバー情報を保存しておくための「SEVENTEEN」という名前のテーブルに、「S.COUPS」「JEONGHAN」「JOSHUA」などのメンバー全員分のデータが保存されている例で考えてみましょう。この1件分のデータにあたる「行」がレコードです。

* カラム
　→カラムは、テーブルの「列」にあたるものです。例えばメンバー情報を保存しておくための SEVENTEEN という名前のテーブルを作成すると、テーブルの中には、ひとりひとりのユーザーIDや名前、出身国、チーム、生年月日の項目を保存できるようになります。それぞれの項目にあたる「列」がカラムです。

早速、データベースから作成していきます。

# 2. 新しいDBの作成
まず「HYBE」というデータベースを作成します。

　create database データベース名;

で作成できます。
```
create database HYBE;
```
早速、先ほど作成したデータベースに切り替えます。

　use データベース名;

```
use HYBE;
```
# 3. テーブルの作成
続いてテーブルを作成します。

　create table テーブル名 (カラム名1 型 属性,カラム名2 型 属性,...);

```
create table SEVENTEEN (ID int primary key, NAME varchar(10), COUNTRY varchar(10), TEAM varchar(10), BIRTHDAY date);

```
例にあるint,varchar,dateはそれぞれ整数、可変長文字列、日付の型です。
PRIMARY KEYは主キー(重複しないユニークな値)であることを表します。
全部合わせると
「SEVENTEENという名前のテーブルを作ってください。カラムは主キーの数値型のID、可変長文字列型のNAMEとCOUNTRYとTEAM、日付型のBIRTHDAYです。」
となります。

# 4. レコードの作成
続いて作成したテーブルに実際にレコードを追加していきます。

　insert into テーブル名 (カラム名1, カラム名2, ...) values (データ1, データ2, ...);

```
insert into SEVENTEEN (ID, NAME, COUNTRY, TEAM, BIRTHDAY) values (1,"S.COUPS", "korea", "hiphop","1995-08-08");

insert into SEVENTEEN (ID, NAME, COUNTRY, TEAM, BIRTHDAY) values (2,"JEONGHAN", "korea", "vocal","1995-10-04");
```
データの作成にはinsert文を使います。今回の1つ目の例では
「SEVENTEENテーブルにIDが1、NAMEがS.COUPS、COUNTRYがkorea、TEAMがhiphop、BIRTHDAYが1995-08-08のレコードを作ってください。」
になります。
同様に、メンバー全員分のレコードを追加していきます。
```
+----+-----------+---------+------------+------------+
| ID | NAME      | COUNTRY | TEAM       | BIRTHDAY   |
+----+-----------+---------+------------+------------+
|  1 | S.COUPS   | korea   | hiphop     | 1995-08-08 |
|  2 | JEONGHAN  | korea   | vocal      | 1995-10-04 |
|  3 | JOSHUA    | usa     | vocal      | 1995-12-30 |
|  4 | JUN       | china   | performanc | 1996-06-10 |
|  5 | HOSHI     | korea   | performanc | 1996-06-15 |
|  6 | WONWOO    | korea   | hiphop     | 1996-07-17 |
|  7 | WOOZI     | korea   | vocal      | 1996-11-22 |
|  8 | THE8      | china   | performanc | 1997-11-07 |
|  9 | MINGYU    | korea   | hiphop     | 1997-04-06 |
| 10 | DK        | korea   | vocal      | 1997-02-18 |
| 11 | SEUNGKWAN | korea   | vocal      | 1998-01-16 |
| 12 | VERNON    | usa     | hiphop     | 1998-02-18 |
| 13 | DINO      | korea   | performanc | 1999-02-11 |
+----+-----------+---------+------------+------------+
```

# 5. レコードの検索
レコードの中から、特定の条件を満たすレコードだけを抽出して表示してみます。

　select カラム名1, カラム名2, ... from テーブル名 where 条件;

```
select NAME from SEVENTEEN where ID=1;
```
「SEVENTEENテーブルからIDが1のメンバー(レコード)の名前(NAME)を取り出してください」
という指示です。

```
+---------+
| NAME    |
+---------+
| S.COUPS |
+---------+
```
IDが1であるS.COUPSが取り出せました。

続いて、中国人メンバーのみを取り出してみます。
```
select NAME from SEVENTEEN where COUNTRY="china";
```
「SEVENTEENテーブルからCOUNTRYがchinaのメンバー(レコード)の名前(NAME)を取り出してください」
という指示です。
```
+------+
| NAME |
+------+
| JUN  |
| THE8 |
+------+
```
中国人メンバーのJUNとTHE8のみが取り出せました。

続いて、ヒップホップチームのメンバーのみを取り出してみます。
```
select NAME from SEVENTEEN where TEAM="hiphop";
```
「SEVENTEENテーブルからTEAMがhiphopのメンバー(レコード)の名前(NAME)を取り出してください」
という指示です。
```
+---------+
| NAME    |
+---------+
| S.COUPS |
| WONWOO  |
| MINGYU  |
| VERNON  |
+---------+
```
ヒップホップチームのメンバーである、S.COUPS,WONWOO,MINGYU,VERNONが取り出せました。

# 6. レコードの並べ替え
続いて、レコードを指定した順番に並び替えてみます。

　select カラム名1 , カラム名2 , ...from テーブル名 where 条件 order by カラム名 asc;

※ asc(デフォルト) ... 昇順(A→Z)

今回は、メンバーを年齢順に並べ替えます。
```
select * from SEVENTEEN order by BIRTHDAY asc;
```
「SEVENTEENテーブルからメンバー(レコード)を、BIRTHDAYのasc(昇順)で取り出してください」という指示です。
※「*」を使うと全カラム名を列挙したことと同等となります。
```
+----+-----------+---------+------------+------------+
| ID | NAME      | COUNTRY | TEAM       | BIRTHDAY   |
+----+-----------+---------+------------+------------+
|  1 | S.COUPS   | korea   | hiphop     | 1995-08-08 |
|  2 | JEONGHAN  | korea   | vocal      | 1995-10-04 |
|  3 | JOSHUA    | usa     | vocal      | 1995-12-30 |
|  4 | JUN       | china   | performanc | 1996-06-10 |
|  5 | HOSHI     | korea   | performanc | 1996-06-15 |
|  6 | WONWOO    | korea   | hiphop     | 1996-07-17 |
|  7 | WOOZI     | korea   | vocal      | 1996-11-22 |
| 10 | DK        | korea   | vocal      | 1997-02-18 |
|  9 | MINGYU    | korea   | hiphop     | 1997-04-06 |
|  8 | THE8      | china   | performanc | 1997-11-07 |
| 11 | SEUNGKWAN | korea   | vocal      | 1998-01-16 |
| 12 | VERNON    | usa     | hiphop     | 1998-02-18 |
| 13 | DINO      | korea   | performanc | 1999-02-11 |
+----+-----------+---------+------------+------------+
```
メンバーを年齢順に並べ替えることができました。

# 7. 最後に
いかがだったでしょうか？
今回はSQL初心者の方に向けて、基礎から簡単なコマンド操作をアイドルグループSEVENTEENに例えて解説しました。
SQLは実際に現場などでも使用する機会が多いので、少しでも参考になれば嬉しいです。

最後までお読みいただきありがとうございました。