《VFP》 第四章习题.docx
《《VFP》 第四章习题.docx》由会员分享,可在线阅读,更多相关《《VFP》 第四章习题.docx(16页珍藏版)》请在冰豆网上搜索。
《VFP》第四章习题
第四章
一、填空
1、某图书资料室的:
"图书管理"数据库中有三张表:
TS.dbf(图书表)、DZ.dbf(读者表)与JY.dbf(借阅表),表结构如下:
Ts.dbf结构DZ.dbf`结构Jy.dbf结构
字段名字段类型字段名字段类型字段名字段类型
编号C(10)借书证号C(6)借书证号C(6)
分类号C(10)单位C(18)编号C(10)
书名C(8)姓名C(8)借书日期D(8)
出版单位C(20)性别C
(2)还书日期D(8)
作者C(8)职称C(10)
单价N(7,2)地址C(20)
馆藏册数N(4)
完善下列语句以查询该图书资料室各出版单位出版图书的馆藏总册数、总金额、平均单价:
SELECT出版单位,SUM(馆藏册数)AS馆藏总册数,;
SUM(馆藏册数*单价)AS总金额,【AVG(单价)】AS平均单价
FROM图书馆里!
TS
GROUPBY出版单位
完善下列语句以查询借阅次数最多的前10名读者的借书证号、姓名、单位和借阅次数:
SELECT【TOP10】JY.借书证号,DZ.姓名,DZ.单位,COUNT(*)AS借阅次数,;
FROM图书馆里!
DZINNERJOIN图书管理!
JY;
ONDZ.借书证号=JY.借书证号;
GROUPBY1;
ORDERBY【4/借阅次数/count(*)】desc
2、已知借阅(JY)表中含读者类型(lx),借阅日期(jyrq)和还书日期(hsrq)等字段.
下列SQL命令用来统计教师,学生借书过期罚款人次和罚款金额.其中罚款金额的算法如下:
(1)对于学生类读者(lx字段值为"X")来说,借阅期限为30天.每超过一天,
罚款金额以每本书每天0.05元计算;
(2)对于教师类读者(lx字段值为"J")来说,借阅期限为60天.每超过一天,
罚款金额以每本书每天0.05元计算;
SELECT"教师"AS类型,COUNT(*)AS罚款人次;
SUM(0.05*(【hsrq-jyrq-60】))AS罚款金额;
FROMsjk!
jy;
WHEREjy.lx="J"ANDhsrq-jyrq>60;
【UNION】;
SELECT"学生"AS类型,COUNT(*)AS罚款人次;
SUM(0.05*(hsrq-jyrq-30))AS罚款金额;
FROMsjk!
jy;
WHEREjy.lx="X"ANDhsrq-jyrq>30;
3、在SELECT-SQL语句中,若要使查询结果中无重复记录,则可使用【distinct】关键字;
若要组合两个SQLSELECT语句的结果(结构相同),则应使用【union】子句.
(请写出完整的关键字)
4、已知学生(XS)表中含学号(xh)、性别(xb)、专业(zy)字段.下列SQL命令用来查询每个专业的男、女生人数.
SELECTzy,SUM(IIF(xb='男',1,【0】))AS男生人数,;
SUM(IIF(xb="女",1,【0】))AS女生人数;
FROMxs;
GROUPBY1
5、SQL插入记录的命令是INSERT,删除记录的命令是【delete/dele】,修改记录的命令是【update/upda】.
6、数据库JXSJ中有,XS(学生)表和CJ(成绩)表.
学生表中有XH(学号)、XM(姓名)等字段;
成绩表中有XH(学号)、KCDM(课程代码)和CJ(成绩,数值型)等字段,
两表通过XH字段创建了一对多的关系.
下列SELECT.SQL命令用于查询各门考试成绩均在60分以上的学生成绩情况,
要求输出学号、姓名和总成绩,且只输出总成绩前5名.
SELECTTOP5Xs.xhAS学号,Xs.xmAS姓名,SUM(Cj.cj)AS总成绩;
FROMjxsj!
xsINNERJOINjxsj!
cj;
ONXs.xh=cj.xh;
GROUPBYXs.xh;
【Having】MIN(Cj.cj)>=60;
ORDERBY3DESC
7、在VFP中创建多表查询时,表之间的四种联接类型分别为内部联接、左联接、右联接和
【完全联接】
8、已知某数据库表KCYZ.DBF含有5个字段,若其中有一个名为bxk的逻辑型字段,
则可用下列SQL命令查询bxk字段值为.T.的所有记录,且要求输出所有字段,
输出结果保存在表TEMP.DBF中.
SELECT【*】FROMkcyz;
WHEREbxk=.T.:
【into】Tabletemp
9、设有一职工档案表(zgda.dbf),含有姓名(xm),部门(bm)和姓名(xb)等字段.
使用下列SELECT-SQL命令可以将查询结果保存在文本文件temp.txt中:
SELECTxm,bmFROMzgdaORDERBYbm【tofile】temp
10、某图书管理系统中JY(借阅)表是已还书情况的记录表,其中含有DZH(图书证号,字符型)、JYRQ(借阅日期,日期型)和HSRQ(还书日期,日期型)等字段.
下列SELECT-SQL命令用于查询每个图书证号借书本数、过期本数、过期罚款数.
(注:
"过期"是指借阅超过60天,对每本书借阅超过60天者,超过部分按每天0.05元计算罚款.)
SELECTJy.dzhas图书证号,COUNT(*)as借书本数,;
【Sum(iif(hsrq-jyrq>60,1,0))】AS过期本数,;
SUM(IIF(Jy.hsrq-Jy.jyrq>60,(Jy.hsrq-Jy.jyrq-60)*0.05,0.00))AS罚款数;
FROMJY;
GROUPBYJy.dzh
11、某数据库SJK中包含学生表(xs.DBF)和成绩表(CJ.DBF),表的结构如图所示
XS.DBF
字段名含义字段类型及宽度
XH学号C(10)
XM姓名C(8)
XDM系代码C
(2)
CJ.DBF
字段名含义字段类型及宽度
XH学号C(10)
CJ成绩N(3)
BZ备注M
(注:
两个表均以XH为表达式创建了主索引):
基于学生表和成绩表,可用下列SELECT-SQL命令查询:
各系学生考试合格的人数
(注:
成绩大于或等于60分为合格),要求查询系代号、系人数、系合格人数.
SELECTXs.xdhAS系代号,COUNT(*)AS系人数,;
SUM(【IIF(cj>=60,1,0)/IIF(cj<60,0,1)】)AS系合格人数,;
FROMsjk!
xsINNERJOINsjk!
cj;
ONXs.xh=cj.xh;
GROUPBY【Xs.xdh/xdh/1】
12、设某图书资料室的"图书管理"数据库中有3张表:
TS.dbf(图书表),
DZ.dbf与JY.dbf(借阅表),表结构如图所示:
Ts.dbf结构DZ.dbf`结构Jy.dbf结构
字段名字段类型字段名字段类型字段名字段类型
编号C(10)借书证号C(6)借书证号C(6)
分类号C(10)单位C(18)编号C(10)
书名C(8)姓名C(8)借书日期D(8)
出版单位C(20)性别C
(2)还书日期D(8)
作者C(8)职称C(10)
单价N(7,2)地址C(20)
馆藏册数N(4)
完善下列语句以查询该图书资料室各出版单位单位出版图书的藏书总册数,总金额和平均单价:
SELECT出版单位,SUM(藏书册数)AS藏书总册数;
SUM(【藏书册数*单价】)AS总金额,AVG(单价)AS平均单价;
FROM图书管理!
TS;
GROUPBY出版单位
完善下列语句以查询借阅次数在10次(含10次)以上的读者的借书证号,姓名,单位和借阅次数:
SELECTDZ.借书证号,DZ.姓名,DZ.单位,COUNT(*)as借阅次数;
FROM图书管理!
DZINNTERJOIN图书管理!
JY;
ONDZ.借书证号=【JY.借书证号】;
GROUPBY1;
【Having】借阅次数>=10
13、在某教学管理数据库中有一个学生表(XS.DBF),其表结构及其所含有的记录数据如图所示.
表结构:
XS.DBF
字段名含义字段类型及宽度
XH学号C(8)
XM姓名C(8)
XB性别C
(2)
CSRQ出生日期 D
表数据
XH XM XB CSRQ
010201王玲 女 06/02/82
010203李勇 男 06/09/82
010202张三 男 02/08/82
010301刘芳 女 06/09/82
010402王勇敢 男 02/28/82
010302李圆圆 女 12/12/82
010401张勇 男 10/09/82
对于下列SELECT-SQL语句,其查询结果含有【3】条记录.
SELECT*FROMxsWHERESUBSTR(xh,5,2)='01'
若学生表已在当前工作区打开,运行下列程序后再VFP主窗口显示的结果为【3】.
【程序清单】
SETTALKOFF
n=0
CLEAR
GOTOP
DOWHILE!
EOF()
IFAT("勇",xm)>0
n=n+1
ENDIF
SKIP
ENDDO
?
n
14、若js.dbf表中含有若干字段且已在当前工作区中打开,则仅浏览表中gh、xm、xb
这三个字段的数据,可用SELECTgh,xm,xbFROMjs命令,或者用BROWSE命令:
BROWSE
【fieldxh,xm,xb/FIELxh,xm,xb】
15、SELECT-SQL查询语句中,表示两张表内联的关键字是【INNERJOIN】
16、本地视图的【基/源】表随视图的打开而自动地打开,但是不随视图的关闭而关闭.
17、在SELECT-SQL命令中,UNION子句的功能是把一条SELECT语句的查询结果同另一条SELECT语句的查询结果组合起来.用UNION子句组合的查询必须满足:
列数相同,对应的列必须具有相同的【类型】和【宽度】
18、在教学管理数据库SJK中有2个表:
KC.DBF(课程表)和CJ.DBF(成绩表),表结构如图所示:
KC.DBF
字段名含义字段类型及宽度
KCDH课程代号C(8)
KCM课程名C(26)
XF学分N
(2)
CJ.DBF
字段名含义字段类型及宽度
XH学号C(10)
KCDH课程代号C(3)
CJ成绩N(3)
则可用下列SQL命令查询总学分大于100的学生的学号和学分.
(注:
成绩为60或60以上才能获得相应学分,否则学分为0):
SELECTKc.xh,SUM(【iif(cj>=60,xf,0)】)AS总学分;
FROMsjk!
KcINNERJOINsjk!
Cj:
WHERECj.Kcdh=Kc.Kcdh;
GROUPBYCj.Xh;
【having】总学分>100
19、教学管理数据库中含有课程表(KC)及成绩表(CJ).
课程表中含有以下字段:
课程代号(kcdh),课程名(kcm),学分(xf);
成绩表中有以下字段:
学号(xh),课程代号(kcdh),成绩(cj).
成绩表记录了全体学生所学各门课程的成绩
现根据上述两表查询总学分已超过120的所有学生情况
(要求输出:
学号,平均分,总学分,并按学号的升序排列),可使用下述命令.
(注:
成绩小于60分的学分设置为0)
SELECTxhAS学号,AVG(cj.cj)AS平均分,【sum(IIF(cj.cj>=60,kc.xf,0))】AS总学分;
FROMkcINNERJOINcjONkc.kcdh=cj.kcdh;
GROUPBYxh;
HAVING总学分>=120;
ORDERBYxh
20、某图书管理数据库有"读者"和"借阅"2个表.
"读者"表中含有:
借书证号(字符型)、单位(字符型)、姓名(字符型)等字段,
"借阅"表中含有:
借书证号(字符型),书目编号(字符型),借书日期(日期型)等字段.
执行下列SELECT-SQL命令,可以检索出当前至少借阅了5本图书的读者姓名和所在单位.
SELECT姓名,单位FROM读者WHERE借书证号IN;
(SELECT借书证号FROM借阅GROUPBY借书证号HAVING
【Count(书目编号)/Count(*)】>=5)
21、利用查询设计器设计查询,可以实现多项功能,查询设计器最终实质上是生成一条
【查询/SELECT/SELE】语句.
22、视图可以在"数据库设计器"窗口中打开,也可以用USE命令打开,但在使用USE命令之前,必须打开包含该视图的【数据库】
23、已知成绩(CJ)表中含学号(xh)、课程代号(kcdh)和成绩(cj)字段,
成绩表中存有记录数据如图所示.
xhkcdhcj
0201010180
0201010256
0204030133
0203020367
0203040289
运行下列程序字段以后,变量m、n的值分别为【.F.】和【2】.
【程序清单】
SELECT*FROMcj;
WHEREcj.cj<60;
INTOTABLEcj_tmp
m=EOF()
n=RECCOUNT()
24、某数据库表GP.DBF包含的字段分别是
dm(股票代码,字符型)、mc(股票名称,字符型)、jg(当前价格,数值型)和
zdf(与上个交易日相比涨跌幅的百分数,数值型),
其部分数据如下表所示(zdf值为正数表示上涨,负数表示下跌):
下列SQL命令查询并显示上涨的股票信息(若上涨股票超过10种,
则仅显示上涨幅度最大的前10种股票信息).
SELECT【TOP10】dmAs股票代码,mcAs股票名称,jgAs当前价格,zdfas涨幅度;
Fromgp;
【GroupBy1】;
ORDERBYzdfDESC
25、已知课程(KC)表中含课程代号(kcdh)、课程名(kcm)等字段,
成绩(CJ)表中含课程代号(kcdh)、成绩(cj)等字段.
完善下列SQL命令以查询每门课的选课人数、优秀人数、不及格人数.
SELECTKc.kcdh,Kc.kcm,【COUNT(xh)/COUNT(*)】AS选课人数,;
SUM(IIF(cj.cj>=90,1,0))AS优秀人数,SUM(IIF(cj.cj<60,1,0))AS不及格人数;
FROMsjk!
kcINNERJOINsjk!
cj;
ONKc.kcdh=Cj.kcdh;
GROUPBY【kc.kcdh/kcdh/1】
26、在使用Select-sql进行查询时,若要保证在查询结果中没有重复记录,
可以在查询命令中使用【DISTINCT】关键字(请写出完整的关键字)
27、SQLSELECT语句中的【WHERE】用于实现关系的选择操作.
28、如果希望查询去向到一张临时表temp01,则其对应的SQL的命令为into
【cursor/curs】temp01
29、用SELECT-SQL命令对数据进行查询时,SELECT命令中FROM子句用来指定数据源表,
【where】子句用来筛选源表记录,【having】子句用来筛选结果记录.
30、SELECT-SQL查询语句中,分组语句的关键字是【groupby】
31、如果希望查询的顺序依某字段降序排列,则其关键字为【desc】
32、某数据库SJK中包含XS(学生)表,其基本结构如图所示:
XS.DBF
字段名含义字段类型及宽度
XH学号C(8)
XM姓名C(8)
XB性别C
(2)
csrq出生日期D
若规定每位学生的生日补贴100元,可用下列SELECT-SQL命令查询并显示:
各个月份出生学生的人数和各月份的补贴总额,要求输出月份、人数、补贴总额,
且结果按补贴总额降序排序.
SELECT【MONTH(csrq)】AS月份,COUNT(*)AS人数,;
【COUNT(*)*100/COUNT(xh)*100/100*count(*)/100*count(xh)】AS补贴总额;
FROMsjk!
xs;
GROUPBYl:
ORDERBY3【DESC】
33、在教学管理数据库JxsJ中有2个表:
XS.DBF(学生表)和CJ.DBF(成绩表),表结构如下:
XS.DBF
字段名含义字段类型及宽度
XH学号C(8)
XM姓名C(8)
XB性别C
(2)
CJ.DBF
字段名含义字段类型及宽度
XH学号C(8)
KCDH课程代号C(3)
CJ成绩N(3)
(1)完善下列SELECT-SQL命令,其功能是基于XS表和CJ表查询总成绩前3名的学生的情况,
要求输出为XH、XM、总成绩和选课门数.
SELECT【top3】XS.xh,XS.xm,SUM(CJ.CJ)AS总成绩,COUNT(*)AS选课门数;
FROMjxsj!
xsINNERJOINjxsj!
cj;
ONXs.xh=cj.xh;
GROUPBYXS.xh;
【orderby3desc/orderby总成绩desc/orderbysum(cj)desc】
(2)完善下列SELECT-SQL命令,其功能是基于XS表和CJ表查询有两门或两门以上课程不合格的学生情况.要求输出为XH、XM、选课门数和不及格门数,查询结果按不及格门数排序且将查询结果输出到打印机打印.(注:
CJ小于60为不及格)
SELECTXS.xh,XS.xm,COUNT(*)AS选课门数,【sum(iif(cj<60,1,0))】AS不及格门数;
FROMjxsj!
xsINNERJOINjxsj!
cj;
ONXs.xh=cj.xh;
GROUPBYCJ.xh;
ORDERBY4
【ToPrinter】
34、设有一考生成绩表(KSCJ),包含准考证号(ZKZH,字符型,宽度为10)、笔试成绩(BSCJ,数值型)、上机成绩(SJCJ,数值型)等字段.准考证号的编码方式为:
第1--3个字符表示学校代号,第4--5个字符为等级与语种代号,第6--8个字符为考场代号,第9--10个字符为在考场中的序号.如果笔试成绩大于30、上机成绩大于24为考试合格,则下列SELect-SQL命令可用于查询等级与语种代号为"52"的各学校考试通过率
(注:
通过率用数值表示范围为0—1,1表示100%通过).
SELECTLEFT(Kscj.zkzh,3)AS学校代号,【SUM(IIF(bscj>30andsjcj>24,1,0))】/COUNT(*)AS通过率;
FROMksci;
【WHERE】SUBSTR(Kscj.zkzh,4,2)='52';
【GroupBY学校代号/GroupBY1/GroupBYleft(zkzh,3)】
35、SELECT-SQL查询语句中,两张表之间的连接方式共有【4】种
36、SQL是一种高度非过程化的语言,它可以直接以【交互】方式使用,也可以【程序】方式使用.
37、已知教师(js)表中含教师号(jsh#)、性别(xb)、专业(zy)字段.下列SELECT—SQL语句用来查询每个专业的男教师的人数及所占比例,请填写完整该查证语句.
SELECTzyAS专业,;
【SUM(IIF(js.xb='男',1,0))/SUM(IIF(xb='男',1,0))】AS男教师人数,;
【SUM(IIF(js.xb='男',1,0))/COUNT(*)】AS男教师所占比例,;
FROMjs;
GROUPB1
38、在SELECT-SQL命令中,UNION子句的功能是把一条SELECT语句的查询结果同另一条
SELECT语句的查询结果组合起来.如果某SELECT-SQL命令中使用了UNION子句将两个SELECT语句联合起来,且需要对最终查询结果排序,则需要使用【1】个ORDERBY子句.
39、数据库JXSJ中有xs(学生)表和cJ(成绩)表.学生表XH(学号)、XM(姓名)等字段;成绩表中有XH(学号)、KCDM(课程代码)和cJ(成绩,数值型)等字段,两表通过XH段创建的索引已建立了"一对多"关系.下列SELECT-SQL命令可用于查询各门考试成绩均在75分以上的学生总成绩,要求输出学号、姓名和总成绩,且按总成绩降序输出.
SELECTXs.xhAS学号,Xs.xmAS姓名,SUM(Cj.cj)AS总成绩;
FROMjxsj!
xsINNERJOINjxsj!
cj;
ONXs.xh=cj.xh;
GROUPBYXs.xh;
HAVING【MIN(cj)】>=75;
ORDERBY【总成绩DESC/3DESC/sum(cj)DESC】
40、完善下面的命令,实现从js表中删除所有csrq在1945年1月1日以前的记录.
DELETEFROMjsWHERE【Csrq<{^1945/1/1}或Csrq<={^1945/1/1}】.
41、已知教师表(JS.DBF)中含有一条姓名(XM)为"王一平"的记录,执行下列程序段后,输出结果为【王一平】.
SELEJS
LOCATFORXM="王一平"
XM=3
?
XM
42、某城市机动车驾驶员登记表(JDCJS)中含有驾驶证号(jzh)等字段.但由于录入人员的差错,包含了一些重复的记录(jzh字段的值有重复),影响了统计结果.完善下列程序,使其可以去掉重复数据生成一个新的机动车驾驶员登记表(JDCJS1).
【程序清单】
SELECT【DIST/distinct】*FROMJ