笛卡尔积
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共有)