参考答案:
【问题1】(2分)
(a) ALTER TABLE员工ADD CONSTRAINT PK员工 PRIMARY KEY(员工编号) (其中PK_员工可以为任何有效的命名)
(b)ALTER TABLE员工ADD CONSTRAINT FK员工 FOREIGN KEY(部门) REFERENCES部门(部门编号)(其中FK员工可以为任何有效的命名)
【问题2】(13分)
(1)(c)AVG(工资)
(d)员工,部门=部门.部门编号AND职务<>’经理’
(e)部门编号,部门名称
(f) AVG(工资)>3000
(g) ORDER BY3 DESC或ORDER BY平均工资DESC
(2)(h)工资> (SELECT AVG(工资)FROM员工)(2分)
(3)(i) NOTEXISTS
(j)部门编号=所属部门
(4) (k) WHEN教育水平<=20 AND教育水平>16 THEN’本科生’
(l) ELSE’其他’
(m)员工.部门=部门.部门编号AND部门名称=’研发部’
(5)(m)NOT LIKE ’%处’
详细解析:
【问题1】
考查SQL中的数据定义语言DDL和完整性约束。根据题意,已经用CREATE语句来定义员工关系模式的基本结构,因此应该用ALTER来增加员工关系模式的实体完整性约束和参照性约束。对应语法为:
ALTER TABLE <基本表名>
ADD CONSTRAINT<完整性约束名><完整性约束>
【问题2】
考查SQL中的数据操纵语言DML
(1)本题考查一个较完整的查询语句。包括知识点有多表查询、聚集函数、分组、分组条件和排序查询结果。查询设计员工和部门关系模式,用聚集函数AVG(工资)求平均工资,若有GROUP BY子句,则聚集函数作用在每个分组上,且GROUP BY后应包含除了聚集函数之外的所有结果类。若GROUP BY子句后跟有HAVING短语,则只有满足条件的分组才会输出 ORDER BY 列名[ASC|DESC]对输出结果进行升序或降序排序,若不明确指定默认为升序排序。
(2)本题考查子查询和聚集函数。聚集函数AVG用于求平均值,而聚集函数只能出现在SELECT 和HAVING 子句中,不能在其他地方出现,因此此处需要用子查询。
(3)本题考查带有EXISTS谓词的子查询,该查询不返回任何数据,只有逻辑真和逻辑假。本题要查询没有承担任何项目的部门编号和部门名称,则可以在项目关系模式中查询到承担项目的部门编号,用NOT EXISTS关键字来获得要查询的信息。
(4)本题考查用关键字CASE•••END来根据条件进行搜索,WHEN后面跟的是条件,THEN是满足条件后对应该列的值,ELSE是不满足上述条件对应该列的值。根据题意,若教育水平小于等于20且大于16,则输出本科生,对应的SQL表示为WHEN 教育水平<=20 AND 教育水平>16,THEN“本科生”;其他情况,即教育水平小于等于16的,输出其他,对应的SQL表示为 ELSE其他。查询涉及员工和部门关系模式,查询条件为 员工.部门=部门.部门编号 AND 部门名称=“研发部”。
(5)本题考查用关键字LIKE进行字符匹配
LIKE的语法为:
[NOT] LIKE ‘<匹配串>’
其中,匹配串可以是一个完整的字符串,也可以含有通配符%和_,其中%代表任意长度(包括0长度)的字符串,_代表任意单个字符。不以“处”结尾的对应的表示为 NOT LIKE ‘%处’