9、表连接的SQL99 标准
Update date:
1、sql99 的内连接标准
语法格式:
from a表 join b 表 on 表的连接条件 where 过滤条件;
from a表 inner join b 表 on 表的连接条件 where 过滤条件;
###
练习
显示 每个部门的名字 和 对应的地区的名字
select d.name,r.name
from s_dept d,s_region r
where d.region_id = r.id;
------------------------------------------------------------------------------------------
select d.name,r.name
from s_dept d join s_region r
on d.region_id = r.id;
------------------------------------------------------------------------------------------
select d.name,r.name
from s_dept d inner join s_region r
on d.region_id = r.id;
2、sql99 外连接标准
语法格式:
a 表 left outer join b表 on 连接条件 where 过滤条件;
a 表 right outer join b表 on 连接条件 where 过滤条件;
a 表 full outer join b表 on 连接条件 where 过滤条件;
###
左外连接
a 表 left outer join b 表 的意思就是 a 表发起连接,
a表发起连接就代表a表全部被匹配出来。
本质上 也是通过 null 记录进行匹配。
3、
练习
显示每个部门的名字 和 对应的地区的名字 没有地区编号的部门也要显示
select d.name,r.name
from s_dept d,s_region r
where d.region_id = r.id(+);
------------------------------------------------------------------------------------------
select d.name,r.name
from s_dept d left outer join s_region r
on d.region_id = r.id;
4、
练习
查询出所有的普通员工?
select distinct m.id,m.first_name
from s_emp e,s_emp m
where e.manager_id(+) = m.id and e.manager_id is null;
------------------------------------------------------------------------------------------
select distinct m.id,m.first_name
from s_emp m left outer join s_emp e
on e.manager_id = m.id where e.manager_id is null;
5、全外连接
全外连接 只是一个逻辑概念 全外连接的结果集 等于 左外连接的结果集 加上右外连接的结果集
然后排除重复的记录。
全外连接 在Oracle 中 是怎么实现的?
全外连接 不是通过两端 加 (+) 实现的,而是通过 union 实现的
union 是可以合并两个结果集 然后排重
union all 是 合并两个结果集 不排重
select id from s_emp union select id from s_emp;
select id from s_emp union all select id from s_emp;