ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:91.72KB ,
资源ID:1511236      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/1511236.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验六多表查询doc.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验六多表查询doc.docx

1、实验六多表查询doc实验六 多表查询 实验目的1、 掌握嵌套查询的概念2、 掌握连接查询3、 进一步掌握分组操作4、 掌握Union的使用实验环境 硬件环境:PC机一台 软件环境:SQL Server 2008/2005实验内容在供应商数据库中供应商关系:S(SNO,SNAME,ADDR)零件关系:P(PNO,PNAME,COLOR,WEIGHT)工程项目关系:J(JNO,JNAME,CITY,BALANCE)供应情况关系:SPJ(SNO,PNO,JNO,PRICE,QTY)上述各属性的含义是:供应商号(SNO)、供应商名(SNAME)和地址(ADDR),零件号(PNO)、零件名(PNAME)

2、、颜色(COLOR)、重量(WEIGHT)、单价(PRICE)、工程项目号(JNO)、工程项目名称(JNAME)、城市(CITY)、余额(BALANCE)、供应数量(QTY)。1、 查询供应商的名字,以及各自负责的项目数,结果要求按照项目数的降序排列(连接、分组、排序)Select sname, count(distinct JNO)From S, SPjWhere S.sno = SPJ .sno Group by snameSelect sname, count(distinct JNO)From s, spjWhere S.sno = spj.snoGroup by snameOrder

3、 by count(distinct JNO)2、 查询重量比螺栓重的零件名称,零件重量(子查询或自身连接)Select pname,weightFrom PWhere weight (Select weight From PWhere pname = 螺栓)Select a.name,a.weightfrom P a, P bwhere a.weight b.weightand b.pname= 螺栓3、 查询P(零件)表中各种颜色及其对应的零件种类的数目(分组和聚集查询)Select color, count(PNO)From P Group by color4、 统计天津地区的项目使用零

4、件的种数(超过3种)和零件总数量。要求查询结果按零件的种数升序排列,种数相同时按总数量降序排列。(连接、分组、聚集函数、排序)Select JNO, count(PNO),sum(qty)From J,SPJWhere J.jno = spj.jno and city=天津Group by JNOHaving count(PNO)35、查询既供应P1零件又供应P2零件的供应商编号,供应商名称(多重条件查询)6、查询每个供应商供应零件的情况,要求列出供应商名称,零件名称,供应数量,并按供应数量的升序排序(连接、分组、聚集函数、排序)7、查询与“万胜”供应商在同一城市的供应商的详细资料(子查询)8

5、、查询供应商品种类最多的供应商编号、供应商名。9、查询既生产螺母,也生产螺栓的供应商编号和供应商名。10、查询生产螺丝刀但不生产螺母的供应商名11、查询“万胜”和“精益”两个供应商的供货情况,查询结果中包括供应商名、项目名、零件名和供应数量。用两个select语句实现查询,并用union将两个语句的查询结果合并在一起。三、实验步骤1、对文件夹中的SPJ数据库进行附加还原。2、按照以上要求完成题目。3、要求写出查询代码并将查询结果截图附在代码后。参考解答1、查询供应商的名字,以及各自负责的项目数,结果要求按照项目数的降序排列(连接、分组、排序)解题思路:1)本题要查询供应商名,这项数据仅在供应商

6、表(S)中才有,而要统计每个供应商向几个项目供货,则需要对SPJ表中的数据进行统计。这里需要对S和SPJ进行连接,两表的共同字段是SNO,用该字段进行连接。SELECT SNAME,JNO,PNOFROM S,SPJWHERE S.SNO=SPJ.SNO代码执行结果:图1-1说明:该结果表明,这些供应商向项目提供零件的信息,这里项目和零件都用编号表示。2)这还没有达到题目要求的效果。题目要求统计每个供应商负责的项目数。这里需要分组。用供应商名进行分组,计算每个组中项目号的数目。这里请注意,“万胜”这个供应商的供应记录有6条,但是仔细看,不难发现,他供应的项目其实是4个,这里需要考虑到项目编号重

7、复的情况(由于供应商每向一个项目供一种零件,数据库中都会产生相应的记录。)因此,对代码再进行修改。SELECT SNAME,COUNT(JNO)FROM S,SPJWHERE S.SNO=SPJ.SNOGROUP BY SNAME执行结果:图1-2运行结果说明:这里的执行结果已经可以统计出各供应商负责的项目数,但是由于没有考虑到一个供应商有可能存在多条供货记录,因此,这个结果依然不正确。3)对代码添加关键字“DISTINCT”可不统计重复的字段。SELECT SNAME,COUNT(DISTINCT JNO)FROM S,SPJWHERE S.SNO=SPJ.SNOGROUP BY SNAME

8、ORDER BY COUNT(DISTINCT JNO) DESC执行结果:图1-3这才是最终的正确结果。2、查询重量比螺栓重的零件名称,零件重量(子查询或自身连接)解法:子查询解题思路:先查询螺栓的重量,再用这重量与零件表中的其他零件的重量进行比较。1)SELECT WEIGHTFROM PWHERE PNAME=螺栓图2-1螺栓的重量2)将第一步查询中的重量作为外层查询的条件。SELECT PNAME,WEIGHTFROM PWHERE WEIGHT( SELECT WEIGHT FROM P WHERE PNAME=螺栓)图2-2执行结果说明:先执行内层查询,其返回结果就是螺栓的重量,用

