Oracle多表查询与连接操作详解
版权申诉
6 浏览量
更新于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数据库中的信息。
202 浏览量
602 浏览量
747 浏览量
639 浏览量
582 浏览量
548 浏览量
720 浏览量
632 浏览量
605 浏览量

cailibin
- 粉丝: 4
最新资源
- Java工程师面试精华:核心知识点与常见问题
- OGRE、Irrlicht等3D引擎深度解析与特性比较
- CMOS射频低噪声放大器设计与性能优化
- Protege入门:创建简单动物本体及基础用法教程
- JavaScript 弹窗代码合集与实现技巧
- Linux 0.11内核深度注解:入门与理解指南
- 日语在软件开发中的应用
- C语言参考手册:标准库函数详解
- 限制DDL操作:使用触发器监控与阻止truncates
- JavaScript教程:动态编程语言,Ajax基石与Java区别详解
- Oracle数据库安装与管理详解
- jQuery:简化JavaScript和Ajax开发的框架
- VMware上安装Red Hat Linux 4与Oracle10g详细步骤
- InfoQ中文站免费图书:深入浅出Struts2
- 提升C#面试必备:.NET访问权限、SQL查询、页面间数据传递与异常处理详解
- .NET面试深度解析:130道经典试题