表a
id | name |
1 | aaa |
2 | bbb |
id | name |
2 | 123 |
3 | 456 |
5 | 789 |
1.內連接
select * form a inner join b on a.id = b.id
結果 :a和b兩表中都有的數據,其餘數據全部捨棄。
id | name | id | name |
2 | bbb | 2 | 123 |
2.左外連接
select * from a left outer join b on a.id = b.id
結果:以左邊表的結果爲準,右邊表中不存在的以Null填充,計算順序是先執行內連接,然後在將左邊有的數據和右邊沒有的數據組合填充。
id | name | id | name |
1 | aaa | null | null |
2 | bbb | 2 | 123 |
3.自然連接
select * from a natural inner join b
結果:相同的連接屬性(id)去除掉,只顯示一次,不再重複顯示,與內連接差別不大
id | name | name |
2 | bbb | 123 |
4.右外連接
select * from a right outer join b on a.id = b.id
結果:以右邊的表的結果爲準,左邊的表沒有對應數據的以null填充
id | name | id | name |
2 | bbb | 2 | 123 |
null | null | 3 | 456 |
null | null | 5 | 789 |
以上left outer 和 right outer 中的outer 均可以省略
5. 全外連接
select * from a full outer join b using(id)
結果:綜合左外連接和右外連接的結果
id | name | id | name |
1 | aaa | null | null |
2 | bbb | 2 | 123 |
null | null | 3 | 456 |
null | null | 5 | 789 |
實際上我們比較常用的就是左外連接
另外按照我個人的理解,select * from a,b where a.id = b.id 應該也屬於內連接類型的