单选题 (31)到(35)题使用如下数据表。
部门(部门号C(2)、部门名称C(10) )
职工(部门号C(2)、职工号C(4)、姓名C(8)、基本工资N(7,2) )

单选题 检索最少有5名职工的每个部门的职工基本工资的总额,正确的语句是( )。
A. SELECT部门号,COUNT(*),SUM(基本工资)FROM职工;
HAVING COUNT(*)>=5
B. SELECT部门号,COUNT(*),SUM(基本工资)FROM职工;
GROUP BY基本工资HAVING COUNT(*)>=5
C. SELECT部门号,COUNT(*),SUM(基本工资)FROM职工;
GROUP BY部门号HAVING COUNT(*)>=5
D. SELECT部门号,COUNT(*),SUM(基本工资)FROM职工;
GROUP BY部门号WHERE COUNT(*)>=5
【正确答案】 C
【答案解析】[解析] 在分组与计算查询语句中,使用HAVING子句可以对分组进一步加以控制。用这个子句定义这些组所必须满足的条件,以便将其包含在结果中,HAVING子句必须与GROUP BY短语同时使用。
本题中先由GROUP BY子句按“部门号”对记录行进行分组:再执行COUNT()函数统计每组中有多少个记录,执行SUM()函数计算每个组的基本工资总和:最后执行HAVING子句,只有记录总数大于等于5的组才输出结果,即部门职工在5名(含)以上的。注意:此时输出的组记录是计算后的记录,即每组只包含一条记录,输出信息包括该部门的部门号、总人数和职工工资总和。
单选题 向职工表中插入一条记录的正确语句是( )。
A. APPEND BLANK职工VALUES("33","3305","李运来","2700.00")
B. APPEND INTO职工VALUES("33","3305","李运来",2700.00)
C. INSERT INTO职工VALUES("33","3305","李运来","2700.00")
D. INSER INTO职工VALUES("33","3305","李运来",2700.00)
【正确答案】 D
【答案解析】[解析] Visual FoxPro支持两种SQL插入格式,第一种为标准格式,第二种是Visual FoxPro的特殊格式。
第一种格式为:
INSERT INTO<表名>[(字段名1[,字段名2,...])];
VALUES(表达式1[,表达式2,...])
其中INSERT INTO<表名>说明向指定的表中插入记录。当插入的不是完整的记录时,可以用字段名1,字段名2,...指定字段:VALUE(表达式1[,表达式2,...])给出具体的记录值。
插入记录时,要注意插入的数据的类型与其字段类型要相同,本题中成绩为数值型数据,不能加字符串定界符(" "),所以选项C)错误:选项A)和选项B)的语法错误。
单选题 为“部门”表增加一个“人数”字段,类型为整型,正确的语句是( )。
A. ALTER TABLE部门ALTER人数I
B. ALTER TABLE部门ALTER FIELDS人数I
C. ALTER TABLE部门ADD人数I
D. ALTER TABLE部门ADD FIELDS人数I
【正确答案】 C
【答案解析】[解析] 利用SQL命令可以对基本表的结构进行修改,可以利用下列命令为表新增字段:
ALTER TABLE<表名>
ADD[[COLUMN][<字段名1><字段类型>[(<长度>[,<小数位数>1) ]
在SQL语句中,给表增加字段的短语是ADD COLUMN,而不是ADD FIELDS,其中COLUMN短语可以省略,另外,ALTER是用来修改已有的字段,不能新增一个字段。
单选题 检索每个部门的职工工资的总和,要求显示“部门名称”和“基本工资”,正确的语句是( )。
A. SELECT部门名称,SUM(基本工资)FROM部门,职工;
WHERE职工,部门号=部门.部门号;
ORDER BY部门号
B. SELECT部门名称,SUM(基本工资)FROM部门,职工;
WHERE职工,部门号=部门.部门号;
GROUP BY部门号
C. SELECT部门名称,SUM(基本工资)FROM部门,职工;
WHERE职工.部门号=部门.部门号;
ORDRE BY职工.部门号
D. SELECT部门名称,SUM(基本工资)FROM部门,职工;
WHERE职工.部门号=部门.部门号;
GROUP BY职工.部门号
【正确答案】 D
【答案解析】[解析] 进行SQL简单计算查询时,还可以加上GROUP BY子句进行分组计算查询。
通常来说,一个计算函数的范围是满足WHERE子句指定条件的所有记录。当加上GROUP BY子句后,系统会将查询结果按指定列分成集合组。当一个计算函数和一个GROUP BY子句一起使用时,计算函数的范围变为每组所有的记录。
本题通过“GROUP BY职工.部门号”可以先将记录按“部门号”分组,然后再通过函数“SUM(基本工资)”对每组记录求和;另外,在指定分组条件时,因为两个表中都存在相同的字段,即“部门号”,因此要指定分组的字段来自哪个数据表,否则系统出现“部门号不唯一”的错误提示:ORDER BY是对查询结果进行排序的短语,没有分组的功能。
单选题 检索有职工的基本工资大于或等于“11”部门中任意一名职工工资的“部门号”,正确的语句是( )。
A. SELECT DISTmCT部门号FROM职工WHERE基本工资>=ANY;
(SELECT基本工资FROM职工WHERE部门号="11")
B. SELECT DISTINC部门号FROM职工WHERE基本工资>=ALL;
(SELECT基本工资FROM职工WHERE部门号="11")
C. SELECT DISTINCT部门号FROM职工WHERE基本工资>=ANY;
(SELECT MAX(基本工资)FROM职工WHERE部门号="11")
D. SELECT DISTINCT部门号FROM职工WHERE基本工资>=ALL;
(SELECT MIN(基本工资)FROM职工WHERE部门号="11")
【正确答案】 B
【答案解析】[解析] 在SQL语句中可以利用ANY、ALL等量词进行查询。基本格式为:
<表达式><比较运算符>[ANY|ALL|SOME](子查询)
其中,ANY(任意的)和SOME(一些)表示只要子查询中存在符合条件的行,结果就成立:而ALL(所有的)只有子查询中的所有行都符合条件,结果才成立。
本题中要求检索有职工的基本工资大于或等于“11”部门中任意一名职工的工资的部门号,等价于其他部门职工的基本工资有大于或等于“11”部门中所有职工的工资,因此要使用ALL短语。选项C)和D)的属于语法错误,SQL不支持此类型查询。