【Oracle表连接】

Oracle表连接

92、99

笛卡尔积(92)

交叉连接:

--92:查询所有员工的信息以及员工所在部门信息,不重复的信息可以不用别名
select * from emp,dept;
select e.*,d.deptno,d.dname from emp e,dept d;--使用别名

等值连接

92:

--92等值连接
select * from emp e,dept d where e.deptno = d.deptno
select empno,ename,sal,e.deptno,dname from emp e,dept d where e.deptno = d.deptno
--查询20部门员工的信息以及员工所在部门信息
select empno,ename,sal,e.deptno,dname from emp e,dept d where e.deptno = d.deptno and d.deptno =20

非等值连接

92:

判断区间,判断范围的条件( > < != <>between and)。
--查询每个员工的员工信息以及薪资等级信息
select * from emp e,salgrade s where sal between losal and hisal

自连接: 特殊的等值连接 (来自于同一张表)

自连接必须对至少一个表起别名
--查询有上级的员工信息以及上级经理人信息
--数据 : 员工信息  经理人信息
--来源 : 员工表 emp e1 ,经理人表 emp e2
select * from emp e1,emp e2 where e1.mgr = e2.empno;

92:

内连接 :

满足连接条件查询到不满足过滤掉

外连接 :

某一个数据源中的数据不满足连接条件的时候也能显示

左外连接 | 左连接 :

from后面主表在左边

右外连接 | 右连接 :

from后面主表在右边

主表 :

主表中的数据无论是否满足连接条件都能显示
92语法 : 在连接条件位置,主表的对面添加(+)
--查询所有员工信息以及上级经理人信息
--主表 : 员工表
select * from emp e1,emp e2 where e1.mgr=e2.empno(+);
select * from emp e1,emp e2 where e1.mgr(+)=e2.empno;

表连接(99)

自然连接(主外键、同名列) natural join -->等值连接
join using连接(同名列) -->等值连接
[inner]join on 连接 -->等值连接 非等值 自连接 (解决一切) 关系列必须区分
交叉连接 cross join --->笛卡尔积
left|right [outer] join on|using -->外连接
full join on|using -->全连接 满足直接匹配,不满足 相互补充null ,确保 所有表的记录 都至少出
现一次

99:

自然连接(自动等值连接):natural join
指定字段等值连接: join...using
等值、非等值都可以***:from 数据源1 join 数据源2 on 连接条件
--99自动等值连接//去重
select * from emp natural join dept
--注意: 在自然连接中同名字段的不能使用限定词
select ename,deptno,dname from emp natural join dept;
--指定哪个同名字段做等值连接  join...using
select ename,deptno,dname from emp join dept using (deptno);

--等值、非等值都可以:from 数据源1 join 数据源2 on 连接条件
select ename,e.deptno,dname from emp e join dept d on e.deptno = d.deptno where d.deptno =30

交叉连接

cross join ;
--99
select * from emp cross join dept ;

–99
内连接 (inner) join
外连接:左外连接、右外连接

--有员工存在的员工信息 与上级信息
select * from emp e1 inner join  emp e2 on e1.mgr = e2.empno
--部门编号为30的员工 员工名称 部门名称 工资等级 上级名称
select *
  from emp e1
  join dept d
    on e1.deptno = d.deptno
  join salgrade sa
    on sal between losal and hisal
  join emp e2
    on e1.mgr = e2.empno
 where e1.deptno = 30
 order by e1.sal desc;

--内连接 : (inner) join 
--外连接 : 主表中的数据无论是否满足连接条件都显示
--左外连接|左连接 : left join
--右外连接|右连接 : right join
--全连接 : 两张表都是主表 full join
--所有员工存在的员工信息 与上级信息

--主表 :  员工
select * from emp e1 left join emp e2 on e1.mgr=e2.empno;
select * from emp e1 right join emp e2 on e1.mgr=e2.empno;
select * from emp e1 full join emp e2 on e1.mgr=e2.empno;

总结:

···
内连接:只返回两个表相关数据的记录 ,可用 join / inner join 关键字表示
自然连接(自动等值连接):natural join
等值、非等值连接:join on
指定字段连接 : join using
外连接:左外连接、右外连接、全连接

左外连接:from后面左边当作主表,主表无论是否满足条件保留全部(记录)数据,以及右侧的表中与左侧表中相关联的记录。右边表中(+),如果右边表中没有与左边表中某些记录相关联的记录,则返回NULL值。可以使用left join或left outer join关键字来表示。

右外连接:返回右边的表中所有记录,以及左侧的表中与右侧表中相关联的记录。如果左边表中没有与右边表中某些记录相关联的记录,则返回NULL值。左边表中(+),可以使用RIGHT JOIN或RIGHT OUTER JOIN关键字来表示。

全连接:返回左边表中所有记录和右边表中所有记录,如果左边表中某些记录没有与右边表中的任何记录相关联,则返回NULL值。可以使用FULL JOIN或FULL OUTER JOIN关键字来表示。
···

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值