爲了能夠很好理解MySQL中表連接方式,以如下兩個表作爲例子演示:
- Table1:t1
id | name |
---|---|
1 | 張三 |
2 | 李四 |
4 | 王五 |
- Table2:t2
id | age |
---|---|
1 | 18 |
2 | 20 |
3 | 19 |
1. 笛卡爾積
兩表關聯,把左表的列和右表的列通過笛卡爾積的形式表達出來。
-
語法
select * from t1 join t2
-
結果
id | name | id | age |
---|---|---|---|
1 | 張三 | 1 | 18 |
2 | 李四 | 1 | 18 |
4 | 王五 | 1 | 18 |
1 | 張三 | 2 | 20 |
2 | 李四 | 2 | 20 |
4 | 王五 | 2 | 20 |
1 | 張三 | 3 | 19 |
2 | 李四 | 3 | 19 |
4 | 王五 | 3 | 19 |
2.外連接
2.1 左外連接:left join
兩表關聯,左表全部保留,右表關聯不上用null表示。
- 示意圖
-
語法
select * from t1 left join t2 on t1.id = t2.id
-
結果
id | name | id | age |
---|---|---|---|
1 | 張三 | 1 | 18 |
2 | 李四 | 2 | 20 |
4 | 王五 | null | null |
2.2 右外連接
兩表關聯,右表全部保留,左表關聯不上用null表示。
- 示意圖
- 語法
select * from t1 right join t2 on t1.id = t2.id
- 結果
id | name | id | age |
---|---|---|---|
1 | 張三 | 1 | 18 |
2 | 李四 | 2 | 20 |
null | null | 3 | 19 |
2.3 全連接:full join
兩表關聯,兩表的內容均保留,沒有關聯的字段用null表示。
- 示意圖
- 語法
oracle裏面有full join,但是在mysql中沒有full join。我們可以使用union來達到目的。
(1)oracle
select * from t1 full join t2 on t1.id = t2.id
(2)mysql
select * from t1 left join t2 on t1.id = t2.id
union
select * from t1 right join t2 on t1.id = t2.id;
結果
id | name | id | age |
---|---|---|---|
1 | 張三 | 1 | 18 |
2 | 李四 | 2 | 20 |
4 | 王五 | null | null |
null | null | 3 | 19 |
3. 內連接:inner join
兩表關聯,保留兩表中交集的記錄。
- 示意圖
- 語法
select * from t1 inner join t2 on t1.id = t2.id;
- 結果
id | name | id | age |
---|---|---|---|
1 | 張三 | 1 | 18 |
2 | 李四 | 2 | 20 |
4. 更多的連接方式
4.1 左表獨有
兩表關聯,查詢左表獨有的數據,類似於集合中的t1 - t2。
- 示意圖
- 語法
select * from t1 left join t2 on t1.id = t2.id where t2.id is null;
- 結果
id | name | id | age |
---|---|---|---|
4 | 王五 | null | null |
4.2 右表獨有
兩表關聯,查詢右表獨有的數據,類似於集合中的t2 - t1。
- 示意圖
- 語法
select * from t1 left join t2 on t1.id = t2.id where t1.id is null;
- 結果
id | name | id | age |
---|---|---|---|
null | null | 3 | 19 |
4.3 並集去交集
兩表關聯,取並集然後去交集。
- 示意圖
- 語法
select * from t1 left join t2 on t1.id = t2.id where t2.id is null
union
select * from t1 right join t2 on t1.id = t2.id where t1.id is null;
- 輸出
id | name | id | age |
---|---|---|---|
4 | 王五 | null | null |
null | null | 3 | 19 |