问答题
(1)创建女员工信息的视图FemaleEMP,属性有Eno、Ename、Cno,Cname和Salary,请将下面SQL语句的空缺部分补充完整。 CREATE(e)AS SELECT EMP.Eno, Ename, COMPANY.Cno, Cname, Salary FROM EMP, COMPANY, WORKS WHERE(f);(2)员工的工资由职称级别的修改自动调整,需要用触发器来实现员工工资的自动维护,函数float Salarr_value(char(10)Eno)依据员工号计算员工新的工资。请将下面SQL语句的空缺部分补充完整。 CREATE(g)Salary_TRG AFTER(h)ON EMPREFERENCING new row AS nrowFOR EACH ROWBEGIN UPDATE WORKS SET (i) WHERE(j);END
【正确答案】正确答案:(1)(e)VIEW FemaleEMP(Eno, Ename, Cno, Cname, Salary) (f)EMP.Eno=WORKS.Eno AND COMPANY.Cno=WORKS.Cno AND Sex='女' (2)(g)TRIGGER (h)UPDATE (i)Salary=Salary_value(nrow.Eno) (j)WORKS.Eno=nrow.Eno
【答案解析】解析:(1)创建视图需要通过CREATE VIEW语句来实现,由题目可知视图的属性有(Eno, Ename,Cno,Cname,Salary);通过公共属性列Eno和Cno对使用的三个基本表进行连接;由于只创建女员工的试图,所以还要在WHERE后加入“Sex='女'”的条件。 从上分析可见,完整的SQL语句如下: CREATE
VIEW FemaleEMP(Eno, Ename, Cno, Cname, Salary)
AS SELECT EMP.Eno, Ename, COMPANY.Cno, Cname, Salary FROM EMP, COMPANY, WORKS WHERE
EMP.Eno = WORKS.Eno AND COMPANY.Cno=WORKS.Cno AND Sex='女';
(2)创建触发器可通过CREATE TRIGGER语句实现,要求考生掌握触发器的基本语法结构。按照问题要求,在工资关系中更新职工职称级别时触发器应自动执行,故需要创建基于UPDATE类型的触发器,其触发条件是更新职工职称级别;最后添加表连接条件。完整的触发器实现的方案如下: CREATE
TRIGGER
Salary_TRG AFTER
UPDA”TE
ON EMP REFERENCING new row AS nrow FOR EACH ROW BEGIN UPDATE WORKS SET
Salary = Salary value(nrow.Eno)
WHERE
WORKS.Erio= nrow.Eno;
END
问答题
请将下面SQL语句的空缺部分补充完整。(1)查询员工最多的公司编号和公司名称。 SELECT COMPANY.Cno, Cname FROM COMPANY, WORKS WHERE COMPANY.Cno一WORKS.Cno GROUP BY(k)HAVING(1)(SELECT COUNT(★)FROM WORKS GROUP BY Cno );(2)查询所有不在“中国银行北京分行”工作的员工工号和姓名。 SELECT Eno, Ename FROM EMP WHERE Eno(m)( SELECT Eno FROM(n)WHERE(o) AND Cname='中国银行北京分行' );
【答案解析】解析:SQL查询通过SELECT语句实现。 (1)根据问题要求,可通过子查询实现“查询员工最多的公司编号和公司名称”的查询;对COUNT函数计算的结果应通过HAVING条件语句进行约束;通过Cno和Cname的组合来进行分组查询。完整的SQL语句如下: SELECT COMPANY.Cno, Cname FROM COMPANY, WORKS WHERE COMPANY.Cno一WORKS.Cno GROUP BY
COMPANY.Cno, Cname
HAVING
COUNT(★)>=ALL
(SELECT COUNT(★) FROM WORKS GROUP BY Cno ); (2)根据问题要求,需要使用嵌套查询。先将WORKS和COMPANY表进行连接,查找出所有在“中国银行北京分行”工作的员工;然后在雇员表中使用“NOT IN"或者 “<>ANY”查询不在前述结果里面的员工即可。完整的SQL语句如下: SELECT Eno, Ename FROM EMP WHERE Eno NOT IN 或 <>ANY
( SELECT Eno FROM WORKS, COMPANY WHERE WORKS.Cno = COMPANY.Cno AND Cname='中国银行北京分行' );