收藏 分销(赏)

SQL复杂查询.ppt

上传人:pc****0 文档编号:10472943 上传时间:2025-05-29 格式:PPT 页数:27 大小:364.50KB
下载 相关 举报
SQL复杂查询.ppt_第1页
第1页 / 共27页
SQL复杂查询.ppt_第2页
第2页 / 共27页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,VFP,数据库程序设计第6讲,SQL,复杂查询,本讲主要内容,SQL,联接查询,SQL,嵌套查询,SQL,计算查询,SQL,分类汇总查询,SQL,量词查询,SQL,谓词查询,SQL,合并查询,一、,SQL,联接查询,概念分析,联接(或称连接)是关系运算中的基本 操作之一,联接查询是一种基于多个关系的查询。例如,在“订货管理”数据库中找出工资多于1230元的职工号和他们所在的城市。,这里所要求查询的信息分别出自,职工,(职工号字段)和,仓库,(城市字段)两个关系,这样的查询肯定是基于多个关系的,此类查询一般用联接查询来实现。,一、,SQL,联接查询,联接语法,Select,职工号,城市,from,仓库,职工;,Where,仓库.仓库号=职工.仓库号,and,工资1230,Select,职工号,城市,from,仓库,join,职工;,on,仓库.仓库号=职工.仓库号,where,工资1230,注意,若,from,之后的多个表中含有相同字段,在引用这些字段时,必须在字段前加上表名前缀。,一、,SQL,联接查询,实际操作,试用,SQL,查询出工作在面积大于400的仓库的职工号以及这些职工工作所在的城市。,Select,职工号,城市,from,仓库,join,职工;,on,仓库.仓库号=职工.仓库号,where,面积400,二、,SQL,嵌套查询,概念分析,嵌套查询也是基于多个关系的查询,不同的是这类查询所要求的结果出自一个关系,但相关的条件却涉及多个关系。换句话说就是,当查询关系,X,中的元组时,它的查询条件却是依赖相关的关系,Y,中的元组属性值,这时使用,SQL,的嵌套查询功能将非常方便。例如:在“订货管理”数据库中查询工资为1250元的职工所在仓库的仓库号以及他们工作所在的城市?,二、,SQL,嵌套查询,嵌套语法,Select,仓库号,城市,from,仓库,where,仓库号,in;,(select,仓库号,from,职工,where,工资=1250),可以看到,在这个命令中含有两个,select-from-where,查询模块,即内层查询块和外层查询块,内层查询块查询到的仓库号的值是,WH1,和,WH2,,这样就可以写出等价的命令:,Select,仓库号,城市,from,仓库,where,仓库号,in (“WH1”,“WH2”),二、,SQL,嵌套查询,实际操作,试用,SQL,查询出所有职工的工资都多于1210元的仓库的信息。该查询要求也可以描述为:查询没有一个职工的工资少于或等于1210元的仓库的信息。,Select,*,from,仓库,where,仓库号,not in;,(select,仓库号,from,职工,where,工资=1210),操作求精,如果仔细分析和操作,我们将发现刚才的查询出现了错误,尽管“武汉”的“,WH4”,仓库还没有职工,但该仓库的信息也被查询出来了。所以必须认真分析查询要求,写出正确的,SQL,命令。,如果要求排除那些还没有职工的仓库,查询要求可以叙述为:查询所有职工的工资都多于1210元的仓库的信息,并且该仓库至少要有一名职工。,Select,*,from,仓库,where,仓库号,not in;,(select,仓库号,from,职工,where,工资=1210),and,仓库号,in;,(select,仓库号,from,职工),二、,SQL,嵌套查询,实际操作,试用,SQL,查询出和职工,E4,挣相同工资的所有职工的职工号,Select,职工号,from,职工,where,工资=,;,(select,工资,from,职工,where,职工号=“,E4”),三、,SQL,计算查询,概念分析,SQL,语言是完备的。也就是说,只要数据是按关系方式存入数据库的,就能构造合适的,SQL,命令把它查询出来。事实上,,SQL,不仅具有一般的查询能力,而且还有计算方式的查询,比如查询职工的平均工资,查询某个仓库中职工工资的最高工资值等。用于计算查询的函数有:,Count,:,计数函数 ,Sum,:,求和函数,Avg,:,求平均值函数,Max/Min:,求最大/最小值函数,这些函数用在,Select,短语中对查询结果进行计算。,三、,SQL,计算查询,实际操作,1、找出供应商所在地的数目,Select count(distinct,地址),from,供应商,分析,从表中看出,共有3个地址:北京、西安和郑州,所以结果为3。注意,除非对表中的记录个数进行统计,一般,count,函数应该使用,distinct。,三、,SQL,计算查询,实际操作,2、求出支付的工资总数。,Select sum(,工资),from,职工,分析,这个结果是职工表中的工资值的总和,它并不管是否有重复值,。,这时若使用命令,distinct,将得到错误的结果。,三、,SQL,计算查询,实际操作,3、求北京和上海的仓库职工的工资总和。,Select sum(,工资),from,职工,where,仓库号,in;,(select,仓库号,from,仓库,where,城市=“北京”,or,城市=“上海”,),三、,SQL,计算查询,实际操作,4、求所有职工的工资都多于1210元的仓库的平均面积。,Select,avg,(,面积),from,仓库,where,仓库号,not in;,(select,仓库号,from,职工,where,工资=2,五、,SQL,量词查询,概念分析,前面已经用过和嵌套查询有关的运算符,in,和,not in。,除此之外还有量词查询具有同嵌套查询相同的格式。,Any、All、Some,是量词,其中,Any,和,Some,是同义词,在进行比较运算时只要子查询中有一行能使结果为真,则结果就为真;而,All,则要求子查询中的所有行都使结果为真时,结果才为真。,五、,SQL,量词查询,实际操作,1、检索有职工的工资大于或等于,WH1,仓库中任何一名职工工资的仓库号。,Select distinct,仓库号,from,职工,where,工资 =,any;,(select,工资,from,职工,where,仓库号=“,WH1”),五、,SQL,量词查询,实际操作,2、检索有职工的工资大于或等于,WH1,仓库中所有职工工资的仓库号。,Select distinct,仓库号,from,职工,where,工资 =,all;,(select,工资,from,职工,where,仓库号=“,WH1”),六、,SQL,谓词查询,概念分析,前面已经用过和嵌套查询有关的运算符,in,和,not in。,除此之外还有谓词查询具有同嵌套查询相同的格式。,Exists,和,Not Exists,是量词,用来检查子查询中是否有结果返回,即存在元组或不存在元组。,注意 胃词只是判断子查询中是否有或没有结果返回,它本身并没有任何运算或比较。,六、,SQL,谓词查询,实际操作,1、检索那些仓库中还没有职工的仓库的信息。,Select *,from,仓库,where not exists;,(select,*,from,职工,where,仓库号=仓库.仓库号,),六、,SQL,谓词查询,实际操作,2、检索那些仓库中至少已经有一个职工的仓库的信息。,Select *,from,仓库,where exists;,(select,*,from,职工,where,仓库号=仓库.仓库号,),七、,SQL,合并查询,集合并运算,SQL,支持集合的并运算(,Union),,即可以将两个,select,语句的查询结果通过并运算合并成一个查询结果。为了进行并运算,要求这样的两个查询结果具有相同的字段个数,并且对应字段的值要出自同一个值域,即具有相同的数据类型和取值范围。例如,如下语句的结果是城市为北京和上海的仓库的信息:,Select *,from,仓库,where where,城市=“北京”;,Union;,Select *,from,仓库,where where,城市=“上海”,本讲到此结束,谢谢您的光临,Thank you very much!,信息技术系 刘 建,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服