当前位置: 首页 > 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.lryc.cn/news/611346.html

相关文章:

  • GaussDB 常见问题-集中式
  • 【带root权限】中兴ZXV10 B863AV3.2-M_S905L3A处理器刷当贝纯净版固件教程_ROM包_刷机包_线刷包
  • Java set集合讲解
  • 最长连续序列(每天刷力扣hot100系列)
  • python学智能算法(三十三)|SVM-构建软边界拉格朗日方程
  • 利用 Radius Resource Types 扩展平台工程能力
  • avue---upload 图片上传
  • Vue3核心语法进阶(Props)
  • 从汇编角度揭秘C++构造函数(1)
  • 【Lua】题目小练8
  • 超越注意力机制
  • Augmodo AI:零售门店智能货架管理平台
  • 8月5号打卡
  • Java: jwt 入门介绍(Introduction to JSON Web Tokens)
  • ENS-317 Modbus TCP / 通用模式网关
  • Shader开发(七)创建第一个Shader项目
  • 完整设计 之2: 变形金刚机器人Transformer
  • 最优化中常见的优化理论
  • Guava 与 Caffeine 本地缓存系统详解
  • Windows 11 使用Windows Hello使用人脸识别登录失败,重新录入人脸识别输入PIN后报Windows Hello安装程序白屏无响应的问题解决
  • nodejs 编码初体验
  • 艺术性与真实感并存:FLUX.1 Krea [dev] 开源模型速览
  • muc中的电压调节和电源控制回路?
  • 网络相关(AI回答)
  • Linux的NFS与Autofs配置指南
  • linux定时器管理 timer_*系统调用及示例
  • table行内--图片预览--image
  • 并发编程的三要素是什么
  • Claude Code实战体验:AI智能编程助手如何重塑开发工作流?
  • 鸿蒙开发--web组件