第1章 数据库基础知识
1.1 判断题
1.关系数据库中关系运算的操作对象为二维表。
【答案】√
2.Visual FoxPro是一个层次型的数据库管理系统。
【答案】×
【分析】Visual FoxPro应该是一个关系型数据库管理系统。
3.关系型数据库对关系有3种基本操作:选择、投影及连接。
【答案】√
4.一个关系表可以有多个主关键字。
【答案】×
【分析】关系表可以有多个关键字,但某一时刻只有一个关键字能够作为主关键字。
5.单独一个变量或一个常数也是一个表达式。
【答案】√
【分析】常数、变量都是表达式的特殊形式。
6.数组不同于一般的内存变量,必须先定义后使用。
【答案】√
【分析】对于类似A(9)这样的数组变量,如果不先定义,系统是分不清楚这是一个函数名还是一个数组变量的,必须先通过DIMENSION或DECLARE命令定义A数组。
7.给数组变量赋值的时候,如果没有指明下标,则表示给数组的第一个元素赋值。
【答案】×
【分析】在给数组变量赋值时,如果未指明下标,则应该是对该数组中所有元素同时赋予同一个值。例如,假设已定义DIMENSION A(10),如果再赋值A=5,则表示A数组的所有元素A(1),A(2),…,A(10)均等于5。
8.在表文件打开的情况下,同名的字段变量优先于内存变量。
【答案】√
【分析】在表文件打开的情况下,同名的字段变量优先于内存变量,这是正确的。如果要表明是内存变量,则可以在变量名前面另加“M.”或“M->”。
9.两个日期数据相减,其结果是数值型数据。
【答案】√
【分析】两个日期型数据可以相减,结果是一个数值,表示两个日期之间相差的天数。
10.可以使用STORE命令同时给多个内存变量赋值。
【答案】√
【分析】可以使用STORE命令同时给多个内存变量赋值。例如STORE 5 TO A,B,C,表示将数值5同时赋给A,B,C三个变量,这也是STORE与“=”语句的不同之处,“=”语句不能同时给多个内存变量赋值。
11.在Visual FoxPro中,如果对内存变量没有赋初值,则它的值自动为0。
【答案】×
【分析】在Visual FoxPro中,如果对内存变量没有赋初值,则表示该变量没有定义,系统是找不到该变量的。例如,如果没有对变量Z赋值,执行A=Z+1,则系统找不到变量Z。
12.内存变量的数据类型一旦确定,是不能改变的。
【答案】×
【分析】内存变量的数据类型可以在使用时改变。例如,初始时可以为变量A赋值为数值型,如A=5;以后还可以将变量A置成日期型,如A=DATE( )。
13."3.14159"表示一个字符型常量。
【答案】√
【分析】注意,3.14159是一个数值型常量,但若用字符串定界符将数字括起来,如"3.14159"、'3.14159'或[3.14159]等,则是字符型常量。
14.如果一个表达式中有多种运算符,则数值运算符一定最先运算。
【答案】√
【分析】各种运算符的优先级别由高到低分别为:括号、数值运算符、字符运算符、日期运算符、关系运算符、逻辑运算符。
15.函数的自变量类型和函数值的类型必须一致。
【答案】×
【分析】函数的自变量类型与函数值的类型不一定是一致的。例如,取字符串长度函数的自变量是字符型,而该函数的结果是数值型,LEN("ABCD")的结果是4;再如,取年函数的自变量是日期型,而该函数的结果是数值型,YEAR(DATE( ))的结果可能为2008。
16.函数YEAR(DATE( ))得到系统的年份,其数据类型为日期型。
【答案】×
【分析】函数YEAR(DATE( ))得到系统的年份,其数据类型为数值型。
17.SET EXACT ON只对字符串运算起作用。
【答案】√
【分析】是的,SET EXACT ON只对字符串运算起作用。数值型数据一定是精确比较的,数值3.14与3.141无论SET EXACT ON还是OFF都是不相等的。
18.两个日期数据可以相减,但不能相加。
【答案】√
【分析】两个日期型数据可以相减,结果是一个数值,表示两个日期之间相差的天数;日期型数据加上一个整数,其结果为一个新的日期;日期型数据减去一个整数,其结果为一个新的日期。
19.在Visual FoxPro中,已知Y=5,执行X=Y=5后,X的值为5。
【答案】×
【分析】在X=Y=5表达式中,第一个“=”是赋值语句,表示将右边的表达式的值赋给左边的变量,而右边是用比较符“=”连接的关系表达式,所以X的值等于逻辑.T.。
20.VAL函数是将数值型数据转换成字符型数据的函数。
【答案】×
【分析】VAL函数是将字符型数据转换成数值型数据的函数。例如,VAL("123")是将字符串"123"转换成数值123。
1.2 选择题
1.Visual FoxPro支持的数据模型是( )。
A.层次数据模型 B.关系数据模型 C.网状数据模型 D.树状数据模型
【答案】B
2.数据库(DB)、数据库系统(DBS)和数据库管理系统(DBMS)之间的关系是( )。
A.DBMS包括DB和DBS B.DBS包括DB和DBMS C.DB包括DBS和DBMS D.DB,DBS和DBMS是平等关系
【答案】B
【分析】数据库系统通常由计算机硬件及相关软件、数据库、数据库管理系统及用户4部分组成。因此,数据库系统中包括数据库和数据库管理系统。
3.数据库系统的核心是( )。
A.数据库 B.操作系统 C.数据库管理系统 D.文件
【答案】C
【分析】数据库管理系统是在操作系统支持下工作的操纵和管理数据的系统软件,是整个数据库系统的核心。
4.实体集1中的一个元素,在实体集2中有多个元素与它对应;而实体集2中的一个元素,在实体集1中,最多只有一个元素与它对应。这两个实体之间的关系是( )。
A.一对一 B.多对多 C.一对多 D.都不是
【答案】C
5.Visual FoxPro关系数据库管理系统能实现的3种基本关系运算是( )。
A.索引、排序、查找 B.建库、录入、排序 C.选择、投影、连接 D.显示、统计、复制
【答案】C
6.将关系看成一张二维表,则下列叙述中错误的是( )。
A.同一列的数据类型相同 B.表中不允许出现相同列 C.表中行的次序可以交换 D.表中列的次序不可以交换
【答案】D
【分析】对关系型数据库来说,关系(表)中记录(行)和字段(列)的顺序可以任意排列,不影响关系表中所表示的信息含义。
7.关键字是关系模型中的重要概念。当一张二维表(A表)的主关键字被包含到另一张二维表(B表)中时,它就称为B表的( )。
A.主关键字 B.候选关键字 C.外部关键字 D.超关键字
【答案】C
【分析】如果一个属性在本表中不是主关键字,而在另一个表中是主关键字,则该属性称为外部关键字。例如,在“销售”表中的“职工号”是“职工”表的主关键字,但它并不是“销售”表的主关键字。这里,称“职工号”属性为“销售”表的外部关键字。
8.在Visual FoxPro中,以下关于内存变量的叙述有错误的是( )。
A.内存变量的类型取决于其值的类型
B.内存变量的类型可以改变
C.数组是按照一定顺序排列的一组内存变量
D.一个数组中各个元素的数据类型必须相同
【答案】D
【分析】在同一数组中的各个元素的数据类型可以不相同。它的类型由最近一次的赋值语句决定。例如,在A数组中,A(1)=5是数值型,A(2)=DATE( )是日期型,而A(3)=.T.是逻辑型,等等。
9.Visual FoxPro中的变量有两类,它们分别是( )。
A.内存变量和字段变量 B.局部变量和全局变量 C.逻辑型变量和货币型变量 D.备注型变量和通用型变量
【答案】A
【分析】Visual FoxPro的变量可分为字段变量和内存变量两种。内存变量又分为一般内存变量、系统内存变量和数组变量。
10.Visual FoxPro内存变量的数据类型不包括( )。
A.数值型 B.货币型 C.备注型 D.逻辑型
【答案】C
【分析】Visual FoxPro内存变量的数据类型不包括备注型,备注型变量是字段变量的一种。
11.下面关于Visual FoxPro数组的叙述中,错误的是( )。
A.DIMENSION和DECLARE都能定义数组,它们具有相同的功能
B.Visual FoxPro能支持二维以上的数组
C.一个数组中各个数组元素不必是同一种数据类型
D.新定义数组的各个数组元素初值为.F.
【答案】B
【分析】Visual FoxPro 只支持一维和二维数组,不能支持二维以上的数组。例如,DECLARE A(2,3,4),系统会出错,提示无效的下标引用。
12.使用命令DECLARE array(2,3)定义的数组,包含的数组元素的个数为( )。
A.2个 B.3个 C.5个 D.6个
【答案】D
【分析】若数组元素有两个下标,则称为双下标变量,其中第1个叫行下标,第2个叫列下标,由双下标变量组成的数组称为二维数组。二维数组B(2,3)是一个2行3列的数组,6个数组元素分别为:B(1,1),B(1,2),B(1,3),B(2,1),B(2,2),B(2,3),它们都是双下标变量。括号内的数值,既说明了数组元素的个数,又表示该数组元素下标的最大值。
13.下列( )为非法的变量名或字段名。
A.CUST-ID B.姓名 C.COLOR_ID D.成绩
【答案】A
【分析】变量的命名规则是:变量名由字母、汉字、数字和下划线组成,且必须以字母、汉字或下划线开头;变量名长度为1~128个字符,每个汉字2个字符;变量名命名应有意义,且不能与Visual FoxPro的关键字相同。本题目中“CUST-ID”含减号,不符合变量名的命名规则。
14.下列表达式中,结果为“数据库应用”的表达式是( )。
A."数据库","应用" B."数据库"&"应用" C."数据库"+"应用" D."数据库"$"应用"
【答案】C
【分析】“,”是数据项的分隔符,“&”是宏函数,“$”是字符串包含运算符,而“+”是字符串连接运算符,可以将两个字符串连接起来。
15.如果内存变量与字段变量均有变量名姓名,则引用内存变量的正确方法是( )。
A.A.姓名 B.M.姓名 C.姓名 D.不能引用
【答案】B
【分析】当内存变量与字段变量同名时,字段变量优先;如果要特别指定是内存变量,则在变量名的前面加上“M.”或“M ->”,所以B是正确的。
16.在下面4组函数运算中,结果相同的是( )。
A.LEFT ("Visual FoxPro",6)与SUBSTR ("Visual FoxPro",1,6)
B.YEAR(DATE( ))与SUBSTR (DTOC(DATE),7,2)
C.VARTYPE ("36-5*4")与VARTYPE(36-5*4)
D.假定A="This ",B="is a string.",A-B与A+B
【答案】A
17.函数IIF (LEN(RIGHT("RIGHT",7))>6,5,-5)返回的值是( )。
A..T.B..F.C.5 D.-5
【答案】D
【分析】因为LEN(RIGHT ("RIGHT",7))的返回值为5,小于6,所以IIF函数的条件部分的取值是逻辑.F.,结果为-5。
18.下列函数中函数值为字符型的是( )。
A.DATE( ) B.TIME ( ) C.YEAR ( ) D.MONTH ( )
【答案】B
【分析】DATE( )的值是日期型,YEAR ( )与MONTH ( )的值是数值型,而TIME ( )返回的是字符型。例如,LEFT(TIME( ),2)返回的是系统当前的小时,但数据类型是字符型。
19.设有变量PI=3.1415926,执行命令 ? ROUND (PI,3)的显示结果是( )。
A.3.14 B.3.142 C.3 D.3.141
【答案】B
【分析】ROUND为四舍五入函数,其中的3为保留小数的位数。
20.下列选项中得不到字符型数据的是( )。
A.DTOC (DATE ( )) B.TIME ( ) C.STR (123.567) D.AT ("1",STR (123))
【答案】D
【分析】DTOC函数将日期型数据转换为字符型数据,TIME( )函数返回的是字符型数据,STR将数值型数据转换成字符型数据,而AT函数测试一个字符串在另一个字符串中所处的位置,返回的是数值型数据。
21.函数 STR (2781.5785,7,2)返回的结果是( )。
A.2781 B.2781.58 C.2781.579 D.81.5785
【答案】B
【分析】STR函数的功能是将数值型数据转换成字符型数据,STR(2781.5785,7,2)中的7表示转换的总宽度,包括小数点;2表示保留的小数位,因为位数小于实际数值的小数位数,所以四舍五入处理。
22.表达式 LEN(SPACE(5)-SPACE (2))的值是( )。
A.2 B.3 C.5 D.7
【答案】D
【分析】LEN函数测试的是字符串的长度。需要注意的是,空格串也是字符串,而“-”在这里不是数值运算符的减号,而是字符串的连接运算符,表示将两个字符串连接时,把第一个字符串的尾部空格移到后面字符串的尾部,但连接起来仍然是7个空格字符串。
23.在下列表达式中,其值为数值的是( )。
A.AT ("人民","中华人民共和国") B.CTOD ("01/01/96") C.BOF ( ) D.SUBSTR (DTOC(DATE( )),7)
【答案】A
24.将日期型数据转换成字符型数据,使用的函数是( )。
A.DTOC B.STR C.CTOD D.VAL
【答案】A
【分析】STR是将数值型数据转换成字符型数据,CTOD函数是将字符型数据转换为日期型数据,VAL函数是将字符型数据转换成数值型数据,而DTOC函数是将日期型数据转换为字符型数据。
25.在Visual FoxPro中执行了如下命令序列:
FH="*" X="3.2&FH.3" ?X
最后一条命令的显示结果是( )。
A.3.2&FH.3 B.3.2*3 C.9.6 D.3.2*.3
【答案】B
【分析】在上面的命令序列中,&FH相当于将FH的值“*”的双引号替换掉,FH后面的“.”表示&函数到FH为止,后面的3直接连上,使“3.2*3”构成一个字符串,所以本题目的结果是一个字符型数据。
26.设S="(3+2.5)",表达式4*&S.+5的输出结果是( )。
A.9.00 B.20.00 C.27.00 D.出错信息
【答案】C
【分析】&S相当于将S的值"(3+2.5)"的双引号替换掉,得到数值5.5,S后面的“.”表示&宏函数到S为止,后面的+5直接连上,得到表达式4*5.5+5,即结果为27。
27.下列叙述中正确的是( )。
A.x#y表示x与y全等 B.内存变量名与字段名不能相同 C.2x为非法的内存变量名 D.数组中的元素数据类型必须相同
【答案】C
【分析】2x为非法的内存变量名,因为内存变量名必须以字母、汉字或下划线开头。其他叙述均不正确:x#y表示x与y不等,内存变量名与字段名可以相同,而数组中的元素数据类型可以是不相同的。
28.在Visual FoxPro中,下列数据属于常量的是( )。
A..N.B.F C.07/08/99 D.都对
【答案】A
【分析】F表示变量(如果带两圆点,则是逻辑常量.F.);07/08/99是数值表达式,“/”是数值运算符除号;而.N.是逻辑常量,表示逻辑假,也可以表示为.F.(逻辑真可表示为.T.或.Y.)。
29.以下哪种数据类型不能进行“+”和“-”的运算( )。
A.数值型 B.日期型 C.字符型 D.逻辑型
【答案】D
【分析】数值型、日期型和字符型都可以进行“+”和“-”的运算,但其含义和要求不同;而逻辑型是不能进行“+”和“-”的运算的。
30.在Visual FoxPro中,关于数值运算、关系运算、逻辑运算和函数的运算优先级,正确的是( )。
A.函数>数值运算>逻辑运算>关系运算 B.函数>逻辑运算>数值运算>关系运算 C.数值运算>函数>逻辑运算>关系运算 D.函数>数值运算>关系运算>逻辑运算
【答案】D
【分析】常量、变量和函数都是特殊的表达式,其优先级高于有运算符连接的表达式。
31.设初值Y=100,执行X=Y=200命令后变量X的值是( )。
A.200 B.100 C..F.D..T.
【答案】C
【分析】在X=Y=200表达式中,第一个“=”是赋值语句,表示将右边的表达式的值赋给左边的变量,而右边是用比较符“=”连接的关系表达式,所以X的值等于逻辑.F.。
32.AT函数和$运算符相似,它们的返回值的类型分别为( )。
A.数值型和数值型 B.数值型和逻辑型 C.逻辑型和数值型 D.逻辑型和逻辑型
【答案】B
33.在下列表达式中,运算结果为数值的是( )。
A.[66]+[8] B.LEN(SPACE(8))+1 C.CTOD("07/08/08")+31 D.300+200=500
【答案】B
【分析】[66]+[8]是两字符串连接,得到的仍然是字符串;CTOD("07/08/08")+31是将一个日期加一个常数,得到一个新的日期;300+200=500是一个关系表达式,结果是逻辑.T.;而LEN(SPACE(8))+1是取空字符串的长度再加1,得到的是一个数值9。
34.在系统默认情况下,下面严格日期书写格式正确的一项是( )。
A.{2002-06-27} B.{06/27/02} C.{^2008-08-08} D.{^08-08-08}
【答案】C
【分析】系统在默认情况下只接受严格日期常量,其格式为{^yyyy-mm-dd}。如果要接受传统日期格式表示的常量,需要通过命令SET STRICTDATE TO [0/1/2]来改变设置。例如,命令SET STRICTDATE TO 0表示不进行严格的日期格式检查,此时{06/27/02}和{^08-08-08}都可以作为日期常量。而SET STRICTDATE TO 1命令表示进行严格的日期格式检查,它是系统默认的设置。
35.下面表达式中运算结果是逻辑真的是( )。
A.EMPTY(.NULL.) B.'AC'$'ACD' C.AT('a','123abc') D.'AC'='ACD'
【答案】B
【分析】EMPTY(.NULL.)函数是测试是否为空函数,返回逻辑值.F.;AT是位置测试函数,返回的是数值;'AC'='ACD'是关系表达式,返回的是逻辑值.F.;而'AC'$'ACD'中的$是测试是否包含函数,返回逻辑值.T.。
1.3 填空题
1.数据管理发展的阶段分别是____、____和____。
【答案】人工管理;文件系统;数据库系统
2.数据库管理系统常用的数据模型有____、____和____。
【答案】层次模型;网状模型;关系模型
3.关系数据库的3种关系运算是____、____和____。
【答案】选择;投影;连接
4.数据的完整性规则一般分为____、____和____。
【答案】实体完整性;参照完整性;用户自定义完整性
5.在Visual FoxPro的命令窗口,退出Visual FoxPro系统所执行的命令是____。
【答案】QUIT
6.定义一个数组后,该数组中元素的初值均被赋予____。
【答案】逻辑值.F.
7.显示职工表中“职工号”字段包含字符串"1998"的全部记录,其命令为____。
【答案】LIST FOR LEFT(职工号,4)="1998"或LIST FOR SUBSTR(职工号,1,4)="1998"
8.若函数DATE( )的值为“07/08/08”,从这个日期中变换出字符串"2008"的表达式是____。
【答案】"20"+RIGHT(DTOC(DATE( )),2)或STR(YEAR(DATE( )),4)
9.在当前职工表中,有逻辑字段“婚否”和日期型字段“出生日期”,现显示所有出生日期大于1976年12月31日的未婚职工的记录,其命令为____。
【答案】LIST FOR出生日期<{^1976-12-31} AND !婚否
10.关系数据库对关系有3种基本操作,在Visual FoxPro命令格式中,FIELDS <字段名表>是对关系的____操作,FOR <条件>是对关系的____操作。
【答案】投影操作;选择操作
11.语句?AT("人民","中国人民银行")的执行结果是____;语句?"人民"$"中国人民银行" 的执行结果是____;语句?SUBSTR("中国人民银行",5,4)的执行结果是____;语句?STUFF ("中国人民银行",5,4,"工商")的执行结果是____。
【答案】5;.T.;人民;中国工商银行
12.A=5,B=8,则语句?(B-A)*RAND( )+A的结果是介于____到____之间的实数。
【答案】5;8
13.语句?DAY(CTOD("07/29/08")+10)的执行结果是____;语句DATE( )-CTOD("07/29/08")的执行结果的类型是____;语句{^2008-08-08}+100的执行结果的类型是____。
【答案】8;数值型;日期型
14.写出下面数学表达式的Visual FoxPro表达式:
(1)B2-4AC____; (2)3sin30°+ln100____;
(3)|10ex-y/(a-b)|____; (4)5X+6≤Y≤1000____。
【答案】(1)B*B-4*A*C; (2)3*SIN(30*PI( )/180)+LOG(100);
(3)ABS(10*EXP(X)-Y/(A-B)); (4)5*X+6<=Y AND Y<=1000
15.当用DIMENSION A(10)定义A数组,再执行A=5后,则表示____。
【答案】A数组的所有元素值均为5