1:数据准备
select * from act_dep;
select * from act_user
2:内连接查询
根据指定的条件满足条件的数据出现在结果集
先从第一个表获取到第一条记录,然后检索第二个表满足on后条件的数据记录连成结果集
再从第一个表获取到第二条记录...
直至第一张表中所有记录处理完毕为止。
两个表的记录 无法满足关联条件的时候不出现在结果集
inner join 内连接查询
select * from act_user u inner join act_dep d on u.depid=d.id
select * from act_dep d inner join act_user u on u.depid=d.id
--结果同上,内连接表顺序不影响结果集,仅仅列顺序不同
--oracle扩展方式写法
select * from act_user u,act_dep d
where u.depid=d.id
3:外连接查询
3.1 外连接查询
3.1.1 左外连接
A left join B 取 A 全部,B 没有对应的值为 null。
左外连接:在内连接基础上,左侧表不符合连接条件的记录出现在结果集,右侧表不满足条件的NULL显示
select * from act_user u left join act_dep d
on d.id=u.depid and d.id=1
select * from act_dep d left join act_user u
on d.id=u.depid and d.id=1
3.1.2 右外连接
A right join B 取 B 全部 A 没有对应的值为 null。
--右外连接:在内连接基础上,右侧表不符合连接条件的记录出现在结果集,左侧不满足条件的NULL显示
select * from act_user u right join act_dep d
on d.id=u.depid and d.id=1
select * from act_dep d right join act_user u
on d.id=u.depid and d.id=1
--备注:A left join B 与 B right join A 在条件相同的情况下结果集相同
--oracle扩展写法
左边不带+即左外连接 右边不带+ 即右外连接
不带+号的一侧,所有记录出现在结果集,带+表不满足条件的记录null显示
左外连接
select * from act_user u,act_dep d
where u.depid=d.id(+);
select * from act_dep d,act_user u
where d.id=u.depid(+);
右外连接
select * from act_user u,act_dep d
where u.depid(+)=d.id;
select * from act_user u,act_dep d
where d.id(+)=u.depid
4:全外连接
A full outer join B 取并集
FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.
FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。
select * from act_user u
full outer join act_dep d
on u.depid=d.id;
结果集