列表

详情


阅读下列说明,回答问题l和问题2,将解答填入答题纸的对应栏内。
【说明】
某企业信息系统的部分关系模式及属性说明如下:
(1)员工关系模式:员工(员工编号,姓名,部门,工资,职务,教育水平),其中员工编号是主键,部门是外键,参照部门关系模式的部门编号属性。
(2)部门关系模式:部门(部门编号,部门名称,经理),其中部门编号是主键,经理是外键,参照员工关系模式的员工编号属性。
(3)项目关系模式:项目(项目编号,项目名称,所属部门,负责人),其中项目编号是主键,所属部门和负责人是外键,分别参照部门关系模式和员工关系模式的部门编号和员工编号属性。
(4)员工项目关系模式:员工项目(员工编号,项目编号),其中员工编号和项目编号是主键,同时员工编号和项目编号也是外键,分别参照员工关系模式的员工编号和项目关系模式的项目编号。

【问题1】(2分)
假设定义员工关系模式时,没有定义主键和外键。请用SQL语句补充定义员工关系模式的实体完整性约束和参照完整性约束。
(a) ;
(b) ;
【问题2】(13分)
请将下列SQL查询语句补充完整。
(1)查询平均工资(不包含职务为经理的员工)超过3000的部门的编号,部门名称及其平均工资,并按平均工资从高到低排序。
SELECT部门编号,部门名称,(c)  AS平均工资
FROM员工,部门
WHERE  (d)
GROUP BY  (e)
HAVING   (f)
(g);
(2)查询工资大于全体员工平均工资的员工编号,姓名和工资。
SELECT员工编号,姓名,工资
FROM员工
WHERE  (h);
(3)查询没有承担任何项目的部门编号和部门名称。
SELECT部门编号,部门名称
FROM部门
WHERE (i)  (SELECT.FROM项目WHERE  (i)  );
(4)查询研发部所有员工的员工编号和教育水平,若教育水平大于20,则输出研究生;若教育水平小于等于20,并大于16,则输出本科生;否则输出其他。
SELECT员工编号,
CASE
WHEN教育水平>20 THEN‘研究生’
(k)
(l)
END
FROM员工,部门
WHERE (m)  ;
(5)查询部门名称不以“处”结尾的部门编号和部门名称。
SELECT部门编号,部门名称
FROM部门
WHERE部门名称 (n) ;

参考答案:

【问题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 ‘%处’

上一题