Visual explanation of MySQL joins
Jump to navigation
Jump to search
使用維恩圖(Venn diagram)視覺化解釋 MySQL Join
準備測試資料
CREATE TABLE table_a (id int NOT NULL PRIMARY KEY, name varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL); INSERT INTO table_a (id, name) VALUES (1, '小一'), (2, '小二'), (3, '小三'), (4, '小四') ; CREATE TABLE table_b (id int NOT NULL PRIMARY KEY, gender varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL); INSERT INTO table_b (id, gender) VALUES (1, '女'), (3, '女'), (5, '男'), (6, '不明') ;
預覽測試資料
|
table_a |
table_b |
狀況1: 交集的資料
MySQL 資料庫查詢:
SELECT * FROM table_a INNER JOIN table_b ON table_a.id = table_b.id;
預覽輸出資料
1|小一|1|女 3|小三|3|女
狀況2-1: 相對差集的資料,存在於 a,但是不存在於 b
存在於資料表 table_a ,但是不存在於 table_b
MySQL 資料庫查詢:
SELECT * FROM table_a LEFT JOIN table_b ON table_a.id = table_b.id WHERE table_b.id IS NULL;
預覽輸出資料
2|小二|NULL|NULL 4|小四|NULL|NULL
狀況2-2: 相對差集的資料,存在於 b,但是不存在於 a
存在於資料表 table_b ,但是不存在於 table_a
MySQL 資料庫查詢:
SELECT * FROM table_a RIGHT JOIN table_b ON table_a.id = table_b.id WHERE table_a.id IS NULL;
預覽輸出資料
NULL|NULL|5|男 NULL|NULL|6|不明
狀況3: 聯集的資料
MySQL 資料庫查詢 (相當於 SQL 的 FULL OUTER JOIN):
SELECT * FROM table_a LEFT JOIN table_b ON table_a.id = table_b.id UNION SELECT * FROM table_a RIGHT JOIN table_b ON table_a.id = table_b.id;
預覽輸出資料
1|小一|1|女 3|小三|3|女 2|小二|NULL|NULL 4|小四|NULL|NULL NULL|NULL|5|男 NULL|NULL|6|不明
狀況4: 對稱差的資料,只存在於 a 或 b 其中一個
對稱差 (Symmetric difference)的資料,只存在於 table_a 或 table_b 其中一個
MySQL 資料庫查詢:
SELECT * FROM table_a LEFT JOIN table_b ON table_a.id = table_b.id WHERE table_a.id IS NULL OR table_b.id IS NULL UNION SELECT * FROM table_a RIGHT JOIN table_b ON table_a.id = table_b.id WHERE table_a.id IS NULL OR table_b.id IS NULL;
預覽輸出資料
2|小二|NULL|NULL 4|小四|NULL|NULL NULL|NULL|5|男 NULL|NULL|6|不明
參考資料
- A Visual Explanation of SQL Joins
- [MySQLleft, right, inner, outer join 使用方法 - 小惡魔 - 電腦技術 - 工作筆記 - AppleBOY]
- 維基百科:數學專題/集合論 - 維基百科,自由的百科全書
圖片素材