资源预览内容
第1页 / 共27页
第2页 / 共27页
第3页 / 共27页
第4页 / 共27页
第5页 / 共27页
第6页 / 共27页
第7页 / 共27页
第8页 / 共27页
第9页 / 共27页
第10页 / 共27页
亲,该文档总共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 工资如果仔细分析和操作,我们将发现刚才的查询出现了 错误,尽管“武汉”的“WH4”仓库还没有职工,但该仓库的信 息也被查询出来了。所以必须认真分析查询要求,写出正确 的SQL命令。如果要求排除那些还没有职工的仓库,查询要求可以叙述 为:查询所有职工的工资都多于1210元的仓库的信息,并且 该仓库至少要有一名职工。Select * 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!信息技术系 刘 建
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号