当前位置:网站首页>oracle中联表相关思考
oracle中联表相关思考
2022-08-08 09:03:00 【赟文武】
联表的核心在于发掘各个表之间内在或隐含的联系,利用这些联系将表联系起来
笛卡尔积(“所有连接的基础”)
不找表之间关系,仅仅是将A表与B表数据进行一个简单的贴合
--该语句无任何实际意义因其数据量小故选择该表作为演示之用
select * from deopt d1,dept d2;
根据查询到的结果我们不难发现笛卡尔积是拿d1表中的每一条数据去跟d2表的每一条数据进行连接,其结果行数列数如下:
- 联表之后的数据列数为表d1+表d2的列数之和
- 联表之后的数据行数为表d1*表2的行数之积
用户可将内连接、自连接、外连接均理解为是带where条件的笛卡尔积,此处的条件就是各个表之间的联系,例如两个表中相同的列了,又比如一个表中数据是在另一个表两个列之间的范围之中了
举个栗子吧,emp表中每个员工都有所属部门,dept表中每个部门同样有部门编号该列,又比如,emp表中工资列是处在salgrade表中losal和hisal之间的数
内连接
内连接是只显示符合连接条件的数据
--连接emp表与dept表
select * from emp e,dept d where e.deptno=d.deptno;
select * from emp e inner join dept d on e.deptno=d.deptno;
上述两条语句等效,在此重点说一下where的执行逻辑:
- 首先from emp e,dept d产生两表的笛卡尔积
- 根据where条件对产生的数据进行筛选
- 根据select之后from之前的列名显示需要展示的列
自连接
自连接是表与表本身有某种联系,需要将本表从形式上看作两个表连接的一种内连接
举个例子吧,emp表中有empno和mgr两个列,当我们把empno看作主键的时候,该表实际意义可以看作员工表;当我们把mgr看作主键的时候,该表的实际意义可以看作上级领导表
--自连接emp
select * from emp 员工表,emp 领导表 where 员工表.mgr=领导表.empno;
select * from emp 员工表 inner join emp 领导表 on 员工表.mgr=领导表.empno;
外连接
(1)左外连接——左表中有与右表匹配不上的数据时候,左表数据仍然显示,右表中该条数据全用null代替
--左外连接emp、dept表
select * from emp e,dept d where d.deptno(+)=e.deptno;
select * from emp e left outer join dept d on d.deptno=e.deptno;
(2)右外连接——右表中有与左表匹配不上的数据时候,右表数据仍然显示,左表中该条数据全用null代替
--右外连接emp、dept表
select * from emp e,dept d where d.deptno=e.deptno(+);
select * from emp e right outer join dept d on d.deptno=e.deptno;
(3)全外连接——左外右外连接的一个综合
--全外连接emp、dept表
select * from emp e full outer join dept d on d.deptno=e.deptno;
自然连接(“全自动”)
不用用户指定字段,全自动匹配相应字段
--自然连接emp与dept
select * from emp natural join dept;
不等连接
不等连接与等值连接的区别在于两个表连接条件的不同,等值连接的联表条件为等于,不等连接的联表条件不能为等于
--连接emp与salgrade表
select * from emp e,salgrade s where e.sal between s.losal and s.hisal;
select * from emp e inner join salgrade s on e.sal between s.losal and s.hisal;
边栏推荐
猜你喜欢
随机推荐
hdu4635 Strongly connected(tarjan计算强连通通分量+缩点+思想)
VPP源地址NAT
At the time of data intelligence, Jiuzhang Yunji DataCanvas won the "Most Investment Value Company"
百度飞浆EISeg高效交互式标注分割软件的使用教程
67:第五章:开发admin管理服务:20:开发【解冻/冻结用户,接口】;(用户状态变更后,需要刷新用户状态,即变更用户会话信息:我们一般通过“删除redis中会话信息,强制用户重新登录“来做的;)
【项目问题】Ionic开发移动端app,手把手教你如何打包生成apk
面试官:工作中用过锁么?说说乐观锁和悲观锁的优劣势和使用场景
斯坦福21秋季:实用机器学习【第5章】
jupyter lab内终端从sh变为bin/bash(切换conda操作)
2022/8/7
Data Governance (3): Data Quality Management
数据库调优:Mysql索引对group by 排序的影响
力扣142-环形链表——链表&快慢指针法&哈希表法
攻防世界——web2
今日分享如何提交一个BUG
等式变换(2015届华为校园招聘机试题第三题 )
LabVIEW前面板和程序框图的最大尺寸
DVWA全级别详细通关教程
2.5W 字详解线程与锁了,面试随便问!!
HyperLynx(三)传输线类型及相关设置