用嵌套查询做的题目也可以用连接查询来做 但可能 结果有重复 需要用distinct消除重复值
例题 1 检索出至少有一个职工的工资大于1210的仓库所在的城市
Select 城市 from 仓库 where 仓库号 in (select 仓库号 from 职工 where 工资>1220)
Select 职工.仓库号 ,城市 from 仓库,职工 where 仓库.仓库号=职工.仓库号 and 工资>1220
Select 城市 from 仓库 where 仓库号 in(select 仓库号 from 职工 where 工资>1210 )
Select 城市 from 仓库 where 仓库号 in (select 仓库号 from 职工 where 工资>1220)
别名语法:<关系名> <别名>(注意只能在from关键字后面使用)
学生练习:检索出任意一门成绩大于80的学生
不进行讲解 例题2 检索出签订了订购单号为OR76的订单的职工所在的城市
select 城市 from 仓库,职工,订购单 where (订购单.职工号=职工.职工号 and 仓库.仓库号=职工.仓库号) and 订购单号="OR76"
不进行讲解 例题3 检索出地址为北京且已经和城市在北京的仓库里
工作的职工签订了订购单的供应商名 (书上137)
内外层互相关嵌套查询
有时也需要内外层互相关的查询,这时内层查询条件需要外层查询提供值,而外层查询条件需要内层查询的结果范围
用量词和谓词的查询 not in in
exists是谓词
exists 和 not exists 用来检查在子查询中是否有元组(注意:元组就是记录)返回
例题1 检索那些还没有职工的仓库的信息
检索那些已经有职工的仓库的信息
Select * from 仓库 where not exists (select * from 职工 where 仓库号=仓库.仓库号)
Select * from 仓库 where exists(select * from 职工 where 仓库号=仓库.仓库号)
这样的内层查询引用了外层查询中的表 所以这样的查询就是内外层互相关嵌套
查询 学生练习 根据职工关系和订购单关系检索那些还没有签订订购单的职工的信息
Select * from 职工 where not exists (select * from 订购单 where 职工号=职工.职工号)
any , all ,some 是量词 其中 any 和some 是其中一个意思
all 全部
any some 其中一个
例题2 检索有职工的工资大于或等于WH1仓库中任何一名职工的工资的仓库号
Select distinct 仓库号 from 职工 where 工资 >= any;
(select 工资 from 职工 where 仓库号=”WH1”)
Select distinct仓库号 from 职工 where 工资>=(select min(工资) from 职工 where 仓库号=”WH1”)
例题3 检索有职工的工资大于或等于WH1仓库中所有职工的工资的仓库号
Select 仓库号 from 职工 where 工资>=all(select 工资 from 职工 where 仓库号=”WH1”)
Select 仓库号 from 职工 where 工资>=(select max(工资) from 职工 where 仓库号=”WH1”)
超连接查询
超连接查询和连接查询语法结构
不同 效果类似
Inner join 和连接查询等价
Left join 不做深入了解
Right join 不做深入了解
Full join 不做深入了解
语法规则:
Select 字段1,字段2… from 表1 inner join 表2 on 表1.公共字段=表2.公共字段 where 题目给定的条件
VF中Sql select的几个特殊选项
只显示前几项纪录:
top n [percent] (n是一个具体的值)
如
Top 3
Top 30 percent
注意top 短语必须要和order by 短语同时使用,且用于*后面
例题1 显示工资最高的2位职工的信息
Select * top 2 from 职工 order by 工资 desc
例题2显示工资大于1210且工资最低的那40%职工的信息
Select * top 40 percent from 职工 where 工资>1210 order by 工资
将查询结果存 放到数组中 (二维数组)
Into array 数组名
例题3将所有职工的信息存放到数组abc中
Select * from 职工 into array abc
将查询结果存放到临时文件
该短语产生一个只读的临时表文件,查询结束后该临时表是当前表 可以像一般.dbf文件一样使用,当关闭文件时,该文件自动删除
永久表文件 临时表文件
Into cursor 临时文件名
select * from 职工 into cursor abc
将查询结果存放到永久表中
into dbf(table) 表名
select * from 职工 into dbf abc.dbf
将查询结果存放到文本文件中 .txt
To file 文本文件名 [addi