- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
补充资料-数据应用与性能优化-第二章-联接查询案例几则-V1.0
联接查询案例几则
数据库的多表联接查询是一个十分重要的内容,在工作当中也是经常用到的。因为操作的复杂性和联接类型的多样性,导致在实际工作中经常会遇到问题后不知道从何处下手,为了锻炼提高这方面的能力,特意设计了两个案例作为练习之用。通过反复的练习一定可以掌握多表联接查询中的技巧。
案例描述1:Benet公司是一家综合业务集团公司,产品涉及多个方面。其中主营业务之一是网上商城。网上商城采用SQL Server 2005数据库系统作为后台。其中Benet数据库专门用来存储和网上商城有关的信息,其中有两张表benet_products和benet_productbook分别存储产品名称信息和对应产品的留言信息。表结构如下图2.1和图2.2
图2.1 benet_products表结构
图2.2 benet_productbook表结构
在网站运营一段时间后,表中已经存储了一些相关的信息,这时候管理分别对两张表执行了Select查询,分别得到如下的结果,对于benet_products表执行Select查询后的结果如图2.3,对于benet_productbook执行Select查询后的结果如图2.4:
图2.3 benet_products表包含的信息
图2.4 benet_productbook表包含的信息
问题1:benet公司现在希望管理员能够查询对于产品的评价,如果没有评价的产品就不要在表中体现出来,即只有客户留下评价的产品列举出来。该如何实现?
实现方法:在SQL Server 2005系统管理器中新建查询,并输入如下代码:
select s.id,s.pro_name,b.pro_id,b.content
from benet_products as s inner join benet_productbook as b
on b.pro_id=s.id
查询的结果如图2.5所示:
图2.5 对多表进行内联接查询的结果
从查询的结果可以看出。数据库已经根据用户的需要,将所有有评价的产品列举了出来。而其他从来没有过评价的产品都没有显示出来。那么如果输入如下代码会产生什么结果呢?
select s.pro_name,s.id,b.pro_id,b.content
from benet_products as s inner join benet_productbook as b
on s.id=b.id
查询的结果如图2.6所示:
图2.6 多表内联接查询的结果
从查询结果可以看出,虽然使用的语法结构没有问题,但是查询的结果确和上面的查询结果不一致,产生这种情况的原因是因为在将两表联接在一起时选择错了关键字。而如果一旦选择了错误相连的关键字,那么产生的查询结果将和用户的需求是截然不同的。
问题2:Benet公司经过经验总结,认为没有评价的产品不是热点产品,所以希望减少进货量,现在公司希望查询出所有没有评价的产品,该如何实现?
实现方法:在SQL Server 2005系统管理器中新建查询,并输入如下代码:
select s.pro_name,s.id,b.pro_id,b.content
from benet_products as s
left outer join benet_productbook as b
on s.id=b.pro_id
查询的结果如图2.7所示:
图2.7 多表外联接查询的结果
从查询结果中可以很清楚的看出产品手表、新款服装、冰镇饮料都没有任何评价,由此可以得知该三类产品并不是热点产品。这种查询是通过左外联接的方式来实现的。
案例描述2:Benet公司创建了一个投票选举系统,在benet数据库中创建了两张表system和information用来分别存储投票的具体情况和投票者的信息表。表的内容如图2.8和2.9:
图2.8 system表中的所有信息
图2.9 information表中的所有信息
问题1:benet公司现在希望管理员能够查出哪些题目被投票了,投票的用户都来自于哪些IP地址,应该如何去做?
实现方法:在SQL Server 2005系统管理器中新建查询,并输入如下代码:
select m.id,m.title,i.ip
from system as m right join information as i
on m.id=i.id
查询的结果如图2.10所示:
图2.10 右外联接查询的结果
从查询语句中分析,因为这里主要希望得到右侧表的数据信息,所以一定要使用右外连接。如果使用左外连接。那么一些没有投票的项目内容也会体现出来。如图2.11。这样显然是没有必要的。
图2.11 左外联接
文档评论(0)