設有一個職工工資數據庫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 |
張三 |
男 |
|
副教授 |
0002 |
1 |
李四 |
男 |
|
副教授 |
0003 |
6 |
王五 |
女 |
|
高工 |
0004 |
6 |
陳六 |
男 |
|
講師 |
0005 |
3 |
何七 |
女 |
|
講師 |
0006 |
2 |
李明 |
女 |
|
副教授 |
0007 |
3 |
王陽 |
男 |
|
會計師 |
0008 |
6 |
張紅 |
男 |
|
統計師 |
0009 |
1 |
陳洋 |
女 |
|
助教 |
0010 |
2 |
成實 |
女 |
|
助教 |
單位代碼表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 水電氣