还剩6页未读,继续阅读
文本内容:
实验名称实验二使用分组,排序,汇总课程名称数据库原理与设计成绩 学院(系)软件学院专业计算机软件工程班级 学生姓名 学号 实验地点 实验日期 实验目的
1.掌握通配符的用法
2.掌握GROUPBY子句的使用
3.掌握ORDERBY子句的使用
4.掌握TOP和DISTINCT关键字的使用
5.掌握COMPUTE和COMPUTEBY子句的使用
6.掌握聚集函数的使用实验内容完成在在Recruitment,GlobalToyz和Student数据库基础上的查询,按要求完成给出的下列题目,要求写出相应数据库的查询语句(SELECT语句)
1. 显示以‘S’开头,并且玩具名称不少于7个字符的玩具名称vToyName
2. 显示名称里包含字母‘u’或‘x’的玩具ID和名称以及价格
3. 查询信用卡号(cCreditCardNo)中包含4个8的订购者(Shopper)的详细信息
4. 统计订单号为‘000001’的订单订购的玩具的数量和玩具的总花费(mToyCost)
5. 统计每份提单订购的玩具数量和玩具花费
6. 对于GlobalToyz数据库的Country表,统计国家名称只由六个字母构成的国家的数目
7. 显示价格最高的五种玩具的名称和价格(vToyName,mToyRate)
8. 输出Shopper表的‘Texas’州的前10%的订购者的详细信息
9. 统计被人订购过的玩具的数量,相同的玩具只统计一次(OrderDetail表)
10. toys表中,按照玩具的类别(cCategoryId)统计每类玩具的数量和平均价格(mToyrate),只输出平均价格大于20$的玩具的信息思考能输出的列可以有哪些?请写出相应的查询
11. 对于PickofMonth表,打印出该表的详细信息,并在底部汇总出‘2000’年销售数量的总和
12. 对于OrderDetail表,请输出订单号,cWrapperId,vMessage和mToyCost,并根据cWrapperId小计玩具花销的平均值和总值,在底部总计玩具花销的平均值和总值
13. 打印出玩具花费最高的三份订单的详情
14. 以下这段代码将会输出什么SELECTcOrderNocToyIdSUMmToyCostFROMOrderDetailGROUPBYcOrderNo请写出正确的语句选择列表中的列OrderDetail.cToyId无效,因为该列没有包含在聚合函数或GROUPBY子句中SELECTcOrderNocToyIdSUMmToyCost小计总值FROMOrderDetailGROUPBYcOrderNocToyId
15. 下面包含COMPUTEBY子句的代码都会产生错误,请写出产生错误的原因,并将其改为正确的带COMPUTEBY子句的SQL语句SELECTcToyIdmToyCostFROMOrderDetailCOMPUTESUMmToyCostBYcToyId在排序依据列表中没有找到COMPUTEBY子句中的某一项计算依据列表中的所有表达式也必须同时出现在排序依据列表中compute???by子句中???出的列必须出现在选择列表中以cToyId没有包含在聚合函数或GROUPBY子句中应改成如下所示SELECTcToyIdmToyCostSUMmToyCost小计总值FROMOrderDetailGROUPBYcToyIdmToyCostORDERBYcToyIdCOMPUTESUMmToyCostBYcToyIdSELECTcCartIdFROMOrdersORDERBYcCartIdCOMPUTEAVGmTotalCostBYcCartIdcompute???by子句中???出的列必须出现在选择列表中SELECT之后如果用了聚集函数和某一属性列则该属性列必须用GROUP分组应改为SELECTcCartIdAVGmTotalCostFROMOrdersGROUPBYcCartIdORDERBYcCartIdCOMPUTEAVGmTotalCostBYcCartId 实验报告答案如下一.实验内容
1.完成在在Recruitment,GlobalToyz和Student数据库基础上的查询,按要求完成给出的15道题目,要求写出相应数据库的查询语句(SELECT语句)二.实验目的
1.掌握通配符的用法
2.掌握GROUPBY子句的使用
3.掌握ORDERBY子句的使用
4.掌握TOP和DISTINCT关键字的使用
5.掌握COMPUTE和COMPUTEBY子句的使用
6.掌握聚集函数的使用三.实验原理本次实验主要通过根据题目要求完成对数据库的查询,加深对sql语言的印象主要的原理就是SQL语言基本语句及语法四.实验过程及编写代码
1. 显示以‘S’开头,并且玩具名称不少于7个字符的玩具名称vToyNameSELECTvToyNameFROMToysWHEREvToyNamelikeS______%
2. 显示名称里包含字母‘u’或‘x’的玩具ID和名称以及价格SELECTcToyIdvToyNamemToyRateFROMToysWHEREvToyNamelikeu%orvToyNamelikex%
3. 查询信用卡号(cCreditCardNo)中包含4个8的订购者(Shopper)的详细信息SELECT*FROMShopperWHEREcCreditCardNolike%8%8%8%8%
4. 统计订单号为‘000001’的订单订购的玩具的数量和玩具的总花费(mToyCost)SELECTcOrderNomTotalCostFROMOrdersWHEREcCartId=
0000015. 统计每份提单订购的玩具数量和玩具花费SELECTcOrderNomToyCostFROMOrderDetail
6. 对于GlobalToyz数据库的Country表,统计国家名称只由六个字母构成的国家的数目SELECTcountcCountry国家数量FROMCountryWHEREcCountrylike______
7. 显示价格最高的五种玩具的名称和价格(vToyName,mToyRate)SELECTTOP5vToyNamemToyRateFROMToys
8. 输出Shopper表的‘Texas’州的前10%的订购者的详细信息SELECTTOP10PERCENT*FROMShopperWHEREcCity=Texas
9. 统计被人订购过的玩具的数量,相同的玩具只统计一次(OrderDetail表)SELECTcountcOrderNo订购数量FROMOrderDetailGROUPBYcToyId
10. toys表中,按照玩具的类别(cCategoryId)统计每类玩具的数量和平均价格(mToyrate),只输出平均价格大于20$的玩具的信息思考能输出的列可以有哪些?请写出相应的查询SELECTcountcCategoryId玩具类别countmToyRate平均价格FROMToysgroupbycCategoryIdhavingavgmToyRate
2011. 对于PickofMonth表,打印出该表的详细信息,并在底部汇总出‘2000’年销售数量的总和SELECT*SUMiTotalSold销售数量总和FROMPickOfMonthGROUPBYcToyIdsiMonthiYeariTotalSoldCOMPUTESUMiTotalSold
12. 对于OrderDetail表,请输出订单号,cWrapperId,vMessage和mToyCost,并根据cWrapperId小计玩具花销的平均值和总值,在底部总计玩具花销的平均值和总值SELECTcToyIdcWrapperIdvMessagemToyCostavgmToyCost小计平均值summToyCost小计总值FROMOrderDetailGROUPBYcToyIdcWrapperIdvMessagemToyCostORDERBYcWrapperIdCOMPUTEavgmToyCostsummToyCost
13. 打印出玩具花费最高的三份订单的详情SELECTTOP3*FROMToys
14. 以下这段代码将会输出什么SELECTcOrderNocToyIdSUMmToyCostFROMOrderDetailGROUPBYcOrderNo请写出正确的语句选择列表中的列OrderDetail.cToyId无效,因为该列没有包含在聚合函数或GROUPBY子句中SELECTcOrderNocToyIdSUMmToyCost小计总值FROMOrderDetailGROUPBYcOrderNocToyId
15. 下面包含COMPUTEBY子句的代码都会产生错误,请写出产生错误的原因,并将其改为正确的带COMPUTEBY子句的SQL语句SELECTcToyIdmToyCostFROMOrderDetailCOMPUTESUMmToyCostBYcToyId在排序依据列表中没有找到COMPUTEBY子句中的某一项计算依据列表中的所有表达式也必须同时出现在排序依据列表中compute???by子句中???出的列必须出现在选择列表中以cToyId没有包含在聚合函数或GROUPBY子句中应改成如下所示SELECTcToyIdmToyCostSUMmToyCost小计总值FROMOrderDetailGROUPBYcToyIdmToyCostORDERBYcToyIdCOMPUTESUMmToyCostBYcToyIdSELECTcCartIdFROMOrdersORDERBYcCartIdCOMPUTEAVGmTotalCostBYcCartIdcompute???by子句中???出的列必须出现在选择列表中SELECT之后如果用了聚集函数和某一属性列则该属性列必须用GROUP分组应改为SELECTcCartIdAVGmTotalCostFROMOrdersGROUPBYcCartIdORDERBYcCartIdCOMPUTEAVGmTotalCostBYcCartId
五、实验问题
1、第十五题的第二问从理论上说是没问题,但是还是出现如下错误提示COMPUTE子句#
1、聚合表达式#1不在选择列表中已解决改成SELECTcCartIdmTotalCostAVGmTotalCostFROMOrdersGROUPBYcCartIdmTotalCostORDERBYcCartIdCOMPUTEAVGmTotalCostBYcCartId
六、实验总结
1.使用COMPUTE子句的注意事项和原则
1.
1.在一条语句中,不能同时使用多个COMPUTE和COMPUTEBY子句
1.
2.SQLServer中要求选择列表中的字段和COMPUTE子句中的字段相同
1.
3.不能同时使用SELECTINTO和COMPUTE,因为COMPUTE不会生成关系型的输出结果
2.使用COMPUTEBY子句的注意事项和原则
2.
1.应当同时使用ORDERBY子句和COMPUTEBY子句,这样记录就会被分组显示
2.
2.应在COMPUTEBY子句后指定字段名,使SQLServer能够决定要生成的汇总值是什么
2.
3.出现在COMPUTEBY子句后的字段必须出现在ORDERBY子句后,且顺序相同,始于同一表达式,不能略过任一表达式
3.SELECT之后如果用了聚集函数和某一属性列则该属性列必须用GROUP分组如SELECTcToyIdSUMmToyCostFROMOrderDetail会提示错误选择列表中的列OrderDetail.cToyId无效,因为该列没有包含在聚合函数或GROUPBY子句中改为如下所示SELECTcToyIdSUMmToyCostFROMOrderDetailGROUPBYcToyId则能成功查询 指导教师 日期 注请用A4纸书写,不够另附纸第 页,共 页 。