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

5星 · 超过95%的资源 需积分: 9 20 下载量 50 浏览量 更新于2024-07-30 1 收藏 8.37MB PDF 举报
"MLDN李兴华Oracle笔记" Oracle数据库是世界上最广泛使用的数据库系统之一,尤其在企业级应用中占据重要地位。这篇笔记主要探讨了Oracle中的多表查询、连接操作以及组函数和分组统计等核心概念。 首先,多表查询是数据库操作中的常见需求,特别是对于那些数据分布在多个表中的复杂查询。例如,查询雇员名称、部门名称和部门所在地,这就涉及到emp和dept两个表的联合查询。通常,我们会使用别名来简化查询语句,如`SELECT e.empno, e.ename, d.deptno, d.dname, d.loc FROM empe, deptd WHERE e.deptno = d.deptno;`。这里,e和d分别代表emp和dept表。 在查询中,我们可能遇到的情况是某个部门在雇员表中没有对应的记录,导致查询结果不完整。这时,我们可以使用左右连接(Left Join或Right Join)来解决。例如,`SELECT e.empno, e.ename, d.deptno, d.dname, d.loc FROM empe, deptd WHERE e.deptno (+) = d.deptno;`,这里的`(+)`符号放在e.deptno后面,表示以deptd(部门表)为主进行连接,确保所有部门都被包含,即使在emp表中没有对应的雇员。 SQL:1999标准引入了更多的连接方式,如交叉连接(Cross Join)会产生笛卡尔积,即每个表中的每条记录与其他表的所有记录组合。例如,`SELECT * FROM emp CROSS JOIN dept;`。另外,还有NATURAL JOIN和USING子句,它们可以根据共享的列自动进行匹配,简化连接条件的书写。 组函数是SQL中用于统计分析的重要工具,包括COUNT()用于计算记录总数,MAX()和MIN()用于找出最大和最小值,AVG()计算平均值,以及SUM()求和。例如,`SELECT deptno, COUNT(empno) FROM emp GROUP BY deptno;`会按部门编号分组并计算每个部门的雇员数量。 分组统计(GROUP BY)则允许我们将数据按照一个或多个列进行分类,然后对每个组应用组函数。这在聚合数据时非常有用。在上面的例子中,我们按照部门编号(deptno)进行了分组,计算每个部门的雇员数。 这篇笔记涵盖了Oracle数据库中关于多表查询和统计分析的关键知识,对于理解和操作Oracle数据库系统至关重要。掌握这些概念和技巧,能够有效地处理和分析复杂的数据库数据。