Oracle多表查询与连接操作详解

版权申诉
0 下载量 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数据库中的信息。