第七节--复杂查询.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七节--复杂查询

复杂查询 一、分组函数 表中包含了许多数据,可以对这些数据按照某个指定的列进行分组,然后使用合计函数计算相应列的合计值。 例如,如果需要检索最高薪水和最低薪水的雇员,并返回不同部门中最高薪水和最低薪水的雇员,那么就需要对表中的数据进行分组计算。 例如:使用order by (一)分组函数的格式 SELECT [column,] group_function(column) . . FROM table [WHERE condition] [GROUP BY group_by_expression] [ORDER BY column]; (二)常用的分组函数 常用的分组函数有:AVG (平均数)、SUM (求和)、COUNT (计数)、 MAX (最大值)、MIN (最小值)等 1、MAX和MIN用法 MAX 用于取得列或表达式的最大值,MIN用于取得列或表达式的最小值。这两个函数适用于任何数据类型 例如:显示emp表中的最高薪金和最低薪金 2、AVG和SUM的用法 AVG用于取得列或表达式的平均值,SUM用于取得列或表达式的总和。 这两个函数只适用于数字类型。 例如:查询emp表中所有雇员的平均工资和工资总和 3、COUNT的用法 Count函数用于取得计算的总行数。 例如:查询表emp中的雇员总数 注意:分组函数会忽略NULL行 例如: 二、GROUP BY和HAVING子句 (一)使用GROUP BY和HAVING子句要注意 1、GROUP BY 必须连用 2、GROUP BY 可以按多个字段分组 3、在分组查询的SELETCT 语句中,不使用分组的字段,必须使用GROUP BY分组 4、GROUP BY 分组的字段可以不出现在SELECT列表中 5、分组的结果可以排序 (二)GROUP BY进行单列分组 单列分组是指基于单列生成分组统计结果。当进行单列分组时,会基于分组列的每个不同值生成一个统计结果 例如:显示emp表中每个部门的员工总数 (三)GROUP BY进行多列分组 多列分组是指基于两个或两个以上的列生成分组统计结果 例如:显示每个部门每个岗位的平均工资 (四)HAVING的用法 HAVING子句用于限制分组统计结果 例如:查询薪金合计在9000以上的部门号、工资合计 (五)使用GROUP BY注意 1、在SELECT 列表中的任何列或表达式(非计算列)必须在GROUP BY 子句中 2、在WHERE 子句中不能使用组函数作为条件,只能用非计算列下面这个例子说明了这个问题 三、表的连接 (一)连接查询 连接查询是指基于两个或两个以上的表或视图的查询。常用的连接有:相等连接、 不等连接、外连接。 例如:Dept表中和emp表中都有deptno字段,很多情况下要讲表连接查询一些数据 (二)笛卡尔乘积 笛卡尔乘积的形成,当: 1、一个连接条件被遗漏时 2、一个连接条件不正确时 3、在第一个表中的所有行被连接到第二个表的所有行时 为了避免笛卡尔乘积的形成,在WHERE 子句中应当总是包含正确的连接条件 例如:下面这个例子就形成了笛卡尔积,这些数据的产生是无意义的,这里只是显示了一部分 (三)内连接 内连接把两个表连接成一个临时表,在这个表中,仅包含那些满足连接条件的记录行。 内连接主要有两种形式,等值连接和非等值连接。等值就是在连接列相等的条件下执行的连接操作。非等值连接是指在连接列不相等的连接条件下执行连接操作。 1、等值连接 a) 多表相等连接语法 SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column1 =table2.column2 在语法中: table1.column 指示获取数据的表和列 table1.column1 = 是连接表的条件 table2.column2 b) 多表连接的原则 1)在写一个连接表的 SELECT 语句时,在列名 前面用表名可以使语义清楚,并且加快数据库访问。 2) 如果相同的列名出现在多个表中,列名必须前缀表名。 3) 为了连接 n 个表在一起,你最少需要 n-1 个连接条件。例如,为了连接 4 个表,最少需要 3 个连接条件。如果表中有一个连接主键,该规则可能不适用,其中可能有多行用来唯一地标识每一行。 c) 等值连接的例子 2、非等值连接 上面的两个图示说明在EMP 表中的工资必须在SALGRADE 表中的最低工资和最高工资之间 例如:查询雇员的薪金等级 (四)外连接 内连接会返回满足连接条件的记录。连接则

文档评论(0)

qwd513620855 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档