RDBMS の主要製品とそのお試し

自分用まとめ
お試しは Unix 系環境前提。ただし Microsoft 製品は逆に Windows を想定。

## お約束
間違いが含まれる可能性がそれなりにあります。
間違いを見つけたら「どこを」「どのように」修正すべきか教えてください。

## 主要製品

ここでは、よく名前を見聞きする5製品に注目

|  製品名  |  開発元  |  オープンソースか？  | 
| --- | --- | :-: | 
|  MySQL  |  Oracle  |  ⭕️  | 
|  PostgreSQL  |  PostgreSQL Global Development Group  |  ⭕️  | 
|  Microsoft SQL Server  |  Microsoft  |  ❌  | 
| Oracle Database | Oracle | ❌ |
| SQLite | D. Richard Hipp | ⭕️ |

注) オープンソースの製品は、誰でも無料で利用・改変できるが、無保証である場合が多い。

また、SQLite は少々特殊な製品である。
他の DBMS がサーバとして動作するのに対し、SQLite はライブラリのように振る舞う。
（SQLite データベースは単一のファイルから成り、接続時に初めてそのファイルが開かれる）

ゆえに SQLite は、それ以外の DBMS とは用いられる場面が異なるように見える。
（一般の DBMS がシステムのデータ管理に使われるのに対し、SQLite はブラウザ内や Android アプリ内で使用されている）

## 試し方

色々な製品でテーブルを作成し、データを挿入してから、その表を問い合わせしてみる。

```sql:お試し用SQL
-- DROP TABLE Students;

CREATE TABLE Students (
    id INT PRIMARY KEY,
    name VARCHAR(16),
    age INT
);

INSERT INTO Students VALUES
    (1, 'Alice', 16),
    (2, 'Bob', 18),
    (3, 'Charlie', 15),
    (4, 'David', 23);

SELECT * FROM Students;
```

以下の表が得られたら OK

**Students**

| ID  |	NAME| AGE |
| --: | --- | --: | 
|1 | Alice | 16 |
|2 | Bob | 18 |
|3 | Charlie | 15 |
|4 | David | 23 |

### MySQL

1. apt なり yum なり brew なりで mysql をインストールする
1. `mysql.server start` コマンドで、サーバを起動
1. `mysql -uroot` コマンドでサーバに接続
1. （データベースを作っていないなら） `CREATE DATABASE (データベース名);`でデータベースを作成
1. `USE (データベース名)`でデータベースに接続
1. （いろいろ試してみる）
1. `\q`で切断
1. `mysql.server stop` コマンドで、サーバを終了


### PostgreSQL

1. apt なり yum なり brew なりで postgresql をインストールする
1. `initdb` コマンドで、新規データベースを作成
1. `pg_ctl start` でサーバを起動
1. `psql -d postgres` でサーバに接続、`postgres` データベースが開かれる
1. （いろいろ試してみる）
1. `\q`で切断
1. `pg_ctl stop` でサーバを終了

- `initdb`, `pg_ctl` では `-D` オプションにより保存ディレクトリを指定できる
    - `initdb` に関しては指定が必須
    - `pg_ctl` に関しては、ディレクトリ指定の代わりに、環境変数 `PGDATA` で指定することもできる
- Ubuntu では `initdb`, `pg_ctl` は `/usr/lib/postgresql/バージョン番号/bin/` にある。ただし、`pg_ctl` の代わりに `/etc/init.d/postgresql` を使う方が良さそう。

#### 注意
ちょっと試すだけなら上記でも良いかもしれないが、ちゃんと使うなら、`postgres` データベース上で作業するべきではないだろう。`CREATE DATABASE` して、目的ごとにデータベースを作ると良いのではないだろうか。

### Microsoft SQL Server

ここだけ Windows を想定。
Microsoft 製品を選ぶような人は、Windows を使っているはず…

1. https://www.microsoft.com/ja-JP/sql-server/sql-server-downloads の下の方にある **Express** をダウンロードし、ウィザードに沿ってインストールする
1. https://docs.microsoft.com/ja-jp/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver15 より、SQL Server Management Studio (SSMS) をダウンロード、インストール
1. 再起動後、SSMS を起動
1. ダイアログはそのまま Connect して、上部メニューの"New Query"をクリック
1. （いろいろ試してみる）

- "SQL Server インストール センター" では、"新規スタンドアロン インストールを実行"を選択
- Windows 以外でも、Docker があれば、SQL Server イメージを用いて実行することができる
    - https://docs.microsoft.com/ja-jp/sql/linux/quickstart-install-connect-docker?view=sql-server-ver15&pivots=cs1-bash

#### 注意
ちょっと試すだけなら上記でも良いかもしれないが、ちゃんと使うなら、別途データベースを作ると良いのではないだろうか。

### Oracle Database

Live SQL という、Web上で気軽に試せる環境がある

1. https://livesql.oracle.com/ を開く
1. プロファイル登録またはログイン
1. 同意画面が出るので同意
1. SQL Worksheet が出たらOK
1. （いろいろ試してみる）

この環境で作成したテーブル等は、しばらく（セッション中？）は残る模様。
何度も同じ CREATE TABLE を実行すると、「そのテーブルは既にありますよ」と怒られるので注意。

#### 注意

上述の SQL コードでは、INSERT の複数行挿入の部分でエラーが出てしまう。
Oracle Database では、次のようにして試した。

```sql:Oracleでお試し
-- DROP TABLE Students;

CREATE TABLE Students (
    id INT PRIMARY KEY,
    name VARCHAR(16),
    age INT
);

INSERT ALL  -- MySQL, PostgreSQL などとは書き方が異なることに注意
INTO Students VALUES (1, 'Alice', 16)
INTO Students VALUES (2, 'Bob', 18)
INTO Students VALUES (3, 'Charlie', 15)
INTO Students VALUES (4, 'David', 23)
SELECT * FROM DUAL;

SELECT * FROM Students;
```

### SQLite

1. apt なり yum なりで sqlite3 をインストールする
2. `sqlite3` コマンドで実行
1. （いろいろ試してみる）
2. `.q` で終了

- Mac なら最初から入っているはず
- ファイルを指定すればそのファイルで、指定しなければ in-memory で実行される

---

いろいろな製品で SQL をお試しできる環境が整った！楽しい！
✌(’ω’✌ )三✌(’ω’)✌三( ✌’ω’)✌