雖然項目一直在寫左外連接、內連接等等的sql,但是其實對具體的實現還是不太清楚,接下來跟我一起來了解一下吧!
1. INNER JON 內連接 |
對應的sql語句
select <select_list>
from table A a
INNER JOIN Table B b
ON A.key=B.key
實例
表1
執行結果
表2
執行結果
內連接
執行結果
分析
- 可以看出,表1有6列,表2有3列,內連接有9列,說明內連接兩表的列拼接起來
- 有重複的列username,並沒有合併,都顯示出來了
- ON後爲連接條件,內連接只保留條件公有部分,就是保留a.id和b.user_id相等的行,即id=28,use_id=28的行保留下來
小結
內連接只有兩者的公有部分
2. LEFT JON 左外連接 |
圖解
對應的sql語句
select <select_list>
from table A a
LEFT JOIN Table B b
ON A.key=B.key
實例
分析
- 左外連接就是兩表的列拼接起來,A表的數據都要,B表沒有的行補NULL
3. Right JION 右外連接 |
圖解
對應的sql
select <select_list>
from table A a
RIGHT JOIN Table B b
ON A.key=B.key
實例
sql
執行結果
分析
- B表數據都要,A表沒有的自動補全
4. Right JION 右連接 |
圖解
對應的sql
select <select_list>
from table A a
LEFT JOIN Table B b
ON A.key=B.key
where A.key=NULL
實例
執行結果
5. LEFT JION 左連接 |
圖解
對應的sql
select <select_list>
from table A a
LEFT JOIN Table B b
ON A.key=B.key
where B.key=NULL
實例
執行結果
6. 全外連接 |
圖解
對應的sql
select <select_list>
from table A a
OUTER JOIN Table B b
ON A.key=B.key
實例
執行結果
小結
mysql不能直接操作全外連接,需要使用左外連接與右外連接的兩個結果集進行合併並去除重複。union 去重,union all 不去重。
7. 交叉外連接 |
圖解
對應的sql
select <select_list>
from table A a
OUTER JOIN Table B b
ON A.key=B.key
where B.key=NULL
AND A.key=NULL
實例
執行結果
暫不支持