9、这个重量与外层查询中的零件重量进行比较,查询“WEIGHT”字段的值大于17的记录。得到如上结果。这里注意,在外层查询的WHERE字句中的比较字段与子查询的返回结果应该相同,此外,为了让查询层次明确,子查询部分最好缩进。解法2:自身连接SELECT A.PNAME,A.WEIGHTFROM P A,P BWHERE A.WEIGHTB.WEIGHT AND B.PNAME=螺栓图2-2说明:在自身连接时,需将一个表理解成两个表。在本题中,将P理解成A,B两表,用B表查询螺栓的重量,再用A表找出重量比它重的零件信息。3、查询P(零件)表中各种颜色及其对应的零件种类的数目(分组和聚集查询)SELE

10、CT COLOR,COUNT(PNO)FROM PGROUP BY COLOR图3-1说明:本题仅对零件信息进行查询,不涉及到项目和供应商,因此无需多表连接。但是请大家注意分析题目的要求:求各种颜色的零件各有几类。即,题目要查询的是“红色的零件有几类,绿色的零件有几类”这样的信息,思考题目要求,不难发现这时需要用到分组,分组的依据就是颜色。因此在GROUP BY 子句中用的是COLOR字段。4、统计天津地区的项目使用零件的种数(超过3种)和零件总数量。要求查询结果按零件的种数升序排列,种数相同时按总数量降序排列。(连接、分组、聚集函数、排序)1)本题需要分成两个步骤考虑。其一,考虑项目的编号,

11、项目的名称,项目使用的零件(这里只要统计每个项目用的零件类别,因此只要零件号),每次使用的数量。因此,需要连接项目表(J)和供应关系表(SPJ)。并且需要指明项目所在的城市是天津。SELECT J.JNO,JNAME,PNO,QTYFROM J,SPJWHERE J.JNO=SPJ.JNO AND CITY=天津图4-1由查询结果可知,天津地区只有弹簧厂和造船厂两个项目,用目测就知道前者使用了一种零件,后者有3种。按照题目要求,还需要进行分组。2)统计零件类别数,用COUNT函数,统计总数量,则要用SUMSELECT J.JNO,JNAME,COUNT(PNO),SUM(QTY)FROM J,

12、SPJWHERE J.JNO=SPJ.JNO AND CITY=天津GROUP BY J.JNO,JNAME图4-25、查询既供应P1零件又供应P2零件的供应商编号,供应商名称(多重条件查询)解题思路:题目要求查询供应商号和供应商名,这两项信息要通过供应商表(S)获得,同时,还需要供应的一些具体情况,这时就要用到SPJ。这题可以用子查询或连接查询实现。本例用子查询。1) 先到SPJ表中查询供应P1零件的供应商号:SELECT SNO FROM SPJ WHERE PNO=P1图5-12) 在再到SPJ表中查询供应P2零件的供应商号:SELECT SNO FROM SPJ WHERE PNO=P

13、2图5-23) 由以上两个步骤的查询结果可知,两种零件都有提供的供应商只有S1,本题求的是两个集合的交集。最后的查询是,用两个子查询获得同时提供两种零件的供应商号,再用此结果到供应商表(S)中获取相应供应商信息。SELECT SNO,SNAMEFROM SWHERE SNO IN(SELECT SNO FROM SPJ WHERE PNO=P1)AND SNO IN(SELECT SNO FROM SPJ WHERE PNO=P2)图5-3思考:本题如果用以下语句是否可以实现SELECT SNO,SNAMEFROM SWHERE SNO IN(SELECT SNO FROM SPJ WHERE

14、 PNO=P1 AND PNO=P2)6、查询每个供应商供应零件的情况,要求列出供应商名称,零件名称,供应数量,并按供应数量的升序排序(连接、分组、聚集函数、排序)解题思路:1)本题要求查询供应商名字、零件名称、数量,从题目要求的字段可以看出,本题需要连接供应商表(S),零件表(P)和供应情况表(SPJ)SELECT SNAME,PNAME,JNO,QTYFROM S,P,SPJWHERE S.SNO=SPJ.SNO AND P.PNO=SPJ.PNO图6-1这个查询步骤显示供应商名,零件名,项目号,以及这次供应零件的数量。按照题目的要求,要统计每个供应商提供的某一类零件的总数量,比如,“精益

15、”供应的螺母总量是200+100+700+100. 2)还需要用供应商名和零件名共同分组,并排序。SELECT SNAME,PNAME,SUM(QTY) 供应数量FROM S,P,SPJWHERE S.SNO=SPJ.SNO AND P.PNO=SPJ.PNOGROUP BY SNAME,PNAMEORDER BY SUM(QTY)图6-27、查询与“万胜”供应商在同一城市的供应商的详细资料(子查询)解题思路:本题用子查询,先查询“万胜”所在的城市:然后用子查询(内层查询)的返回结果作为外层查询的条件。1)查询“万胜”的城市SELECT CITY FROM S WHERE SNAME=万胜图7-12)用第一步中的结果作为外层查询的条件。SELECT * FROM SWHERE CITY=(SELECT CITY FR

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1