SQL  ~データベースの操作1~

初学者です。SQLの理解が浅いため纏めていきます。

- MySQL
- Ruby on Rails

# はじめに
ここではSQLというDBを操作する言語について記述します。
中でもDDL(データベース定義)についてです。

SQLって何？DDLって？というかたに向けたものです！

今までは、ターミナル上で"rails db:create"コマンドなどを使って、Sequel Proを使ったデータの書き換えを行っていました。
実はこの動きも、最終的にはSQLが実行されているんです！

上記のような簡単な操作であれば、SQLを直接使用せずとも「特定のコマンド」や「GUI操作」で実行できます。

でも、「簡単な操作」が用意されていないものも存在し、その処理を行うには**SQL**を使う必要が出てくるのです！

プログラミング言語の学習も必要ですが、こちらのSQLも、開発業務では必須となる知識です。
かんばって学習していきましょう！

# SQLとは？(ちょっと復習)
SQL（エス・キュー・エル/シークェル）とは「Structured Query Language」の略で、RDBの操作を行うための言語です。

SQLはデータベースやテーブルに対してさまざまな命令を行います。命令は大きく分けると、以下の三つに分類されます。

- データ定義　「DDL（Data Definition Language）」
- データ操作　「DML（Data Manipulation Language）」
- データ制御　「DCL (Data Control Language)」

今回は**データ定義のDDL**を掘り下げていきます。

「データベース操作したいならDMLじゃないの？」と私は思ってしまいましたが、そうです。違います。
その理由も含め、説明していきます。

## DDL
データを定義するSQLです。以下のような作成、更新、削除などの命令分があります！

|命令|機能|
|---|----|
|CREATE|データベースやテーブルの作成|
|ALTER|データベースやテーブルの更新|
|DROP|データベースやテーブルの削除|

「データの定義って言いながらめっちゃ普通に操作してるーー！」と最初思いました。笑

# SQLの使用

**SQLってどうやって動かすの？**

初学者の自分は、SQLの起動方法から分からなかったので、そこから書いていきますね。

1.ターミナルのホームディレクトリで、MySQLにログインする。

```
# ホームディレクトリへ
% cd

# MySQLに接続
% mysql -u root
```

**-u root**というオプションで、**ユーザーは「ルート」でログインする**という意味になります！
(ここの「ルート」とはMySQLであらかじめ用意されてる**ユーザーのこと**なので注意してください。)

ちなみにログインにパスワードは必要ないです！（元から空で設定されているため）

接続が成功すると、以下のような歓迎の言葉がもらえます。

```
% mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 428
Server version: 5.6.47 Homebrew

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
```

一番最下層にある**mysql>**に入力をしていきます！

# データベースの作成

SQLを使って、データベースを作成してみます。ここからの作業はターミナルを使用して行います。

今までRailsでは**rails db:create**コマンドを実行することでRuby on Railsがデータベースを作成してくれました。
今回はSQLを使って見ましょう！

## CREATE
**CREATE**は、データベースやテーブルを作成できるSQLの分です。
**CREATE DATABASE**文を実行すると、指定した名前のデータベースが作成できます！

※SQL文の終わりには必ずセミコロンを付けます。
忘れて実行した場合、SQLがまだ続くものだとみなし、矢印マーク -> が表示されます！
＝その場合はセミコロンだけを入力してエンターを押せば大丈夫です！

```
musql> CREATE DATABASE 任意のデータベース名;
```

以下のような表示であれば成功です！

```
musql> CREATE DATABASE 任意のデータベース名;
Query OK, 1 row affected (0.00 sec)
```

ここで一つ気になりました。
参考書などを見ていると、**「SQL文って大文字じゃなきゃいけないの？」**と。
答えは**NO**です！小文字でも動作しました！
「じゃあ、なんでわざわざ！」と思い調べたところ、
**SQL文と他の文字列が混ざると読み辛くなることから、大文字で記述することが一般的**だそうです。

はい、確かにそうです。そんなこと考える暇があるなら先に進みましょう。笑

では次に作ったデータベースがちゃんとできたか確認しましょう！

## SHOW
**SHOW**はデータベースやテーブルを一覧表示できるSQL文です。以下のコマンドを実行して見てみましょう！

```
mysql> SHOW DATABASES;
```

このようにテーブルが一覧表示できたら成功です！

```
mysql> SHOW DATABASES;
+------------------------+
| Database               |
+------------------------+
| 省略                    |　      
|                        |
+------------------------+
36 rows in set (0.00 sec)
```

## DROP
データベースやテーブルの削除に使うSQL文です。
DROP DATABASE文を実行すると、作成されているデータベースを削除できます。

```
mysql> DROP DATABASE データベース名;
```

以下のように表示されていれば成功です！

```
mysql> DROP DATABASE 任意のデータベース名;
Query OK, 0 rows affected (0.02 sec)

# 削除したデータベースがないことを確認
mysql> SHOW DATABASES;
```

ひとまず、ここまででデータベースの定義**DDL**について学習しました。

まだテーブルについてはまとめられていないので、次回記述します。
お疲れ様でした！