设有一个职工工资数据库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. 写出“产生包含字段TJ1、TJ2的表ABC3.dbf,其中TJ1表示实发工资低于800元的职工人数,TJ2表示实发工资不低于800元的职工人数”的vfp命令。
9. 写出“将工资表首先单位排序,在同一单位内按实发工资降序排序,并将结果以浏览表格的形式显示”的vfp命令
10. 写出“工资表中增加一个 三八节另发(数值型,8,2)的字段”的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.DBF中”的vfp命令.
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.写出“产生包含字段TJ1、TJ2的表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.写出“工资表中增加一个 三八节另发(数值型,8,2)的字段”的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 水电气