Postgres JOIN体験記

## はじめに
[公式](https://www.postgresql.jp/docs/9.2/queries-table-expressions.html)のテーブルがわかりにくいと感じ、自分でテーブルを作成し動作確認を行った結果、公式がわかりやすいということがわかった。という記事です。
今回やるのは、7.2.1.1. 結合テーブルです。

## テーブル準備
1つ目のusersテーブル
```
CREATE TABLE users (
    id INT,
    name VARCHAR(255),
    company_id INT
);

INSERT INTO users (id, name, company_id) VALUES 
(1, 'saito', 1),
(2, 'suzuki', 2),
(3, 'tanaka', 4);

SELECT * FROM users;
 id |  name  | company_id 
----+--------+------------
  1 | saito  |          1
  2 | suzuki |          2
  3 | tanaka |          4
```

２つ目のcompanysテーブル
```
CREATE TABLE companys (
    id INT,
    name VARCHAR(255)
);

INSERT INTO companys (id, name) VALUES 
(1, 'JAL'),
(2, 'ANA'),
(3, 'peach');

SELECT * FROM companys;
 id | name  
----+-------
  1 | JAL
  2 | ANA
  3 | peach
```
## JOINしてみる

### ①  CROSS JOIN
```
SELECT * FROM users CROSS JOIN companys;
 id |  name  | company_id | id | name  
----+--------+------------+----+-------
  1 | saito  |          1 |  1 | JAL
  1 | saito  |          1 |  2 | ANA
  1 | saito  |          1 |  3 | peach
  2 | suzuki |          2 |  1 | JAL
  2 | suzuki |          2 |  2 | ANA
  2 | suzuki |          2 |  3 | peach
  3 | tanaka |          4 |  1 | JAL
  3 | tanaka |          4 |  2 | ANA
  3 | tanaka |          4 |  3 | peach

```

### ② JOIN ON
```
SELECT * FROM users JOIN companys ON users.id = companys.id;
 id |  name  | company_id | id | name  
----+--------+------------+----+-------
  1 | saito  |          1 |  1 | JAL
  2 | suzuki |          2 |  2 | ANA
  3 | tanaka |          4 |  3 | peach
```

### ③ NATURAL JOIN
確認できませんでした、、、
idが共通カラムなので、実行できるかと思いましたが、できませんでした。理由は自分が作成した２つのテーブルの共通カラムは、idとnameでした。nameも両方で同じ値のデータ必要でした。
```
SELECT * FROM users NATURAL INNER JOIN companys;
 id | name | company_id 
----+------+------------
(0 rows)
```
### ④ LEFT JOIN ON
```
SELECT * FROM users  LEFT JOIN companys ON users.id = companys.id;
 id |  name  | company_id | id | name  
----+--------+------------+----+-------
  1 | saito  |          1 |  1 | JAL
  2 | suzuki |          2 |  2 | ANA
  3 | tanaka |          4 |  3 | peach
```

### ⑤ LEFT JOIN USING
```
SELECT * FROM users  LEFT JOIN companys USING(id);
 id |  name  | company_id | name  
----+--------+------------+-------
  1 | saito  |          1 | JAL
  2 | suzuki |          2 | ANA
  3 | tanaka |          4 | peach
```

### ⑥ RIGHT JOIN
```
SELECT * FROM users  RIGHT JOIN companys ON users.id = companys.id;
 id |  name  | company_id | id | name  
----+--------+------------+----+-------
  1 | saito  |          1 |  1 | JAL
  2 | suzuki |          2 |  2 | ANA
  3 | tanaka |          4 |  3 | peach
```

### ⑦ FULL JOIN
```
SELECT * FROM users  FULL JOIN companys ON users.id = companys.id;
 id |  name  | company_id | id | name  
----+--------+------------+----+-------
  1 | saito  |          1 |  1 | JAL
  2 | suzuki |          2 |  2 | ANA
  3 | tanaka |          4 |  3 | peach
```


## 感想
公式のテーブルはわかりにくいと考えて自分でテーブル作成しましたが、公式の方が明らかにわかりやすいということがわかりました。
自分で作成したテーブルでは確認できないコマンドもあったので、テーブル名だけ変えるぐらいにして、まずは公式に従った方法がいいですね。それに加え、カラム名は不適切だと記事を書いていて思いました。次はダブらないようにしたいです。

## 参考
公式↓
https://www.postgresql.jp/docs/9.2/queries-table-expressions.html
大変わかりやすい↓
https://qiita.com/ysda/items/0d473e644409e45965d7
youtubeで↓
https://youtu.be/kHROFydu3JA?si=6DefyD-zpERRvzvP