当前位置: 首页 > news >正文

ORACLE多表查询

1 多表查询概念

所谓多表查询是相对单表而言的,指从通过关联字段(一般为外键关联)从多个数据表中查询数据。

2 无条件多表查询

无条件多表查询是将各表的记录以“笛卡尔”积的方式组合起来。

如scott.dept表共有4条记录,scott.emp表共有14条记录,其“笛卡尔”积将有4*14=56条记录。

select emp.empno,emp.ename,emp.deptno,dept.dnam e,dept.loc
from emp,dept;
  • “笛卡尔”积

如果连接查询中的两个表没有where子句中指定的连接条件或连接条件无效,则ORALE会返回这两个表的“笛卡尔”积。
即:将一个表的每一行和另外一个表的每一行组合在一起。
笛卡尔积会产生大量的无效数据,在多表关联查询时,要尽量避免出现笛卡尔积,简单的说就是一定要使用where子句提供正确的条件

3 内连接

  • 语法:
select 表名(别名).查询字段(A,B...)
from 表A,表B...
where 表A.字段=表B.字段 --通常为外键

3.1 等值多表查询

内连接即为等值多表查询

按照等值的条件查询多个数据表中关联的数据。要求关联的多个数据表的某些字段具有相同的属性,即具有相同的数据类型、宽度和取值范围。

  • 查询所有人的信息,包括其所在部门的信息,没有部门的员工除外
select emp.empno,emp.ename,emp.deptno,dept.dname,dept.loc
from emp,dept
where emp.deptno=dept.deptno
order by emp.empno;

3.2 非等值多表查询

  • 仅做示例,不要轻易尝试
select emp.empno,emp.ename,emp.deptno,dept.dname,dept.loc
from emp,dept
where emp.deptno!=dept.deptno;

3.3 别名的应用

将查询结果集当成一张表进行使用,但需要给相应结果集起别名

  • 查询员工FORD的上级
select emp.ename,boss.ename
from emp,(select empno,ename from emp) boss
where emp.mgr= boss.empno and emp.ename = 'FORD';

3.4 自连接

将同一张表当成具有不同用处的多张表进行使用

  • 查询每个人的上司的名字,不包括上司为null的员工
select e.empno 员工号,e.ename 员工名,m.empno 上司工号,m.ename 上司名
from emp e,emp m
where e.mgr = m.empno;

4 外连接

外连接即是将目标表中不符合某个连接条件的记录也显示出来。

4.1 左外连接

关键字左边的表为主要查询(不符合条件的也会出现在结果集中)

  • 查询所有员工以及其所在部门的信息,包括没有部门的员工
select e.*,d.*
from emp e
left join dept d
on e.deptno=d.deptno;
--可以使用+符号代替外连接符,(+)所在边的另一边就是主要显示的表
select e.*,d.* from emp e,dept d
where e.deptno=d.deptno(+);

4.2 右外连接

关键字右边的表为主要查询(不符合条件的也会出现在结果集中)

  • 查询所有部门的信息及部门下的员工,包括没有员工的部门
select e.*,d.*
from emp e
right join dept d
on e.deptno=d.deptno;
select e.*,d.* from emp e,dept d
where e.deptno(+)=d.deptno;

4.3 全外连接

2张表中不符合条件的记录都会显示,不支持(+)

  • 查询所有部门和所有员工的信息,包括没有部门的员工和没有员工的部门
select e.*,d.*
from emp e
full join dept d
on e.deptno=d.deptno;
http://www.dtcms.com/a/315808.html

相关文章:

  • 07-一般的树
  • Opencv: 不同函数所支持的Mat类型汇总
  • C语言——编译和链接
  • 【RabbitMQ】高级特性—持久性、重试机制详解
  • GO如何设置代理
  • Python 中的 Matplotlib:安装与使用指南
  • 雷达水位监测站:让水位监测变得轻松又可靠!
  • Linux驱动25 --- RkMedia音频API使用增加 USB 音视频设备
  • 基于springboot的宠物领养系统的设计与实现(源码+论文+PPT答辩+开题报告)
  • Redis存储string里面embstr和raw格式区别
  • 新浪新闻获取
  • Redis里面什么是sdshdr,可以详细介绍一下吗?
  • Erdős–Rényi (ER) 模型
  • 克莱姆法则(Cramer‘s Rule)求解两条直线交点坐标的步骤
  • Redis 常用数据类型 (下)
  • AR眼镜成本挑战与突破路径:技术创新引领产业变革
  • Opencv: cv::Mat支持的类型汇总
  • 当送餐机器人学会“思考“:Deepoc如何赋予机器人具身智能
  • AI-03a1.Python深度学习-Tensorflow和Keras入门
  • eBay退货管理深度解析:筑牢售后防线,驱动账号长效稳健发展
  • AutoSar AP LT规范中 建模消息和非建模消息都可以使用LogInfo() API吗?
  • visual studio 历史版本安装
  • FLAN-T5:大规模指令微调的统一语言模型框架
  • 为什么要选择时序数据库IoTDB?
  • Redis实现可重入锁
  • “Why“比“How“更重要:层叠样式表CSS
  • 《C++初阶之STL》【模板参数 + 模板特化 + 分离编译】
  • @【JCIDS】【需求论证】联合能力集成与开发系统知识图谱
  • 机器学习通关秘籍|Day 03:决策树、随机森林与线性回归
  • 【工程化】tree-shaking 的作用以及配置