oracle教案06讲.docVIP

  • 1
  • 0
  • 约3.81千字
  • 约 8页
  • 2018-02-20 发布于河南
  • 举报
oracle教案06讲

第6讲 高级查询 多表联合查询 通过连接可以建立多表查询,多表查询的数据可以来自多个表,但是表之间必须有适当的连接条件。为了从多张表中查询,必须识别连接多张表的公共列。一般是在WHERE子句中用比较运算符指明连接的条件。 忘记说明表的连接条件是常见的一种错误,这时查询将会产生表连接的笛卡尔积(即一个表中的每条记录与另一个表中的每条记录作连接产生的结果)。一般N个表进行连接,需要至少N-1个连接条件,才能够正确连接。两个表连接是最常见的情况,只需要说明一个连接条件。 相等连接 通过两个表具有相同意义的列,可以建立相等连接条件。使用相等连接进行两个表的查询时,只有连接列上在两个表中都出现且值相等的行才会出现在查询结果中。 在下面的练习中,将显示雇员姓名、所在的部门编号和名称,在雇员表emp中是没有雇员的部门名称信息的,只有雇员所在部门的编号,部门的信息在另外的部门表dept中,两个表具有相同的部门编号列deptno,可以通过该列建立相等连接。 【训练1】 显示雇员的名称和所在的部门的编号和名称。 执行以下查询: SELECT emp.ename,emp.deptno,dept.dname FROM emp,dept WHERE emp.deptno=dept.deptno; 执行结果略 说明:相等连接语句的格式要求是,在FROM从句中依次列出两个表的名称,在表的每个列前需要添加表名,用“.”分隔,表示列属于不同的表。在WHERE条件中要指明进行相等连接的列。 以上训练中,不在两个表中同时出现的列,前面的表名前缀可以省略。所以以上例子可以简化为如下的表示: SELECT ename,emp.deptno,dname FROM emp,dept WHERE emp.deptno=dept.deptno; 外连接 在以上的例子中,相等连接有一个问题:如果某个雇员的部门还没有填写,即保留为空,那么该雇员在查询中就不会出现;或者某个部门还没有雇员,该部门在查询中也不会出现。 为了解决这个问题可以用外连,即除了显示满足相等连接条件的记录外,还显示那些不满足连接条件的行,不满足连接条件的行将显示在最后。外连操作符为(+),它可以出现在相等连接条件的左侧或右侧。出现在左侧或右侧的含义不同,这里用如下的例子予以说明。 【训练4】 使用外连显示不满足相等条件的记录。 步骤1:显示雇员的名称、工资和所在的部门名称及没有任何雇员的部门。 执行以下查询: SELECT ename,sal,dname FROM emp,dept WHERE emp.deptno(+)=dept.deptno; 执行结果略 不等连接 还可以进行不等的连接。 【训练5】 显示雇员名称,工资和所属工资等级。 执行以下查询: SELECT e.ename, e.sal, s.grade FROM emp e,salgrade s WHERE e.sal BETWEEN s.losal AND s.hisal; 执行结果略 自连接 最后是一个自连接的训练实例,自连接就是一个表,同本身进行连接。对于自连接可以想像存在两个相同的表(表和表的副本),可以通过不同的别名区别两个相同的表。 【训练6】 显示雇员名称和雇员的经理名称。 执行以下查询: SELECT worker.ename|| 的经理是 ||manager.ename AS 雇员经理 FROM emp worker, emp manager WHERE worker.mgr = manager.empno; 执行结果略 2、统计查询 Oracle提供了一些函数来完成统计工作,这些函数称为组函数,组函数不同于前面介绍和使用的函数(单行函数)。组函数可以对分组的数据进行求和、求平均值等运算。组函数只能应用于SELECT子句、HAVING子句或ORDER BY子句中。组函数也可以称为统计函数。 分组函数中SUM和AVG只应用于数值型的列,MAX、MIN和COUNT可以应用于字符、数值和日期类型的列。组函数忽略列的空值。 使用GROUP BY 从句可以对数据进行分组。所谓分组,就是按照列的相同内容,将记录划分成组,对组可以应用组函数。 如果不使用分组,将对整个表或满足条件的记录应用组函数。 在组函数中可使用DISTINCT或ALL关键字。ALL表示对所有非NULL值(可重复)进行运算(COUNT除外)。DISTINCT 表示对每一个非NULL值,如果存在重复值,则组函数只运算一次。如果不指明上述关键字,默认为ALL。 统计查询? 【训练1】 求雇员总人数。 执行以下查询: SELECT COUNT

文档评论(0)

1亿VIP精品文档

相关文档