- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据库oracle第三章3
数据库应用技术第三章 深入SQL;样例数据库;2、顾客信息:customers;3、代理商信息:agents;aid;4、产品信息:products;pid;5、订单信息:orders;ordno;3.2.5 TOP-N问题;具体区分有如下几种 M1,基本的TOP-N问题:按照score(增序)排序,列出排在最前面N位的记录。score重复(并列)时,准确地取出前N条记录。 M2:按照score(增序)排序,排在最前面N位的记录,和所有与第N条等值的记录。返回记录数目可能大于N。 M3:按照score(增序)排序,返回对应于N个不同score值的所有记录。 M4,广义的TOP-N问题:按照score(增序)排序,排名在N1到N2之间的记录。一般不考虑并列,只考虑记录数目。;通用的解决方法 Idea:位于前N位,就意味着比这个值小的记录数比N少。 ;例8: M2问题。 SELECT * FROM ranks r1 WHERE 3 ( SELECT COUNT(*) FROM ranks r2 WHERE r2.score r1.score) ORDER BY score; 不出现重复时,能查出前3条记录 出现重复时,与第3条记录等值的结果都被查出来;例9: M3问题。 SELECT * FROM ranks r1 WHERE 3 ( SELECT COUNT(DISTINCT score) FROM ranks r2 WHERE r2.score r1.score) ORDER BY score; ;例10: SELECT * FROM ranks r1 WHERE 3 ( SELECT COUNT(*) FROM ranks r2 WHERE r2.score = r1.score) ORDER BY score; 出现并列的情况下,如果有多个记录位于第3个的位置,将都不能被检索出来。 极端情况下,如果有3个以上的记录都是最大值,都不能被查出来。;例11:例8 M2问题的另外一种写法。 SELECT * FROM ranks WHERE id IN ( SELECT r1.id FROM ranks r1, ranks r2 WHERE r1.score r2.score GROUP BY r1.id HAVING COUNT(*) 3) ORDER BY score;;例12:M4问题。 SELECT * FROM ranks r1 WHERE 8 ( SELECT COUNT(*) FROM ranks r2 WHERE r2.score r1.score) AND 3 ( SELECT COUNT(*) FROM ranks r2 WHERE r2.score r1.score) ORDER BY score;;对于没有并列的M1问题,不考虑其他因素,只使用SQL语句是不能解决的。 原因:SQL实质上是集合的操作,两个记录如果完全相同是不可???区分开的。 解决:可以引入其他的强制排序准则,人为地定义一个序。;例13: SELECT * FROM ranks r1 WHERE 3 ( SELECT COUNT(*) FROM ranks r2 WHERE r2.score r1.score OR (r2.score = r1.score AND r2.id r1.id)) ORDER BY score, id;;3.2.6 SELECT语句小结;SQL实际执行时需要进行语法分析,产生执行计划,对执行方式进行优化。一般说来, 尽量使用连接而不是子查询,特别是子查询内部使用外查询字段值的; 尽量不把子查询作为表使用; 没有必要不要使用DISTINCT、GROUP BY和ORDER BY; 子查询中不可有ORDER BY子句。;SQL的能力 SQL对关系代数是先备的,但不是可计算性的。 原因:SQL非过程化。 解决:加入过程控制的PL/SQL。;3.3 DML语句;3.3.1 INSERT;INSERT INTO 表名 (字段列表) 子查询; 用子查询可一次向表中插入多行记录。 要求:子查询的结果列表要和字段列表对应。 对表上不在
文档评论(0)