您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据结构与算法 > 数据库实验报告高级查询
实验三高级查询1实验目的(1)掌握SQL的高级查询的使用方法,如分组统计、嵌套查询、集合查询等等。2实验内容2.1掌握SQL高级查询使用方法(1)分组统计。(2)嵌套查询,包括IN查询、EXISTS查询。(3)集合查询。3实验要求(1)深入复习教材第三章SQL有关高级查询语句。(2)根据书上的例子,针对TPCH数据库模式设计分组统计查询、嵌套查询(IN、EXISTS)语句和集合查询语句,每种类型的基本查询至少要设计一个查询,描述清楚查询要求,运行你所设计的查询语句,并截图相应的实验结果,每幅截图并要有较为详细的描述。也可以按照附2所列示例查询做实验。(3)实验步骤和实验总结中要详细描述实验过程中出现的问题、原因和解决方法。4实验步骤4.1掌握SQL高级查询使用方法1不带分组过滤条件的分组统计查询。统计每个顾客订购金额。Selectsum(totalprice)FromordersO,customerCWhereO.custkey=C.custkeyGroupbyO.custkey2带分组过滤条件的分组统计查询。查询平均每个订单金额超过1000元的顾客编号及其姓名。SelectC.custkey,C.nameFromordersO,customerCWhereO.custkey=C.custkeyGroupbyC.custkey,C.nameHavingAVG(O.totalprice)10003IN嵌套查询。查询订购了“海大”制造的“船舶模拟驾驶舱”的顾客。SelectO.custkeyFromordersOWhereO.orderkeyin(selectL.orderkeyFromlineitemL,WhereL.partkeyin(selectP.partkeyFrompartPWhereP.name=’船舶模拟驾驶舱’andp.mfgr=’海大’))4单层EXISTS嵌套查询。查询没有购买过“海大”制造的“船舶模拟驾驶舱”的顾客。SelectO.custkeyFromordersOWherenotexists(select*FromlineitemLWhereL.orderkey=O.orderkeyandL.partkeyin(selectP.partkeyFrompartPWhereP.name=’船舶模拟驾驶舱’andp.mfgr=’海大’))5双层EXISTS嵌套查询。查询至少购买过顾客“张三”购买过的全部零件的顾客姓名。SelectdistinctC1.nameFromcustomerC1,orderO1,lineitemL1,partP1WhereC1.custkey=O1.custkeyandO1.orderkey=L1.orderkey=P1.partkeyandNotexists(select*WhereC2.custkey=O2.custkeyandO2.orderkey=L2.orderkey=P2.partkeyandC2.name=’张三’andNotexists(select*FromcustomerC3,orderO3,lineitemL3,partP3WhereC3.custkey=O3.custkeyandO3.orderkey=L3.orderkey=P3.partkeyandP2.partkey=P3.partkeyAndC3,name=C1.name))6集合查询(交、并、差各设计一个)。查询顾客“张三”和“李四”都订购过的全部零件的信息。Select*FrompartPWhereP.partkeyin(selectL.partkeyFromcustomerC,lineitemL,ordersOWhereC,name=’张三’andc.custkey=O.custkeyandO.orderkey=L.orderkey)INTERSECTSelect*FrompartP1WhereP1.partkeyin(selectL.partkeyFromcustomerC,lineitemL,ordersOWhereC,name=’李四’andc.custkey=O.custkeyandO.orderkey=L.orderkey)查询顾客“张三”和“李四”订购的全部零件的信息。Select*FrompartPWhereP.partkeyin(selectL.partkeyFromcustomerC,lineitemL,ordersOWhereC,name=’张三’andc.custkey=O.custkeyandO.orderkey=L.orderkey)UniomSelect*FrompartP1WhereP1.partkeyin(selectL.partkeyFromcustomerC,lineitemL,ordersOWhereC,name=’李四’andc.custkey=O.custkeyandO.orderkey=L.orderkey)顾客“张三”订购过,而“李四”没订购过的零件的信息。Select*FrompartPWhereP.partkeyin(selectL.partkeyFromcustomerC,lineitemL,ordersOWhereC,name=’张三’andc.custkey=O.custkeyandO.orderkey=L.orderkey)ExceptSelect*Select*FrompartPWhereP.partkeyin(selectL.partkeyFromcustomerC,lineitemL,ordersOWhereC,name=’李四’andc.custkey=O.custkeyandO.orderkey=L.orderkey)7FROM子句中的嵌套查询查询平均每个订单金额超过1万元的顾客中属于中国的顾客信息。SelectC.*FromcustomerCWhereC.custkeyin(selectO.custkeyFromordersO,customerC2WhereO.custkey=C2.custkeyGroupbyC2.custkey,O.custkeyHavingAVG(O.totalprice)10000)AndC.nationkey=(selectN.nationkeyFromnationNWhereN.name='中国')8总结与体会5.1实验中出现的问题及其解决方案1.聚集函数出现在查询条件中的where语句中时,不可以单纯的写AVG(***),必须写成SelectAVG(***)From***Where***的形式,否则就只能写在having语句中,并且在having语句前加上groupby语句2在使用exists语句时,要注意各个表之间的关系。5.11总结熟悉了SQL查询的实际应用,如何利用数据库查询相关数据。掌握SQL的高级查询的使用方法,如分组统计、嵌套查询、集合查询。5.12体会高级查询使查询步骤变得简短,但是增加了写语句的难度。要想使用高级查询,需要充分了解各种语句的使用方法、范围以及注意事项。
本文标题:数据库实验报告高级查询
链接地址:https://www.777doc.com/doc-5429703 .html