设有一个职工工资数据库 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 水电气