Oracle多表查询与连接操作详解
版权申诉
76 浏览量
更新于2024-07-04
收藏 4.84MB DOCX 举报
"Oracle数据库查询与多表操作技术详解"
Oracle数据库是企业级关系型数据库管理系统,广泛应用于数据存储和管理。本笔记主要介绍了在Oracle中进行多表查询、连接操作以及组函数和分组统计的方法。
一、多表查询
多表查询用于从两个或更多个相关表中获取数据。在示例中,通过使用别名简化了查询语句,例如`SELECT e.empno, e.ename, d.deptno, d.dname, d.loc FROM emp e, dept d WHERE e.deptno = d.deptno;` 这个查询展示了如何通过部门编号(deptno)将雇员表(emp)和部门表(dept)联接在一起,获取雇员名称、部门编号、部门名称和部门位置。
二、连接操作
1. 左右连接(Left/Right JOIN)
左右连接允许返回所有左表(或右表)的记录,即使在右表(或左表)中没有匹配的记录。例如,当使用右连接时,`(+)` 符号放在`e.deptno` 的前面,表示以部门表(dept)为主,即使在雇员表(emp)中找不到匹配的部门编号,也会包含在结果集中。
2. 交叉连接(CROSS JOIN)
交叉连接会产生两表的笛卡尔积,即每行左表的数据会与右表的所有数据组合。例如,`SELECT * FROM emp CROSS JOIN dept;` 会返回所有可能的雇员与部门的组合。
3. 自然连接(NATURAL JOIN)
自然连接基于两表中相同的列自动进行连接。例如,`SELECT * FROM emp NATURAL JOIN dept;` 会基于共享的`deptno` 列进行连接,但需要注意的是,自然连接可能会因意外的匹配列导致意外的结果。
4. 使用USING子句
USING子句允许指定连接的列。例如,`SELECT * FROM emp e JOIN dept d USING (deptno) WHERE d.deptno = 30;` 这里使用`deptno` 进行连接,并且只选择了部门编号为30的记录。
5. ON子句
ON子句可以自定义连接条件,如`SELECT * FROM emp e JOIN dept d ON (e.deptno = d.deptno) WHERE e.deptno = 30;`,这与USING子句的效果相同,但更灵活,可以处理更复杂的连接条件。
三、组函数与分组统计
1. 组函数
- COUNT():计算记录总数,如`SELECT COUNT(empno) FROM emp;`
- MAX():查找最大值,如`SELECT MAX(sal) FROM emp;`
- MIN():查找最小值,如`SELECT MIN(sal) FROM emp;`
- AVG():计算平均值,如`SELECT AVG(sal) FROM emp;`
- SUM():计算总和,如`SELECT SUM(sal) FROM emp;`
2. 分组统计
使用`GROUP BY` 子句可以按一个或多个列对数据进行分组,然后对每个组应用组函数。例如,`SELECT deptno, COUNT(empno) FROM emp GROUP BY deptno;` 将按部门编号分组并计算每个部门的雇员数量。`GROUP BY` 通常与组函数一起使用,以在每个分组内进行统计。
3. 分组后的过滤
可以使用`HAVING` 子句在`GROUP BY` 后过滤结果,例如,`SELECT deptno, AVG(sal) FROM emp GROUP BY deptno HAVING AVG(sal) > 2000;` 这将找出平均工资高于2000的部门。
这些基本概念和操作构成了Oracle数据库查询的基础,对于理解和处理复杂的数据查询至关重要。掌握这些技巧,可以更有效地管理和分析存储在Oracle数据库中的信息。
2022-11-17 上传
2022-04-26 上传
2019-11-28 上传
2022-05-03 上传
2021-12-12 上传
2021-11-04 上传
2022-05-03 上传
2021-12-05 上传
2022-05-04 上传
cailibin
- 粉丝: 4
- 资源: 7001
最新资源
- 平尾装配工作平台运输支撑系统设计与应用
- MAX-MIN Ant System:用MATLAB解决旅行商问题
- Flutter状态管理新秀:sealed_flutter_bloc包整合seal_unions
- Pong²开源游戏:双人对战图形化的经典竞技体验
- jQuery spriteAnimator插件:创建精灵动画的利器
- 广播媒体对象传输方法与设备的技术分析
- MATLAB HDF5数据提取工具:深层结构化数据处理
- 适用于arm64的Valgrind交叉编译包发布
- 基于canvas和Java后端的小程序“飞翔的小鸟”完整示例
- 全面升级STM32F7 Discovery LCD BSP驱动程序
- React Router v4 入门教程与示例代码解析
- 下载OpenCV各版本安装包,全面覆盖2.4至4.5
- 手写笔画分割技术的新突破:智能分割方法与装置
- 基于Koplowitz & Bruckstein算法的MATLAB周长估计方法
- Modbus4j-3.0.3版本免费下载指南
- PoqetPresenter:Sharp Zaurus上的开源OpenOffice演示查看器