-- 交叉连接
select * from emp e,dept d; -- 192
select * from emp e cross join dept d; -- 199
-- 内连接
select *
from emp e,dept d
where e.deptno = d.deptno; -- 192
select *
from emp e
inner join dept d
on e.deptno=d.deptno; -- 199 inner 可以省略
select *
from emp e
join dept d
on e.deptno=d.deptno; -- 199 inner 可以省略 等值连接
select *
from emp e
join salgrade s
on e.sal between s.losal and s.hisal; -- 199 不等值连接
select e.*,
zh.rs
from emp e
inner join emp_zh zh
on e.sal = zh.max_sal -- 一个部门最大薪资对应了多个同部门的薪资,这种情况叫做数据发散(条件不严谨)
and e.deptno = zh.deptno;
-- 外连接 左外连接 右外连接 全外连接
-- 左外连接 把on匹配成功的数据显示出来同时要显示left join左边表的内容
select *
from a_j t1
left join b_j t2
on t1.id=t2.id; -- 199
select *
from a_j e ,b_j d
where e.id = d.id(+); -- 192 (+)放在b_j的id那边
-- 右外连接 把on匹配成功的数据显示出来同时要显示right join右边表的内容
select *
from a_j t1
right join b_j t2
on t1.id=t2.id; -- 199
select *
from a_j e ,b_j d
where e.id(+) = d.id; -- 192 (+)放在a_j的id那边
-- 全外连接 full [outer] join
select *
from a_j t1
full join b_j t2
on t1.id=t2.id; -- 199
select *
from a_j e ,b_j d
where e.id = d.id(+)
union
select *
from a_j e ,b_j d
where e.id(+) = d.id; -- 192
-- 注:筛选条件用and和where的区别
-- 内连接 效果一样,对关联后的所有数据进行筛选显示;
-- 外连接 and 数据保留但只对符合条件的数据关联匹配 where 对关联后的所有数据进行筛选显示;