- 1、本文档共64页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第6章 SQL语言以及查询和视图设计 SQL命令动词 2.分组与计算查询 如果需要对查询结果进行分组,而分组又通常要求有计算,这时利用GROUP BY子句。 GROUP BY短语的格式如下: GROUP BY 分组列名1[,分组列名2 …][HAVING 筛选条件] 可以按一列或多列分组,还可以用HAVING短语进一步限定查询结果中的分组必须满足的条件。 例6-38 求各单位职工的平均工龄。 命令:SELECT 单位号,AVG(工龄) FROM 职工 GROUP BY 单位号 GROUP BY子句一般放在WHERE子句 或 放在FROM子句之后。 如果要检索满足一定条件的分组,就应使用HAVING子句。 例6-39 求至少有两个职工的单位的平均工龄。 SELECT 单位号,COUNT(*),AVG(工龄) FROM 职工; GROUP BY 单位号 HAVING COUNT(*)=2 HAVING子句总是跟在GROUP BY子句之后,不可以单独使用。 6.4.8 使用量词和谓词的查询 除与子查询有关的IN和NOT IN等运算符外还有两类和子查询有关的运算符,ANY、SOME、ALL与EXISTS、NOT EXISTS。它们有以下两种形式: 表达式比较运算符[ANY|ALL|SOME](子查询) [NOT] EXISTS(子查询) 其中:ANY、SOME和ALL是量词。而ANY和SOME是同义词,表示在进行比较运算时只要子查询中有一行能使结果为真,则结果就为真;ALL则要求子查询中的所有行都使结果为真时,结果才为真。 EXISTS是谓词。EXISTS或NOT EXISTS是用来检查在子查询中是否有结果返回,即存在元组或不存在元组。 例6-40 检索出那些在职工表中还没有职工的单位信息。 要查询的是没有职工或不存在职工的单位,所以可以使用谓词NOT EXISTS: SELECT * FROM 单位 WHERE NOT EXISTS; (SELECT * FROM 职工 WHERE 单位号=单位.单位号) 以上的查询等价于: SELECT * FROM 单位 WHERE 单位号 NOT IN(SELECT 单位号 FROM 职工) 例6-41 检索那些至少已经有一个职工的单位信息。 SELECT * FROM 单位 WHERE EXISTS; (SELECT * FROM 职工 WHERE 单位号=单位.单位号) 它等价于: SELECT * FROM 单位 WHERE 单位号 IN(SELECT 单位号 FROM 职工) 注意:[NOT] EXISTS只是判断子查询中是否有或没有结果返回,它本身并没有任何运算或比较。 例6-42 找出有职工工龄大于或等于“100002”单位中任何一名职工工龄的单位。 这个查询可以使用ANY或SOME量词。 SELECT DISTINCT 单位号 FROM 职工 WHERE 工龄=ANY; (SELECT 工龄 FROM 职工 WHERE 单位号=”100002”) 它等价于: SELECT DISTINCT 单位号 FROM 职工 WHERE 工龄=; (SELECT MIN(工龄) FROM 职工 WHERE 单位号=100002) 例6-43 检索有职工的工龄大于或等于“100002”单位中所有职工工龄的单位号。 这个查询使用ALL量词。 SELECT DISTINCT 单位号 FROM 职工 WHERE 工龄=ALL; (SELECT 工龄 FROM 职工 WHERE 单位号=100002) 它等价于: SELECT DISTINCT 单位号 FROM 职工 WHERE 工龄=; (SELECT MAX(工龄) FROM 职工 WHERE 单位号=100002) 6.4.9 自联接和超联接查询(选学) 1.自联接查询 SQL不仅可以对多个关系实行联接操作,也可以将单个关系与其自身进行联接,这种联接称为自联接。 在可以进行自联接操作的关系中,具有来自同一值域的两个不同的属性,使该关系中的一些元组与该关系中另外一些元组有对应关系,也就是实体集内部存在联系,这种关系通常是一对多的联系。 例如,假设学员关系:学员(学号,姓名,组长学号),则存在一个组长管理多个学员;又例如,假设零部件关系:零部件(零件号,名称,所属部件号
文档评论(0)