电子教案——Visual FoxPro程序设计 联系客服

发布时间 : 星期五 文章电子教案——Visual FoxPro程序设计更新完毕开始阅读f513e411af45b307e87197a9

新乡学院商学院Visual FoxPro程序设计——电子教案 分析:①查询范围来源于职工表,而结果在仓库表,故用嵌套查询。

②若条件设为工资>1210,则比如WHI中工资有满足条件的,也没不满

足条件的 ,故无法适应此情况

应该设为:仓库号not in??工资<=1210

③如果某仓库还没有职工,则也满足②的条件not in职工,故应添加条件,保证该仓库至少有一名职工。

解: select * from 仓库 where仓库号not in ; (select 仓库号from 职工 where工资<=1210) and 仓库号 in (select 仓库号from 职工) 练习:

找出和职工E3有相同供应商的订购单及其订购日期.

解:select 订购单号,订购日期 from 订购单 where 供应商号 in ;

(select 供应商号 from 订购单 where 职工号=“E3”)

四.几个特殊运算符

1.BETWEEN??AND?? 在??和??之间

例:检索出工资在1220元到1240范围内的职工信息。 Select * from职工 where 工资 between1220and1240

说明:①此条件等价于(工资>=1220)and(工资<=1240),但更简洁。 ②“不在??之间”可用not between??and?? select * from 职工 where工资 not between 1220 and 1240 2.LIKE%——表示0个或多个字符 LIKE_——表示一个字符

例:检索出供应商是某公司的信息。

select * from 供应商 where 供应商名Like“% 公司” 3.不等于“!=”可用否定运算符NOT表示。 例:找出不在北京的供应商信息。

Select * from 供应商 where not(地址=“北京”) 学生练习:

1.找出定单号在OR70到OR80间的供应商。 2.检索出供应商是某厂的信息。 3.找出不在北京和上海的仓库。 解:

1.Select 供应商号 from 订购单 ;

where 订购单号 between “OR70” and “or80”

2.Seleet * from 供应商 where 供应商名 Like “%厂”

3.Select 仓库号 from 仓库 where not(城市=“北京” or 城市=“上

-49-

第五章 关系数据库标准语言SQL 海”) 五、排序

使用排序短语ORDER BY 可以查询结果排序。

格式:ORDER BY 字段名1[ASC|DESC][,字段名2[ASC|DESC]?] 说明:①可以指定排序方式为升序或降序

②允许按一列或多列排序

例:先按仓库号升序排序,再按工资降序排序检索出全部职工信息。 Selet * from 职工order by 仓库号 ASC,工资 desc 练习:按订购日期升序列出定单和供应商。 解:

selct定购单号,供应商号from买力订购单order by 订购日期 asc 六、简单的计算查询

SQL语句可以直接对检索结果进行计算,有5个计算函数: ① COUNT——计数 ② SUM——求和 ③ AVG——计算平均值 ④ MAX——就最大值 ⑤ MIN——求最小值

例:求WH2仓库的职工人数、工资总数、平均工资、最高工资和最低工资。 Select count(*) as 人数,avg(工资) as 平均工资,; Sum(工资) as 工资合计,max(工资)as 最高工资,; min(工资) as 最低工资 from 职工 Where 仓库号=“WH2” 练习:

1.找出仓库所在城市数目。 2.找出最早的订购日期。 3.求仓库的平均面积。

4.求北京和上海的仓库职工的工资总和。 解:

1.select count(distinct城市) from 订购单 2.select min(订购日期) from 订购单 3.select avg(面积) from 仓库

4.select sum(工资) from 职工 where 仓库号 IN;

(select仓库号from 仓库 where 城市=“北京” or 城市=“上海”)

七、分组与计算查询

短语:

GROUP BY 组名[,组名??][HAVING条件]

-50-

新乡学院商学院Visual FoxPro程序设计——电子教案 功能:先按属性分组,再进行查询,还可根据多个属性分组。当需要分组

满足某条件时才检索,可用Having子句来限定分组。

例1:求每个仓库的职工的平均工资。

select 仓库号,AVG(工资) from 职工 group by 仓库号 例2:求至少有两个职工的每个仓库的平均工资。 select仓库号,count(*)from 职工 ;

group by 仓库号 having count(*)>=2

练习:

1.统计每个职工的定单数

Select 职工号,count(订购单号) from 订购单 Group by 职工号 八、利用空值查询

IS NULL IS NOT NULL

例1:找出尚未确定供应商的定单信息。

Select * from 订购单 where 供应商号IS NULL

注:空值查询不能用“=NULL”, 因为空值不是一个确定的值,不能用“=”

运算符比较

例题:已确定了供应商。

Select * from 订购单 where 供应商号IS NOT NULL 练习:列出已确定了供应商的定单的供应商名。 Select 供应商名 from 供应商 where 供应商号IN;

(select 供应商号 from 订购单 where 供应商号 is not null)

九、别名与自连接查询

1.别名定义:为了简化关系名. 格式;<关系名><别名>

例:从定货管理的四张表中找出仓库和供应商都在北京的供应商. Select 供应商名 from 供应商S,订购单P,职工E,仓库W; where地址=“北京” and 城市=“北京”;

and s.供应商号=p.供应商号; and p.职工号=E.职工号; and e.仓库号=w.仓库号 2.自联接查询

自联接:降同一关系与其自身进行联接称自联接。

在此关系上,存在着一种递归联系,既关系中的一些元组,据出自同一值域的两个不同属性,可以与另外一些元组有一种对应关系(一对多的联系)。

例:雇员(雇员号,雇员姓名,经理)

雇员号和经理两个属性同一值域,且同一元组的这两个属性值是“上、

-51-

第五章 关系数据库标准语言SQL 下级”关系

根据雇员关系例出上一级经理及所领导的职员清单。

Select S.雇员姓名,“领导”,E.雇员姓名 from 雇员S,雇员E;

where S.雇员号=E.经理

练习:

职工(仓库号,职工号,姓名,工资,经理)

说明:职工号和经理两个属性出自同一个值域,同一元组的这两个属性值

是“上、下”级关系

根据新的职工关系列出上一级经理及其职员(被其领导)的清单。 解:

select S.姓名,“领导”,E.姓名 from 职工S,职工E;

where S.职工号=E.经理

十、内外层互相关联嵌套查询

内外层互相关的查询:指内层查询需要外层查询提供值,而外层查询的条件的需要内层查询的结果。

例:例出每个职工经手的具有最高总金额的订购单信息。

Select out.职工号,out.供应商号,out.订购单号,out.总金额;

from 订购单 out where总金额=;

(sleect max(总金额) from 订购单innerl; where out.职工号=innerl.职工号)

十一、使用量词和谓词的查询

在嵌套查询中还可以有如下两种形式:

1、<表达式><比较运算符>[ANY|SOME](子查询) 2、[NOT] EXISTS(子查询)

说明:①any、all、some是量词,其中any和some是同义词,比较时只要

子查询中有一行能使结果为真,则结果就为真;而all要求子查询中的所有行都使结果为真时,结果才为真。

②exists或not exists用来检查在子查询中是否有结果返回,即存在元组或不存在元组。

例1:检索那些仓库中还没有职工的仓库的信息。 Select * from 仓库 where not exists;

(Select * from 职工 where 仓库号=仓库.仓库号)

例2:检索有职工的工资大于且等于“WH1”仓库中任何一名职工的工资的仓

库号。

Select distinct仓库号 from 职工 where工资>=any;

(select 工资 from 职工 where 仓库号=“WH1”)

例3:检索有职工的工资大于或等于“WH1”仓库中所有职工的工资的仓库号。

-52-