【備忘録】SQLの勉強

# 概要
今回は、MySQLを利用して学習を行なっていく。
自分自身はSQLはほとんど触っていないため、高度な内容は今回行わない。
MySQL、PostgreSQL、GoogleBigQueryなどの操作の基本を学ぶためにも記載しておく。

基本的に環境構築と、参照系のSQLと挿入系のSQLを知る事ができればよいとここでは考えている。

## 環境
- 今回はmacOSにダイレクトでいれる。
- MySQL5.7を使用する。

# 事前説明
そもそもデータベースって何？って思うかもしれないのでここで説明。

- データベース（DB）とは、、`検索・蓄積が容易にできるように整理された情報の集まり`。DBと訳される。
- データベースマネジメントシステム（DBMS）
    - DBを管理するコンピュータシステムのこと。

当たり前だが、DB自体は色々なところで利用されている。
WebサイトやSNS、アプリケーションなど。。

→なんでDBを使うのか？

1. 大量のデータから必要なデータを取り出す
    1. Excelだと大量になったら重くて使えなくなる。
1. 大人数でデータを共有して利用する。
1. データを保護するため。
    1. 冗長構成などにしてデータを保護したり、アクセス権を特定したりも可能。

## DBの種類

### RDB、リレーショナルデータベース

オープンソースで無料で使える。
- MySQL：いろんなところで使われている。
- MariaDB MySQLから派生している。
- PostgreSQL

商用（有料）のDB
- Oracle Database
- SQL Server (Microsoft)
 など。

 ### キーバリュー型データストア

 検索に使うKeyと、Valueの組み合わせだけの単純な形。
 Redisなどで使われる。


 ###　オブジェクト指向DB

 現在はあまり使われていない・

 ### XMLDB
 XMLをDBに使いやすくできるようにしたもの。インターネットで使用されるもので使われる。

 ## SQLについて

 SQLとは。。
 データベースやテーブル、行や列wぽ扱うための言語。
 IBMが作成したSEQUELが元とも言われる。
```
select * from users where age >= 20
```
 みたいな感じ。

 SQLにおいて基本的な形、`標準SQL`という考え方がある。
しかしMySQLで使えてもPostgreSQLで使えないというような、SQLの方言がいくつかあったりするので注意する。

なのでまずは標準SQLを学ぶと応用が効きやすい。

## 基本記述ルール。

- 大文字と小文字は区別されない。ただし読みにくいので注意。最近は小文字が多い。
- SQLの最後には、セミコロン`;`をつける
- 文字`Saito`と日付`2024`などは、シングルクウォーテーション`''`囲う。
- 単語は半角スペースもしくは改行で区切る。
- SQLは全角でかかない。


 ## RDBMSの基本用語

 - データベース　データを管理するもの。全体的なもの。
 - テーブル
     - Excelでいう、表。データベースの中に複数作れる。
     - ユーザのテーブル、商品のテーブルみたいな感じ。
- 列（フィールド、カラム）Excelでいう列。
- 行（レコード、ロウ）ともいう。ここには、idが割り振られる。

![スクリーンショット 2024-08-13 22.55.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/98a7efc9-c041-fed4-1525-ead3310423b2.png)

- クエリ
    - データの検索や更新などの要求をDBに送信すること。

参考サイト
https://academy.gmocloud.com/wp/know/20160425/2259

## データの型

データ型とは。

テーブルを作成する時、それぞれの列に指定した形式のデータしか入力できないように設定する。

具体的には、
- 数値型
    - int:整数。1,2,3 
    - tinyint：小さな整数 -128 ~ 127
    - float：小さい浮動小数点 -3.4 ~ -1.17~~
    - double：普通の浮動小数点
    - int unsigned
        - 数値は符号なしとすることができる。これにより、扱える数が増える。
    - tinyint(1)
        - true,falseを使う事ができる。
        - 内部的には1,0で管理されている。
        - ただし、MySQLでは0とnullがfaulse、それ以外はtrueとなる。
    - nullは、データが存在しない状態。
- 文字列型
    - char型キャラ
        - 255文字まで使える。文字列を格納する時、指定した長さになるようにされる。
        - 商品コードで5桁固定"CD123"なら、`char(5)`で定義する
    - varchar型（　バーキャラ）
        - 可変長の文字列だが、255文字までの場合。
        - メルアドみたいな、文字数が決まってないもの。`sample@example.com`みたいな
    - text(テキスト)
        - 長いものを使うときに使う。65535まで。
- 日付型
    - date型　日付を表す。`1000-01-01`から、`9999-12-31`まで
    - datetime　日付と時刻を表す。
    - time 時刻を芦原図。

floatはあまり使わず、doubleを使っている。


# 環境構築

mysqlと、mysql workbenchという管理ツールを使用していく。
macでは、homebrewか、cloudにあるDBを使ってインストールすることも可能。

windowsでは結構つまづく部分があったりするらしい。
XAMPPもしくはMAMP、またはクラウドの無料枠を利用していく。

## そもそもMYSQLとは。

以下が公式ページ。ドキュメントのタブをひらけば、リリースノートなどを確認することも可能。

https://www.mysql.com/jp/

8.0が現在使われている。今回受講しているUdemyの内容では5.7を使用している。
ただし、補足があり、8.0.xを利用する事とする。（8.1.xでは動かないらしい。）
9.~~が開発用で使われている・

