[SQL]PostgreSQL学習記録

## MacにHomebrewを使用してPostgreSQLをインストールする
(* Homebrewのインストールは[こちら](https://brew.sh/ja/)から)

#### Homebrewがインストールされている確認
```
$ brew --version
$ brew update
$ brew upgrade
```

#### インストールできるPostgreSQLを確認する
```
$ brew search postgresql

==> Formulae
postgresql@11              postgresql@14 ✔            postgresql@17
postgresql@12              postgresql@15              qt-postgresql
postgresql@13              postgresql@16              postgrest
```

#### PostgreSQLをインストールする
```
$ brew install postgresql

---
バージョン指定してインストールしたい場合
$ brew install postgresql@数字
```

#### インストールを確認する
```
$ psql --version
```

## PostgreSQLを起動する

#### データベースを起動する
```
$ brew services start postgresql
```

#### データベース一覧を確認する
```
$ psql -l
データベース一覧が表示される
環境によるが、終了するときは[ : + q ]

                                    List of databases
   Name    |     Owner     | Encoding | Collate | Ctype |        Access privileges
-----------+---------------+----------+---------+-------+---------------------------------
 postgres  | *** | UTF8     | C       | C     |
 template0 | *** | UTF8     | C       | C     | =c/***               +
           |               |          |         |       | ***=CTc/***
 template1 | *** | UTF8     | C       | C     | =c/***               +
           |               |          |         |       | ***=CTc/***
(3 rows)
```

#### PostgreSQLに接続する
```
$ psql -h localhost -p 5432 -U *** -d postgres

*** はpsql -l でデータベース一覧を確認した時のOwnerを指定する
```

### PosrgreSQLを使ってみる
#### データベースを作成する
`CREATE DATABASE <データベース名>;`
```
postgres=# CREATE DATABASE shop;

SQL文は大文字小文字を区別しないので書きどちらでもいい
(*データベース名は大文字小文字区別されるため注意)
postgres=# create database shop;
```

#### 使用するデータベースを切り替える
データベース一覧を確認する。前工程で作成した`shop`データベースが追加されていることが確認できた。
```
postgre=# \l
                                    List of databases
   Name    |     Owner     | Encoding | Collate | Ctype |        Access privileges
-----------+---------------+----------+---------+-------+---------------------------------
 postgres  | *** | UTF8     | C       | C     |
 shop      | *** | UTF8     | C       | C     |
 template0 | *** | UTF8     | C       | C     | =c/***               +
           |               |          |         |       | ***=CTc/***
 template1 | *** | UTF8     | C       | C     | =c/***               +
           |               |          |         |       | ***=CTc/***
(4 rows)
```

`shop`データベースを使用するよう切り替える
```
postgre=# \c shop
You are now connected to database "shop" as user "kashiwawataru".
shop=#
```

#### テーブルを作成する
`CREATE TABLE <テーブル名>
(<列名1> <データ型> <この列の制約>,);`
```
CREATE TABLE Shohin
(shohin_id     CHAR(4) NOT NULL,
 shohin_mei    VARCHAR(100) NOT NULL,
 shohin_bunrui VARCHAR(32) NOT NULL,
 hanbai_tanka  INTEGER ,
 shiire_tanka  INTEGER ,
 torokubi      DATE ,
     PRIMARY KEY (shohin_id));
```

#### 作成したテーブルにデータを挿入する
`INSERT INTO <テーブル名> VALUES (<カラム値>,...);`
```
BEGIN TRANSACTION;
INSERT INTO Shohin VALUES ('0001', 'Tシャツ', '衣服', 1000, 500, '2009-09-20');
INSERT INTO Shohin VALUES ('0002', '穴あけパンチ', '事務用品', 500, 320, '2009-09-11');
INSERT INTO Shohin VALUES ('0003', 'カッターシャツ', '衣服', 4000, 2800, NULL);
INSERT INTO Shohin VALUES ('0004', '包丁', 'キッチン用品', 3000, 2800, '2009-09-20');
INSERT INTO Shohin VALUES ('0005', '圧力鍋', 'キッチン用品', 6800, 5000, '2009-01-15');
INSERT INTO Shohin VALUES ('0006', 'フォーク', 'キッチン用品', 500, NULL, '2009-09-20');
INSERT INTO Shohin VALUES ('0007', 'おろしがね', 'キッチン用品', 880, 790, '2008-04-28');
INSERT INTO Shohin VALUES ('0008', 'ボールペン', '事務用品', 100, NULL, '2009-11-11');
COMMIT;
```

[SQL 第2版 ゼロからはじめるデータベース操作]のサンプルコードを使用しています(https://www.shoeisha.co.jp/book/download/9784798144450/detail)

#### 挿入したデータを確認する

```
shop=# select * from shohin;

 shohin_id |   shohin_mei   | shohin_bunrui | hanbai_tanka | shiire_tanka |  torokubi
-----------+----------------+---------------+--------------+--------------+------------
 0001      | Tシャツ        | 衣服          |         1000 |          500 | 2009-09-20
 0002      | 穴あけパンチ   | 事務用品      |          500 |          320 | 2009-09-11
 0003      | カッターシャツ | 衣服          |         4000 |         2800 |
 0004      | 包丁           | キッチン用品  |         3000 |         2800 | 2009-09-20
 0005      | 圧力鍋         | キッチン用品  |         6800 |         5000 | 2009-01-15
 0006      | フォーク       | キッチン用品  |          500 |              | 2009-09-20
 0007      | おろしがね     | キッチン用品  |          880 |          790 | 2008-04-28
 0008      | ボールペン     | 事務用品      |          100 |              | 2009-11-11
(8 rows)
```

#### 作成したShohinテーブルを削除する
`DROP TABLE <テーブル名>`
```
shop=# DROP TABLE shohin;
```

#### テーブルに列を追加する
`ALTER TABLE <テーブル名> ADD COLUMN <列の定義>;`

#### テーブルの列を削除する
`ALTER TABLE <テーブル名> DROP COLUMN <列の定義>;`

#### テーブル名を変更する
`ALTER TABLE <テーブル名> RENAME TO <新しいテーブル名>;`