Mysql的几种连接(join)方式总结、简单明了

练习题
参考链接
参考链接

笛卡尔积

select * from A join B

结果条数为count(A)*count(B)

内连接

只有一个join关键字时,默认内连接

select * from A inner join B  on A.id=B.id  

和我们平常所写的

select * from A,B where A.id=B.id

结果一样,查询交集(第一个是显示,第二个是隐示)
结果记录条数为count(A、B共有)

左连接/左外连接

#outer可省

select A.id,B.id from A left outer join B on A.id = B.id

左边的表(A)中的id值会全部展示,结果条数就是A表中所有的条数,B中没有和A中的id值对应时,用NULL表示。
结果记录条数count(A)

左表独有

和左连接的区别就是,去除左连接结果中两表的公共部分

select A.id,B.id from A left join B on A.id=B.id where B.id is null

结果记录条数为count(A)-count(A、B共有)

右连接/右外连接

#outer可省

select A.id,B.id from A right outer join B on A.id = B.id

和左连接差不多(反过来了),只是主表是右边的表了(B),右边的表全部保留
结果记录条数为count(B)

右表独有

select A.id,B.id from A right join B on A.id=B.id where A.id is null

结果记录条数count(B)-count(A、B共有)

全连接

oracle里面有full [outer] join,但是在mysql中没有full [outer] join。我们可以使用union来达到目的。union会自动去重用 union all不会去重

select A.id,B.id from A left join B on A.id=B.id
union
slect A.id,B.id from A right join B on 
A.id=B.id

结果条数为count(A、B公共部分)+count(A独有部分)+count(B独有部分)。或count(A)+count(B)-count(A、B共有)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章