设有一个职工工资数据库gz.dbc,存放于visual foxpro的默认工作目录下,其中包括有三个数据表,分别是工资表gz.dbf、职工表zg.dbf、单位代码表dw.dbf
工资表gz.dbf
单位
编号
固定工资
活工资
津贴
应发合计
房租
水电气
应扣合计
实发工资
1
0001
489
273
34
0
50
12
0
0
1
0002
801
448
43
0
65
35
0
0
6
0003
691
386
51
0
39
61.01
0
0
6
0004
529
296
73
0
54
45
0
0
3
0005
585
327
39
0
61
65
0
0
2
0006
324
181
54
0
43
21
0
0
3
0007
546
305
63
0
52
34
0
0
6
0008
789
441
29
0
35
31
0
0
1
0009
579
324
43
0
46
53
0
0
2
0010
814
455
67
0
54
29
0
0
 
职工表zg.dbf
编号
单位
姓名
性别
出生日期
职称
0001
1
张三
1966-5-21
副教授
0002
1
李四
1967-4-30
副教授
0003
6
王五
1968-9-21
高工
0004
6
陈六
1970-7-23
讲师
0005
3
何七
1972-4-29
讲师
0006
2
李明
1966-5-4
副教授
0007
3
王阳
1972-8-1
会计师
0008
6
张红
1976-4-1
统计师
0009
1
陈洋
1980-2-1
助教
0010
2
成实
1978-10-28
助教
单位代码表dw.dbf
单位
名称
1
办公室
2
财务科
3
人事部
4
理学院
5
文学院
6
法学院
问题:
1.     写出“打开数据库gz.dbc”的vfp命令(或命令序列)
2.     写出“计算工资表中的应发合计、应扣合计、实发工资”的vfp命令
3.     写出“统计实发工资不低于800元的职工人数”的vfp命令
4.     写出“求出实发工资最高的职工姓名”的vfp命令
5.     写出“统计每个单位的职工人数的sql select命令,查询结果中应包含单位代码、单位名称、职工人数,并将结果存入c:\ABC.dbf中”的vfp命令
6.     写出“产生包含每个单位的单位名称、最高实发工资、最低实发工资、实发工资总计、平均实发工资5项数据的查询结果,并将结果存入从c:\ABC2.dbf中”的vfp命令
7.     写出“产生包含每个职工姓名、所在单位名称、实发工资3项数据的查询结果,并将结果存入c:\ABC1.dbf中”的vfp命令
8.     写出“产生包含字段TJ1TJ2的表ABC3.dbf,其中TJ1表示实发工资低于800元的职工人数,TJ2表示实发工资不低于800元的职工人数”的vfp命令。
9.     写出“将工资表首先单位排序,在同一单位内按实发工资降序排序,并将结果以浏览表格的形式显示”的vfp命令
10. 写出“工资表中增加一个 三八节另发(数值型,82)的字段”的vfp命令
11. 写出“对于男职工三八节另发字段的值为100元,对于女职工三八节另发字段的值为200元,并产生一个包括字段职工姓名、性别、三八节另发的表ABC4.dbf”的vfp命令
12. 写出“删除工资表中的水电气字段”的vfp命令。
 
答案:
1.     写出“打开数据库gz.dbc”的vfp命令(或命令序列)
Open database gz.dbc
2.     写出“计算工资表中的应发合计、应扣合计、实发工资”的vfp命令
Use gz.dbf
Replace all 应发合计 with 固定工资+活工资+津贴
Replace all 应扣合计 with 房租+水电气
Replace all 实发工资 with 固定工资+活工资+津贴-房租-水电气
3.     写出“统计实发工资不低于800元的职工人数”的vfp命令
方法一:
Select count(编号) from gz where 实发工资>=800
方法二:count for 实发工资>=800 to x
x
4.     写出“求出实发工资最高的职工姓名”的vfp命令
方法一:
Select max(实发工资) from gz into array x
Select zg.姓名,gz.实发工资 from zg,gz where zg.编号=gz.编号 and ;
gz.实发工资=x
方法二:
Use gz
Index on 实发工资 tag abc
Go bottom
Select 姓名 from zg where 编号=gz.编号
5.写出统计每个单位的职工人数的SQLSELECT命令,查询结果中应包含单位代码、单位名称、职工人数,并将结果存入C:\ABC.DBFvfp命令.
Select dw.单位,dw.名称,count(zg.编号) from dw,zg where dw.单位;
=zg.单位 group by zg.单位 into dbf C:\ABC.DBF
6. 写出“产生包含每个单位的单位名称、最高实发工资、最低实发工资、实发工资总计、平均实发工资5项数据的查询结果,并将结果存入从c:\ABC2.dbf中”的vfp命令
Select dw.名称,max(gz.实发工资),min(gz.实发工资),;
sum(gz.实发工资),avg(gz.实发工资) from gz,dw ;
 where gz.单位=dw.单位 group by gz.单位 into dbf c:\ABC2.dbf
7.写出“产生包含每个职工姓名、所在单位名称、实发工资3项数据的查询结果,并将结果存入c:\ABC1.dbf中”的vfp命令
Select zg.姓名,dw.名称,gz.实发工资 from zg,dw,gz ;
Where  zg.编号=gz.编号 and zg.单位=dw.单位;
 into dbf  C:\ABC1.DBF
8.写出“产生包含字段TJ1TJ2的表ABC3.dbf,其中TJ1表示实发工资低于800元的职工人数,TJ2表示实发工资不低于800元的职工人数”的vfp命令。
方法一:
Use gz.dbf
Count for 实发工资<800 to x1
Count for 实发工资>=800 to x2
Create table ABC3(TJ1 N(2),TJ2 N(2))
insert into ABC3(tj1,tj2) values(x1,x2)
注意:这里不可使用replace……with……语句
方法二:
Select sum(iif(实发工资<800,1,0)) as tj1,sum(iif(实发工资<800,0,1));
 as tj2 from gz into table c:\abc3
9.写出“将工资表首先单位排序,在同一单位内按实发工资降序排序,并将结果以浏览表格的形式显示”的vfp命令
SELECT * FROM GZ ORDER BY 单位, 实发工资 desc
10.写出“工资表中增加一个 三八节另发(数值型,82)的字段”的vfp命令
Alter table gz  add 三八节另发 N(8,2)
11.写出“对于男职工三八节另发字段的值为100元,对于女职工三八节另发字段的值为200元,并产生一个包括字段职工姓名、性别、三八节另发的表ABC4.dbf”的vfp命令
方法一:
Select zg.姓名,zg.性别,gz.三八节另发 from zg,gz where ;
zg.编号=gz.编号 into dbf ABC4
USE ABC4.DBF
Replace all 三八节另发 with 100 for 性别=”
Replace all 三八节另发 with 200 for 性别=”
方法二:
Select zg.姓名,zg.性别,gz.三八节另发 from zg,gz where ;
zg.编号=gz.编号 into dbf ABC4
update abc4 set三八节另发=iif(性别=””,100,200)
12.写出“删除工资表中的水电气字段”的vfp命令。
ALTER TABLE GZ DROP 水电气