一般的相等连接: select * from a, b where a.id = b.id; 这个就属于内连接。 对于外连接: oracle中可以使用“(+) ”来表示,9
一般的相等连接:
select * from a, b where a.id = b.id;
这个就属于内连接。
对于外连接:
oracle中可以使用“(+) ”来表示,9i可以使用left/right/full outer join
left outer join:左外关联
select e.last_name, e.department_id, d.department_name
from employees e
left outer join departments d
on (e.department_id = d.department_id);
等价于
select e.last_name, e.department_id, d.department_name
from employees e, departments d
where e.department_id=d.department_id(+)
结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录。
right outer join:右外关联
select e.last_name, e.department_id, d.department_name
from employees e
right outer join departments d
on (e.department_id = d.department_id);
等价于
select e.last_name, e.department_id, d.department_name
from employees e, departments d
where e.department_id(+)=d.department_id
结果为:所有员工及对应部门的记录,包括没有任何员工的部门记录。
full outer join:全外关联
select e.last_name, e.department_id, d.department_name
from employees e
full outer join departments d
on (e.department_id = d.department_id);
结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录和没有任何员工的部门记录。
oracle8i是不直接支持完全外连接的语法,也就是说不能在左右两个表上同时加上(+),下面是在oracle8i可以参考的完全外连接语法
select t1.id,t2.id from table1 t1,table t2 where t1.id=t2.id(+)
union
select t1.id,t2.id from table1 t1,table t2 where t1.id(+)=t2.id
例子
select a.c1,b.c2 from a join b on a.c3 = b.c3;
select a.c1,b.c2 from a left join b on a.c3 = b.c3;
select a.c1,b.c2 from a right join b on a.c3 = b.c3;
select a.c1,b.c2 from a full join b on a.c3 = b.c3;
select a.c1,b.c2 from a join b on a.c3 != b.c3;
,