SQL查询语言基本教程2.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
SQL查询语言基本教程(2) 三、GROUP BY...语句 ??? GROUP BY... 语句实现纪录分组功能,它通常需要和上面我们提到过的统计函数 SUM、COUNT 等联合使用,它的语法为: ?SELECT column1[, column2] ?FROM table1[,table2] ?WHERE conditions ?GROUP BY column1[, column2] ?ORDER BY column1[, column2] 范例四:计算学生成绩及总成绩 ??? 我们依然使用上一章使用的数据库 c:\db4.mdb,在其中加入一个名字为 db2 的表,表的结构以及数据如下: ? 字段名?学生?科目?成绩 ?张严?语文?86.5 ?李永?语文?93 ?王为?语文?91 ?张严?数学?96.5 ?李永?数学?90 ?王为?数学?87 ?张严?英语?80.5 ?李永?英语?94 ?王为?英语?98 ??? 建立新工程,加入DAO定义库。在Form1中加入一个ListBox控件,然后在Form_load中加入以下代码: Private Sub Form_Load() ??? Dim rsTemp As Recordset ??? Dim dbTemp As Database ??? Dim astr As String ??? ??? Set dbTemp = DBEngine(0).OpenDatabase(c:\db4.mdb, dbOpenSnapshot) ??? astr = SELECT SUM(db2.成绩)AS rTotal, FORMAT((AVG(db2.成绩)),′###.#′) AS rAVG, _ ??????????? (db2.学生) AS Student FROM db2 GROUP BY db2.学生 ??? Set rsTemp = dbTemp.OpenRecordset(astr) ??? If rsTemp.RecordCount 0 Then ??????? rsTemp.MoveFirst ??????? Do Until rsTemp.EOF ??????????? List1.AddItem rsTemp![Student] Chr(5) rsTemp![rTotal] _ ??????????????? ?????? rsTemp![rAVG] ??????????? rsTemp.MoveNext ??????? Loop ??? End If End Sub ??? 在上面的代码中,我们利用GROUP BY将纪录根据学生姓名分组,再建立了两个统计字段rTotal和rAvg并分别利用 统计函数SUM和AVG分别统计各个分组的总成绩以及平均成绩。要注意的是,在SELECT语句中出现的字段,如果没有包含 在统计函数内的话,都要包含在GROUP BY子句中。 ??? 另外在上面的SQL查询中我们还使用了FORMAT子句,这是SQL中的转换和格式化语句中的一个,该语句的语法同VB中 的Format语句是一样的,相似的语句还有FIX语句。需要注意的一点是,虽然在Microsoft JET Engine 中的SQL语法和 ANSI决大部分是一样的,但是有一些还是保留了“微软特色”,特别是象这一类的转换和格式化语句,例如FORMAT就是 ANSI中没有的。而象其它数据库,诸如oracle也有各自的SQL语法扩展。在使用不同数据库进行SQL查询时要注意这一点。 ??? 在GROUP BY 语句中还可以连接使用HAVING子句。该语句同GROUP BY的关系就如同WHERE子句同SELECT的关系类似, WHERE子语句为SELECT所选择的列设置条件,而HAVING子语句是给由GROUP BY创建的组设置条件。例如如果将上面的范例 中的astr改变为如下的字符串: astr = SELECT SUM(db2.成绩)AS rTotal, FORMAT((AVG(db2.成绩)),′###.#′) _ ??????????? AS rAVG, (db2.学生) AS Student FROM db2 GROUP BY db2.学生 _ ??????????? HAVING (AVG(db2.成绩))=90 则在List中就将只会列出平均成绩大于90分的学生的成绩和名字。 范例五:获得分数高于总平均分数的学生及科目 ??? 我们仍然使用上面建立的db2表。建立新工程,加入DAO定义库。在Form1中加入一个ListBox控件和一个Label控件 然后在Form_load中加入以下代码: Private Sub Form_Load() ??? Dim

文档评论(0)

803322fw + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档