数据库l分组查询和嵌套查询.docx
《数据库l分组查询和嵌套查询.docx》由会员分享,可在线阅读,更多相关《数据库l分组查询和嵌套查询.docx(9页珍藏版)》请在冰豆网上搜索。
数据库l分组查询和嵌套查询
实验三:
分组查询和嵌套查询
一、实验目的:
熟练掌握用SQL语句实现多个数据表的分组查询和嵌套查询。
二、预习要求:
实验前复习讲授过的有关分组查询和嵌套查询的知识,编写相应的SQL语句。
三、实验内容:
(一)分组查询:
1.求各种颜色零件的平均重量。
SelectAVG(WEIGHT)
FromP
GroupbyCOLOR
2.求北京供应商和天津供应商的总个数。
Selectcount(CITY)
FromS
whereCITY='北京'or='天津’
3.求各供应商供应的零件总数。
SelectSNO,SUM(QTY)
FromSPJ
GROUPBYSNO,JNO
4.求各供应商供应给各工程的零件总数。
selectSNO,JNO,sum(QTY)
fromSPJ
groupbysno,jno
5.求使用了100个以上P1零件的工程名称。
SelectdistinctJNAME
FromJ,SPJ
WhereQTY>100ANDPNO='P1'andJ.JNO=SPJ.JNO
6.求各工程使用的各城市供应的零件总数。
SelectJNAME,S.CITY,SUM(QTY)
FROMS,SPJ,J
WHERES.SNO=SPJ.SNOANDJ.JNO=SPJ.JNO
GROUPBYS.CITY,J.JNO,JNAME
(二)嵌套查询:
1.in连接谓词查询:
1查询没有使用天津供应商供应的红色零件的工程名称。
selectdistinctJNAME
fromJ
whereJNOnotin
(selectJNO
fromSPJ,P,S
whereS.CITY='天津'ANDCOLOR='红'ANDS.SNO=SPJ.SNOANDP.PNO=SPJ.PNO)
查询供应了1000个以上零件的供应商名称。
(having)
SelectSNAME
FromS
WHERESNOin(
Selectsno
FromSPJ
Groupbysno
Havingsum(QTY)>1000
)
2.比较运算符:
求重量大于所有零件平均重量的零件名称。
SelectPNAME
FromP
Whereweight>
(selectAVG(weight)
FromP)
3.Exists连接谓词:
1查询供应J1的所有的零件都是红色的供应商名称。
SelectSNAME
FromS
WhereExists
(
select*
FromP,SPJ
WhereP.PNO=SPJ.PNOAND
S.SNO=SPJ.SNOAND
COLOR='红'
ANDJNO='J1'
)
2至少用了供应商S1所供应的全部零件的工程号JNO。
SelectDISTINCTJNO
FROMSPJSPJx
WHERENOTEXISTS
(
SELECT*
FROMSPJSPJy
WHERESPJy.SNO='S1'AND
NOTEXISTS
(
SELECT*
FROMSPJSPJz
WHERESPJz.PNO=SPJy.PNOAND
SPJz.JNO=SPJx.JNOAND
SPJz.SNO='S1'
)
)
三、出现问题及其解决办法:
1、对分组查询概念理解不清,总是写错语句。
解决办法:
在同学的帮助下,我又重新看了一下课本,基本掌握吧。
2、在做“至少用了供应商S1所供应的全部零件的工程号JNO。
”
时开始分了两张表,但总表达不了完整的意思。
解决办法:
最后想起了这里的表比书本上多了一张表,最后分成xyz三张表。
四、思考题:
(1)嵌套查询中的in连接谓词查询,关键字in可以直接用any代替么?
什么情况下in和any可以互相代替?
答:
关键字in不可以直接用any代替。
但“=any”的等价于in
(2)嵌套查询中的内查询为外查询返回的内容是什么?
是表达式?
视图?
还是物理数据集合?
答:
含in,any的嵌套查询返回的结果常是一个集合,而还exists谓词的子查询不返回任何数据,只产生逻辑值“true”或“false”。
五、实验总结:
心得体会,建议等。
本次实验,使我对书本上的知识有了进一步的了解,尤其是分组查询那部分。
只有自己亲自去做去实践,才能发现问题,自己解决问题,也只有这样才能对理论的知识掌握更牢固,理解更透彻。