首先列出各种连接及其区别,后面给出每种连接的sql语句和查询结果:
1. inner join
内连接:只有两个表相匹配的行才能在结果集中出现。
2、outer join
(1)left join:左外连接:左表的表不加限制
(2)right-join:右外连接:右表的表不加限制
(3)full-join:全外连接:左右两边的表都不加限制
下面的具体的例子:
数据表结构如下所示:
department表:
编号 名称
1 财务
2 销售
3 客服
employee表:
编号 姓名 所属部门编号
1 张三 1
2 李四 1
3 王五 3
4 赵六 3
5 李八 4
下给出每种连接的sql语句,和最终结果:
1、内连接:
sql语句:select department.* from department inner join employee on department.编号=employee.所属部门编号;
结果: (明显,employee表中没有销售,所以2 销售这行和5 李八 4这行压根不会输出)
2、外连接中的左连接:
sql语句:
select d.*,isnull(e.num,0) from department d
left join
(
select 所属部门编号,count(*) num from employee group by 所属部门编号)e on e.所属部门编号=d.编号;
结果:(2 销售 这一行仍然显示但是4 所属部门编号不显示)
3、外连接中的右连接:
sql语句:
select d.*,e.所属部门编号,isnull(e.num,0)num from department d
right join
(
select 所属部门编号,count(*) num from employee group by 所属部门编号)e on e.所属部门编号=d.编号;
结果:(所属部门编号为4的这一行仍然显示,但是2 销售不显示)
4、外连接中的全外连接:
sql语句:
select d.*,e.所属部门编号,isnull(e.num,0)num from department d
full join
(
select 所属部门编号,count(*) num from employee group by 所属部门编号)e on e.所属部门编号=d.编号;