欢迎来到天天文库
浏览记录
ID:48740279
大小:364.50 KB
页数:27页
时间:2020-01-21
《SQL复杂查询.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、《VFP数据库程序设计》第6讲SQL复杂查询本讲主要内容SQL联接查询SQL嵌套查询SQL计算查询SQL分类汇总查询SQL量词查询SQL谓词查询SQL合并查询一、SQL联接查询概念分析联接(或称连接)是关系运算中的基本操作之一,联接查询是一种基于多个关系的查询。例如,在“订货管理”数据库中找出工资多于1230元的职工号和他们所在的城市。这里所要求查询的信息分别出自职工(职工号字段)和仓库(城市字段)两个关系,这样的查询肯定是基于多个关系的,此类查询一般用联接查询来实现。一、SQL联接查询联接语法Sel
2、ect职工号,城市from仓库,职工;Where仓库.仓库号=职工.仓库号and工资>1230Select职工号,城市from仓库join职工;on仓库.仓库号=职工.仓库号where工资>1230[注意]若from之后的多个表中含有相同字段,在引用这些字段时,必须在字段前加上表名前缀。一、SQL联接查询实际操作试用SQL查询出工作在面积大于400的仓库的职工号以及这些职工工作所在的城市。Select职工号,城市from仓库join职工;on仓库.仓库号=职工.仓库号where面积>400二、SQL嵌
3、套查询概念分析嵌套查询也是基于多个关系的查询,不同的是这类查询所要求的结果出自一个关系,但相关的条件却涉及多个关系。换句话说就是,当查询关系X中的元组时,它的查询条件却是依赖相关的关系Y中的元组属性值,这时使用SQL的嵌套查询功能将非常方便。例如:在“订货管理”数据库中查询工资为1250元的职工所在仓库的仓库号以及他们工作所在的城市?二、SQL嵌套查询嵌套语法Select仓库号,城市from仓库where仓库号in;(select仓库号from职工where工资=1250)可以看到,在这个命令中含有两
4、个select-from-where查询模块,即内层查询块和外层查询块,内层查询块查询到的仓库号的值是WH1和WH2,这样就可以写出等价的命令:Select仓库号,城市from仓库where仓库号in(“WH1”,“WH2”)二、SQL嵌套查询实际操作试用SQL查询出所有职工的工资都多于1210元的仓库的信息。<注意>该查询要求也可以描述为:查询没有一个职工的工资少于或等于1210元的仓库的信息。Select*from仓库where仓库号notin;(select仓库号from职工where工资<=1
5、210)操作求精<注意>如果仔细分析和操作,我们将发现刚才的查询出现了错误,尽管“武汉”的“WH4”仓库还没有职工,但该仓库的信息也被查询出来了。所以必须认真分析查询要求,写出正确的SQL命令。如果要求排除那些还没有职工的仓库,查询要求可以叙述为:查询所有职工的工资都多于1210元的仓库的信息,并且该仓库至少要有一名职工。Select*from仓库where仓库号notin;(select仓库号from职工where工资<=1210)and仓库号in;(select仓库号from职工)二、SQL嵌套查
6、询实际操作试用SQL查询出和职工E4挣相同工资的所有职工的职工号Select职工号from职工where工资=;(select工资from职工where职工号=“E4”)三、SQL计算查询概念分析SQL语言是完备的。也就是说,只要数据是按关系方式存入数据库的,就能构造合适的SQL命令把它查询出来。事实上,SQL不仅具有一般的查询能力,而且还有计算方式的查询,比如查询职工的平均工资,查询某个仓库中职工工资的最高工资值等。用于计算查询的函数有:①Count:计数函数②Sum:求和函数③Avg:求平均值函数
7、④Max/Min:求最大/最小值函数这些函数用在Select短语中对查询结果进行计算。三、SQL计算查询实际操作1、找出供应商所在地的数目Selectcount(distinct地址)from供应商[分析]从表中看出,共有3个地址:北京、西安和郑州,所以结果为3。注意,除非对表中的记录个数进行统计,一般count函数应该使用distinct。三、SQL计算查询实际操作2、求出支付的工资总数。Selectsum(工资)from职工[分析]这个结果是职工表中的工资值的总和,它并不管是否有重复值。这时若使用
8、命令distinct将得到错误的结果。三、SQL计算查询实际操作3、求北京和上海的仓库职工的工资总和。Selectsum(工资)from职工where仓库号in;(select仓库号from仓库where城市=“北京”or城市=“上海”)三、SQL计算查询实际操作4、求所有职工的工资都多于1210元的仓库的平均面积。Selectavg(面积)from仓库where仓库号notin;(select仓库号from职工where工资<=1210)and仓库号i
此文档下载收益归作者所有