参考答案:
【问题1】
(a) PRIMARY KEY或NOT NULL UNIQUE
(b) REFERENCES职工(职工编号)
(c) CHECK VALUES IN(‘待处理’,‘审理中’,‘结案’,‘撤销’)
(d) CHECK(立案日期<=结案日期)
【问题2】
(1)(e)职工.姓名AS主审法官姓名
(f)案件,被告,律师,职工(关系模式的顺序无关)
(g)案件.主审法官=职工.职工编号 AND案件.案件状态=‘待处理’
(2)(h)立案日期BETWEEN ’OI-JAN-2009’ AND ‘31_DEC_2009’或者立案日期>=
‘Ol-JAN-2009’AND立案日期<=‘31-DEC-2009’
(i) ORDER BY案件数DESC
(3)(j)案件.被告=被告.被告编号
(k)姓名,地址
(l) HAVING count(*)>5
【问题3】
(m) INSERT
(n) SET状态=’审理中’
(o)案件编号=nrow.案件编号
详细解析:
本题考查SQL语句的基本语法与结构知识。
此类题目要求考生掌握SQL语句的基本语法和结构,认真阅读题目给出的关系模式,针对题目的要求具体分析并解答。
【问题1】
由于问题1中“案件编号唯一标识一个案件”可案件编号为案件关系的主键,即不能为空且唯一标识一条账户信息,因此需要用PRIMARY KEY对该属性进行主键约束,当然,用NOT NULL UNIQUE也可以实现;(b)空处是要给主审法官这个属性进行约束,根据题目意思,我们可以知道主审法官的属性值应该是员工编号,因此主审法官应该属于外键,因此该空应填:REFERENCES职工(职工编号);(c)空是要为案件选择其状态,由于题目高位我们案件状态有“待处理”、“审理中”、“结案”和“撤销”四种,因此该空应填:CHECK VALUES IN(‘待处理’,‘审理中’,‘结案’,‘撤销’)。
另外,根据问题一的要求,要求立案日期小于等于结案日期,而这一功能在前面很显然没有实现,因此(d)空应该用来实现这一功能,因此本空应填:CHECK(立案日期<=结案日期)。
【问题2】
SQL查询通过SELECT语句实现。
(1)根据题目要求,即显示案件的案件编号、立案日期、被告姓名、被告地址、案件描述、律师姓名和主审法官姓名。而在本小题给出的查询语句中,很明显主审法官姓名没有体现,而主审法官的姓名实际就是职工关系模式中的姓名属性,是因此空(e)应该填:职工.姓名AS主审法官姓名。而空(f)是要给出需要查询的表名,在本题中,需查询案件,被告,律师,职工表,因此本空应填:案件,被告,律师,职工。根据本小题的题目要求,应该要查询当前待处理的诉讼案件,而且需要查找4个表,因此要将各表联系起来,而在题目中给出了案件表与律师和被告表的联系,那么接着应该给出案件表与职工表的联系及定义查找的案件为待处理状态的案件。因此(g)空需要填写:案件.主审法官=职工.职工编号 AND案件.案件状态=‘待处理’。
(2)本小题要求查询2009年立案的各类案件数,并按案件数降序排序。空(h)是WHERE后面缺失的内容,WHERE后面的内容应该是查询的条件,那么这里应该要求查找2009年立案的各类案件,换句话说,就是要查找在2009年1月1号至2009年12月31号之间立案的各类案件,因此该空应填:立案日期BETWEEN ‘OI-JAN-2009’ AND ‘31_DEC_2009’。接下来的语言“GROUP BY类型”实现了将查询结果按案件类型进行分类,那么最后的工作就是要统计各类案件的数量并按案件数降序排序,因此空(i)处应填:ORDER BY案件数DESC。
(3)本小题要求查询立案次数超过5次的被告姓名和地址。从前面的SQL语句我们可以看出,该次查询要对案件和被告表进行查询,因此需要将这两个表进行关联,因此空(j)的功能就是要将这两个表进行关联,因此该空应填:案件.被告=被告.被告编号。空(k)处很显然是要填按什么分组,根据题目意思,是要按姓名和地址来进行分组统计,所以本空应填:姓名,地址。在进行统计分组后,我们应该筛选出满足题目要求的项,因此空(l)应填:HAVING count(*)>5。
【问题3】
本题要求我们掌握创建触发器的基本语法结构。本题要求当插入一个审理记录时,检查案件的状态,若状态为“未处理”,则将其修改为“审理中”。根据触发器的创建格式我们可知空(m)处是要指明该触发器要侦测的数据操作事件,根据题目意思,侦测的数据操作事件是插入一个审理记录。因此本空应填:INSERT。而这个触发器要完成的功能题目已经描述得很清楚,是要将状态从“未处理”修改为“审理中”,因此空(n)处就是要更新状态为审理中,因此本空应填:SET状态=‘审理中’,那么具体更新的是那条记录,应该通过WHERE语句来指定,而每条记录都是通过案件编号来唯一标识的,因此空(o)处应填:案件编号=nrow.案件编号。
CREATE TRIGGER 审理TRIGGER AFTER INSERT ON审理
REFERENCING new row AS nrow
FOR EACH row
WHEN‘未处理’=(SELECT状态
FROM案件
WHERE案件编号- nrow.案件编号)
BEGIN
UPDATE案件SET状态=‘审理中’
WHERE案件编号=nrow.案件编号;
END