表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 应该也属于内连接类型的