sql中常用的join包括以下几种:
cross join
inner join
left join(left outer join)
right join(right outer join)
full join (full outer join)
现有数据表employee和CompanyInfor,如下所示
1.cross join
cross join 为两张表的笛卡尔乘积,连接后返回结果集的行数为两张表行数的乘积。
select a.*,b.* from employee a cross join CompanyInfor b ----等价于----- select a.*,b.* from employee a ,CompanyInfor b ---此时返回结果集的行数为4*4
2.inner join
inner join 返回的结果集是 在cross join 返回的结果集的基础上,去掉不满足连接条件的。
select a.*,b.* from employee a inner join CompanyInfor b on a.companyId=b.id ---等价于--- select a.*,b.* from employee a cross join CompanyInfor b where a.companyId=b.id ---等价于--- select a.*,b.* from employee a ,CompanyInfor b where a.companyId=b.id
3.left join (left outer join)
left join 是在inner join的结果集上加上左表中没被选上的行,行的右表部分每个字段都用NUll填充。
left join 左边的表为主表,返回的结果集的行数为左边表的行数。
---a表为主表,返回的结果集的行数为a表的行数--- select a.*,b.* from employee a left join CompanyInfor b on a.companyId=b.id
4.right join(right outer join)
right join 是在inner join的结果集上加上右表中没被选上的行,行的左表部分每个字段都用NUll填充。
right join 右边的表为主表,返回的结果集的行数为右边表的行数。
--b表为主表,返回的结果集的行数为b表的行数---- select a.*,b.* from employee a right join CompanyInfor b on a.companyId=b.id
5.full join(full outer join)
full join返回的结果集为left join和right join结果集的并集
select a.*,b.* from employee a full join CompanyInfor b on a.companyId=b.id