1、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) 完善下列语句以查询该图书
2、资料室各出版单位出版图书的馆藏总册数、总金额、平均单价: SELECT 出版单位,SUM(馆藏册数) AS 馆藏总册数, ; SUM(馆藏册数*单价) AS 总金额,【 AVG( 单价) 】AS 平均单价 FROM 图书馆里!TS GROUP BY 出版单位 完善下列语句以查询借阅次数最多的前10名读者的借书证号、姓名、单位和借阅次数: SELECT【 TOP 10 】JY.借书证号,DZ.姓名,DZ.单位,COUNT(*) AS 借阅次数, ; FROM 图书馆里!DZ INNER JOIN 图书管理!JY; ON DZ.借书证号= JY.借书证号; GROUP BY 1 ; ORDER B
3、Y 【 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*(【 hsr
4、q-jyrq-60 】) AS 罚款金额; FROM sjk!jy ; WHERE jy.lx=J AND hsrq-jyrq60; 【 UNION 】 ; SELECT 学生 AS 类型, COUNT(*) AS 罚款人次; SUM (0.05*(hsrq-jyrq-30) AS 罚款金额; FROM sjk!jy ; WHERE jy.lx=X AND hsrq-jyrq30; 3、在SELECT-SQL语句中,若要使查询结果中无重复记录,则可使用【 distinct 】 关键字;若要组合两个SQLSELECT语句的结果(结构相同),则应使用【 union 】子句.(请写出完整的关键字)4
5、、已知学生( XS )表中含学号( xh )、性别( xb )、专业( zy )字段.下列SQL命令用来查询每个专业的男、女生人数. SELECT zy, SUM(IIF(xb=男,1, 【 0 】) AS 男生人数,;SUM(IIF(xb=女,1, 【 0 】) AS 女生人数;FROM xs;GROUP BY 15、SQL插入记录的命令是INSERT,删除记录的命令是【 delete/dele 】,修改记录的命令是【 update/upda 】.6、数据库JXSJ中有,XS(学生)表和CJ(成绩)表.学生表中有XH(学号)、XM(姓名)等字段;成绩表中有XH(学号)、KCDM(课程代码)和
6、CJ(成绩,数值型)等字段,两表通过XH字段创建了一对多的关系.下列SELECT.SQL命令用于查询各门考试成绩均在60分以上的学生成绩情况,要求输出学号、姓名和总成绩,且只输出总成绩前5名. SELECT TOP 5 Xs.xh AS学号,Xs.xm AS姓名,SUM(Cj.cj)AS总成绩; FROM jxsj!xs INNER JOIN jxsj!cj; ON Xs.xh=cj.xh; GROUP BY Xs.xh; 【 Having 】 MIN(Cj.cj)=60; ORDER BY 3 DESC7、在VFP中创建多表查询时,表之间的四种联接类型分别为内部联接、左联接、右联接和【 完全
7、联接 】8、已知某数据库表KCYZ.DBF含有5个字段,若其中有一个名为bxk的逻辑型字段,则可用下列SQL命令查询bxk字段值为.T.的所有记录,且要求输出所有字段,输出结果保存在表TEMP.DBF中. SELECT【 * 】FROM kcyz; WHERE bxk=.T.: 【 into 】Table temp9、设有一职工档案表(zgda.dbf),含有姓名(xm),部门(bm)和姓名(xb)等字段.使用下列SELECT-SQL命令可以将查询结果保存在文本文件temp.txt中:SELECT xm,bm FROM zgda ORDERBY bm 【 to file 】temp10、某图书
8、管理系统中JY(借阅)表是已还书情况的记录表,其中含有DZH(图书证号,字符型)、JYRQ(借阅日期,日期型)和HSRQ(还书日期,日期型)等字段.下列SELECT-SQL命令用于查询每个图书证号借书本数、过期本数、过期罚款数.(注:过期是指借阅超过60天,对每本书借阅超过60天者,超过部分按每天0.05元计算罚款.) SELECT Jy.dzh as图书证号,COUNT(*) as 借书本数,; 【 Sum(iif( hsrq- jyrq60,1,0) 】 AS 过期本数,; SUM(IIF(Jy.hsrq-Jy.jyrq60,(Jy.hsrq-Jy.jyrq-60)*0.05,0.00)A
9、S罚款数; FROM JY; GROUP BY Jy.dzh11、某数据库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分为合格),要求查询系代号、系人数、系合格人数. SELECT Xs.xdh AS
10、系代号,COUNT(*)AS系人数,; SUM(【 IIF( cj=60,1,0)/ IIF( cj =10 13、在某教学管理数据库中有一个学生表( XS.DBF ),其表结构及其所含有的记录数据如图所示.表结构:XS.DBF 字段名 含义 字段类型及宽度 XH 学号 C(8) XM 姓名 C(8) XB 性别 C(2) CSRQ 出生日期D表数据XHXMXBCSRQ010201 王玲女06/02/82 010203 李勇男06/09/82 010202 张三男02/08/82 010301 刘芳女06/09/82 010402 王勇敢男02/28/82 010302 李圆圆女12/12/8
11、2 010401 张勇男10/09/82对于下列 SELECT-SQL 语句,其查询结果含有 【 3 】 条记录. SELECT * FROM xs WHERE SUBSTR(xh,5,2)=01若学生表已在当前工作区打开,运行下列程序后再 VFP 主窗口显示的结果为 【 3 】 .【程序清单】 SET TALK OFFn=0CLEARGO TOPDO WHILE!EOF() IF AT(勇,xm)0 n=n+1 ENDIF SKIPENDDO?n14、若js.dbf表中含有若干字段且已在当前工作区中打开,则仅浏览表中gh、xm 、xb这三个字段的数据,可用SELECT gh,xm,xb FR
12、OM js命令,或者用BROWSE命令: BROWSE【 field xh,xm,xb/ FIEL xh,xm,xb 】15、SELECT-SQL查询语句中,表示两张表内联的关键字是【 INNER JOIN 】16、本地视图的【 基/源 】表随视图的打开而自动地打开,但是不随视图的关闭而关闭.17、在SELECT-SQL命令中,UNION子句的功能是把一条SELECT语句的查询结果同另一条SELECT语句的查询结果组合起来.用UNION子句组合的查询必须满足:列数相同, 对应的列必须具有相同的【 类型 】和【 宽度 】18、在教学管理数据库SJK中有2个表:KC.DBF(课程表)和CJ.DBF
13、(成绩表),表结构如图所示: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): SELECT Kc.xh,SUM(【 iif( cj=60, xf,0) 】)AS总学分; FROM sjk!Kc INNER JOIN sjk!Cj: WHERE Cj.Kcdh=Kc.Kcdh; GROUP
14、 BY Cj.Xh; 【 having 】 总学分10019、教学管理数据库中含有课程表( KC )及成绩表( CJ ).课程表中含有以下字段:课程代号( kcdh ),课程名 (kcm) ,学分 (xf) ;成绩表中有以下字段:学号( xh ),课程代号 (kcdh) ,成绩( cj ).成绩表记录了全体学生所学各门课程的成绩现根据上述两表查询总学分已超过120的所有学生情况(要求输出:学号,平均分,总学分,并按学号的升序排列),可使用下述命令.(注:成绩小于 60 分的学分设置为 0 )SELECT xh AS 学号,AVG(cj.cj) AS 平均分,【 sum(IIF(cj.cj=60
15、,kc.xf,0)】AS总学分;FROM kc INNER JOIN cj ON kc.kcdh=cj.kcdh;GROUP BY xh;HAVING 总学分=120;ORDER BY xh20、某图书管理数据库有读者和借阅2个表.读者表中含有:借书证号(字符型)、单位(字符型)、姓名(字符型)等字段,借阅表中含有:借书证号(字符型),书目编号(字符型),借书日期(日期型)等字段.执行下列SELECT-SQL命令,可以检索出当前至少借阅了5本图书的读者姓名和所在单位. SELECT 姓名,单位 FROM 读者 WHERE 借书证号 IN; (SELECT 借书证号 FROM 借阅 GROUP
16、BY 借书证号 HAVING 【Count( 书目编号)/ Count(*)】 =5)21、利用查询设计器设计查询,可以实现多项功能,查询设计器最终实质上是生成一条【 查询/SELECT/SELE 】语句.22、视图可以在数据库设计器窗口中打开,也可以用USE命令打开,但在使用USE命令之前,必须打开包含该视图的【 数据库 】23、已知成绩( CJ )表中含学号( xh )、课程代号( kcdh )和成绩( cj )字段,成绩表中存有记录数据如图所示.xh kcdh cj020101 01 80020101 02 56020403 01 33020302 03 67020304 02 89运行
17、下列程序字段以后,变量 m 、 n 的值分别为【 .F. 】和【 2 】 . 【程序清单】SELECT * FROM cj;WHERE cj.cj=90,1,0) AS 优秀人数,SUM(IIF(cj.cj60,1,0) AS 不及格人数; FROM sjk!kc INNER JOIN sjk!cj; ON Kc.kcdh=Cj.kcdh; GROUP BY 【 kc.kcdh/ kcdh/1 】26、在使用Select-sql进行查询时,若要保证在查询结果中没有重复记录,可以在查询命令中使用【 DISTINCT 】关键字 (请写出完整的关键字)27、SQL SELECT语句中的【 WHERE
18、 】用于实现关系的选择操作.28、如果希望查询去向到一张临时表 temp01,则其对应的SQL的命令为 into 【 cursor/ curs 】 temp0129、用SELECT-SQL命令对数据进行查询时,SELECT命令中FROM子句用来指定数据源表,【 where 】子句用来筛选源表记录, 【 having 】子句用来筛选结果记录.30、SELECT-SQL查询语句中,分组语句的关键字是【 group by 】31、如果希望查询的顺序依某字段降序排列,则其关键字为【 desc 】32、某数据库SJK中包含XS(学生)表,其基本结构如图所示: XS.DBF 字段名 含义 字段类型及宽度
19、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 补贴总额; FROM sjk!xs; GROUP BY l: ORDER BY 3 【 DESC 】33、在教学管理数据
20、库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 【 top 3 】 XS.xh,XS.xm,SUM(CJ.CJ) AS 总成绩,COUNT(*) AS 选课门数; FROM jxsj!x
21、s INNER JOIN jxsj!cj; ON Xs.xh=cj.xh; GROUP BY XS.xh; 【 order by 3 desc/ order by 总成绩 desc/ order by sum( cj) desc 】 (2)完善下列SELECT-SQL命令,其功能是基于XS表和CJ表查询有两门或两门以上课程不合格的学生情况.要求输出为XH、XM、选课门数和不及格门数,查询结果按不及格门数排序且将查询结果输出到打印机打印.(注:CJ小于60为不及格)SELECT XS.xh,XS.xm,COUNT(*) AS 选课门数, 【 sum(iif(cj 30 and sjcj24,1,
22、0) 】/COUNT(*) AS 通过率;FROM ksci;【 WHERE 】 SUBSTR(Kscj.zkzh,4,2)=52;【Group BY 学校代号/ Group BY 1/ Group BY left( zkzh,3)】35、SELECT-SQL查询语句中,两张表之间的连接方式共有【 4 】种36、SQL是一种高度非过程化的语言,它可以直接以【 交互 】方式使用,也可以【 程序 】方式使用.37、已知教师(js)表中含教师号(jsh#)、性别(xb)、专业(zy)字段.下列SELECTSQL语句用来查询每个专业的男教师的人数及所占比例,请填写完整该查证语句.SELECT zy A
23、S 专业, ;【 SUM(IIF( js.xb=男, 1, 0 )/ SUM(IIF( xb=男, 1, 0 ) 】 AS 男教师人数,;【 SUM(IIF( js.xb=男, 1, 0 )/ COUNT(*) 】AS 男教师所占比例,;FROM js;GROUPB 138、在 SELECT-SQL 命令中, UNION 子句的功能是把一条 SELECT 语句的查询结果同另一条 SELECT 语句的查询结果组合起来.如果某 SELECT-SQL 命令中使用了 UNION 子句将两个SELECT 语句联合起来,且需要对最终查询结果排序,则需要使用 【 1 】个 ORDER BY 子句.39、数据
24、库JXSJ中有xs(学生)表和cJ(成绩)表.学生表XH(学号)、XM(姓名)等字段;成绩表中有XH(学号)、KCDM(课程代码)和cJ(成绩,数值型)等字段,两表通过XH段创建的索引已建立了一对多关系.下列SELECT-SQL命令可用于查询各门考试成绩均在75分以上的学生总成绩,要求输出学号、姓名和总成绩,且按总成绩降序输出.SELECT Xs.xh AS 学号,Xs.xm AS 姓名,SUM(Cj.cj) AS 总成绩;FROM jxsj!xs INNER JOIN jxsj!cj;ON Xs.xh=cj.xh;GROUP BY Xs.xh;HAVING 【 MIN(cj ) 】=75;O
25、RDER BY 【 总成绩 DESC/3 DESC/ sum(cj ) DESC 】40、完善下面的命令,实现从js表中删除所有csrq在1945年1月1日以前的记录.DELETE FROM js WHERE【 Csrq1945/ 1/ 1或 Csrq=1945/ 1/ 1 】.41、已知教师表(JS.DBF)中含有一条姓名(XM)为王一平的记录,执行下列程序段后,输出结果为【 王一平 】.SELE JSLOCAT FOR XM=王一平XM=3?XM42、某城市机动车驾驶员登记表(JDCJS)中含有驾驶证号(jzh)等字段.但由于录入人员的差错,包含了一些重复的记录(jzh字段的值有重复),影响了统计结果.完善下列程序,使其可以去掉重复数据生成一个新的机动车驾驶员登记表(JDCJS1).【程序清单】SELECT【 DIST/distinct 】* FROM J
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1