- オープンソースのRDBMSの一つ・。
- 無料で利用可能。
- 2010年からオラクルで利用可能。
- シェアが高い。
    - 以下のサイトで、DBのシェア率を確認することができる。

https://db-engines.com/en/ranking

## インストール(mac)
以下のサイトからインストールできる。

https://dev.mysql.com/downloads/mysql/

8.0.~~を利用する。この時は8.1がworkbenchに対応していないらしい。
今回自分はmac_os 14である。
そして、OSのCPUによって選択肢が出ている。

今回自分のPCはM1Proなので、CPUはARMを選択する。
x86だったら、IntelのCPUになる。

そして、DMG Archiveをダウンロードする。

![スクリーンショット 2024-08-18 12.55.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/acea241c-e2e6-7698-805b-0b2df04fb688.png)


ダウンローラをアプリケーションで開いて、インストーラを選択。

![スクリーンショット 2024-08-18 12.58.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/09ca6280-a335-fb20-be52-740e57fd3487.png)

その後、指示に従いインストールを進める。
![スクリーンショット 2024-08-18 12.59.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/fcfc96f4-c724-2557-3006-490fd1e08900.png)

パスワードの縁くりぷしょんは、上を選択。上が新しい。

![スクリーンショット 2024-08-18 13.00.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/25f6b59c-6c08-8bb2-c59a-d85140074dd0.png)

次に、rootユーザーのパスワードを入力して、Finishする。これはのちに使うので忘れないように。

システム環境設定からMysQLを検索できるようになる。この画面から、MySQLの軌道や停止ができる。画面を見ると、現在は起動状態になっている。


![スクリーンショット 2024-08-18 13.05.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/586ef36f-23b4-0a24-a776-4f5d0f2f804d.png)

## Workbenchのインストール
以下のリンクからDLできる。

https://dev.mysql.com/downloads/workbench/

MysQLの公式ツールで、
DBの設計・作成・管理をヴィジュアル的に扱う事ができる。
ただし、バージョンによっては致命的なバグがあるので注意。
今回は、Productバージョン8.0.34を選択して、DLする。

![スクリーンショット 2024-08-18 13.19.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/932e7d9a-1842-113a-e14e-ebcde8c07ed6.png)

dmgを開いて、アプリケーションフォルダに入れる。

## 実際に接続してみる。

- mysql
- workbench
を起動している状態にする。

workbenchの、/Database/Connect to Databaseを選択する。

![スクリーンショット 2024-08-18 13.22.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/69f69bc3-aa16-a17f-0466-bc30e99318e4.png)

この状態になっているのをみたら、OKを押す。ホストネームとかは今回Localで使うのでそのまま。

![スクリーンショット 2024-08-18 13.23.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/6f6e8053-3691-a348-6daf-128a17e5e072.png)

ここで、mysqlのrootのパスワードを入力する。

![スクリーンショット 2024-08-18 13.24.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/7e38ba6e-214e-b913-227b-37ab8b298583.png)

上のタブを見ると、アクセスできているのが確認できる。

![スクリーンショット 2024-08-18 13.26.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/c166124d-0436-fb14-44ff-76eccdcc9309.png)


### データを取り込んでみる。

ワークベンチで、DBに接続した状態にしておく。

今回、サンプルでsqlをDLしてある。MySQLに取り込んだらすぐに使えるようになる。

まずはDBを作成する。
![スクリーンショット 2024-08-18 23.12.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/36c8874d-e576-83e8-ea90-41814d7d2597.png)

すると、スキーマネーム（DBの名前）をいれる。
- Schemaname
    - mydb
- Character Set
    - utf8 (日本語も使えるようになる)
- Collation
    - utf8_general_ci
    - 照合順序といい、ソートの順番の設定になる。

設定したらApplyを押す。
![スクリーンショット 2024-08-18 23.16.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/faa438df-dd72-7614-7ff0-e6f87880072d.png)

すると、以下の画面がでる。（このSQLを実行するがよいかという内容である。）
Applyを押す。

![スクリーンショット 2024-08-18 23.17.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/ebb29ef2-aab8-58df-b98c-79a1e9e49d8d.png)

Schemaタブで、mydbを選択する。（ダブルクリック）

![スクリーンショット 2024-08-18 23.18.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/7eb1c211-77b5-64d8-ce62-a238e96681fa.png)

その後、File/Open SQL Scriptを選択し、今回実行するSQL文を指定する。

![スクリーンショット 2024-08-18 23.19.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/79f11c20-6e06-1282-d98d-a5d72c5d7717.png)

その後、雷のマークを押すと、SQLの読み込みが行われる。

![スクリーンショット 2024-08-18 23.24.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/ea7e9cbb-a16a-a470-b74e-03991697cb24.png)

その後、Refresh All を選択する。

![スクリーンショット 2024-08-18 23.27.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/bd92cb8c-6c2f-f707-3d78-62c179c72111.png)
 

mydbの中のtablesをクリックすると、色々出てきているのがわかる。

![スクリーンショット 2024-08-18 23.29.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288524/c672aab7-9866-e66e-b412-53165464e749.png)


## DBについて

DBは架空の売り上げ図である。ER図（DBの構造を表す。）
ER図での線はテーブルの紐付けである。
各テーブルにて、それぞれの情報の表があるというイメージ。