はじめに
公式のテーブルがわかりにくいと感じ、自分でテーブルを作成し動作確認を行った結果、公式がわかりやすいということがわかった。という記事です。
今回やるのは、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
2つ目の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が共通カラムなので、実行できるかと思いましたが、できませんでした。理由は自分が作成した2つのテーブルの共通カラムは、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