2.某数据库有3个基本表,部门表dept(部门编号deptno,部门名dname,地址loc),员工表emp(员工号empno,员工名ename, 雇佣日期hiredate,部门号deptno),考核表eval(员工号empno,年出勤数attnd,年考核成绩eval) 创建一个行级触发器 Trig_delete,如果在员工表中进行了删除员工的操作,则在考核表中应将该员工一起删除。
时间: 2023-11-22 17:56:48 浏览: 45
可以使用如下的 SQL 代码来创建这个行级触发器:
```
CREATE TRIGGER Trig_delete
AFTER DELETE ON emp
FOR EACH ROW
BEGIN
DELETE FROM eval WHERE empno = OLD.empno;
END;
```
解释一下以上代码的含义:
- `CREATE TRIGGER Trig_delete`:创建一个名为 Trig_delete 的触发器。
- `AFTER DELETE ON emp`:指定该触发器在 emp 表中进行删除操作之后触发。
- `FOR EACH ROW`:指定该触发器对每一行进行操作。
- `BEGIN` 和 `END`:标记触发器的代码块。
- `DELETE FROM eval WHERE empno = OLD.empno;`:删除 eval 表中 empno 等于被删除员工的 empno 的行。`OLD` 是一个关键字,表示被删除的行。
当在员工表中进行了删除员工的操作时,该行级触发器 Trig_delete 就会自动触发,将考核表中该员工的记录一并删除。
相关问题
oracel数据库返回部门号、部门名、部门所在位置及其每个部门的员工总数。
你可以使用以下 SQL 查询语句来实现:
```
SELECT d.deptno, d.dname, d.loc, COUNT(e.empno) AS "Total Employees"
FROM dept d
LEFT JOIN emp e ON d.deptno = e.deptno
GROUP BY d.deptno, d.dname, d.loc;
```
这个查询语句使用了左连接(LEFT JOIN)来将部门表(dept)和员工表(emp)连接在一起,并且使用了 GROUP BY 子句来按照部门号、部门名和部门所在位置分组,然后在 SELECT 子句中使用 COUNT 函数来计算每个部门的员工总数。
现有关系集合 emp(empno,ename.job,mgr,hiredate,sal,comm,deptno)dept(deptno,dname,loc)关系emp中各个属性的含义如下: empno(员工编号); ename(员工姓名);job(员工职位); mgr(员工的直接领导的员工编号);hiredate(员工入职日期); sal(员工工资); comm(员工补助);deptno(员工所在部门的部门编号)。 关系dept中各个属性的含义如下: deptno(部门编号); dname(部门名称); loc(部门所在城市)。请写出满足以下查询需求的关系代数表达式。 1.获得所有部门的员工人数,包括没有员工的部门。 2.获得scott的直接领导的姓名。 3.获得提供了工资在3000-4000之间对应的所有职位的部门,输出部门编号及部门名称。 4.获得工资比所在部门的平均工资高的员工的姓名,工资及所在部门的平均工资。
1. πdeptno, count(empno)(emp) ∪ πdeptno, 0(dept-πdeptno(emp))
解释:在emp表中,对empno进行计数并按deptno进行分组,将结果与dept表中deptno列进行外连接,得到所有部门的员工人数,包括没有员工的部门。
2. πename(emp|σemp.mgr=scott.empno(emp))
解释:在emp表中,选取mgr等于scott的empno的员工,然后再选择这些员工的ename列。
3. πdeptno, dname(dept|deptno in (πdeptno(σ3000≤sal and sal≤4000(emp)) ∩ πdeptno(emp)))
解释:首先在emp表中选取工资在3000-4000之间的员工,然后选择这些员工所在的部门编号,并与dept表中的deptno列进行交集运算,得到对应的部门编号,再根据这些部门编号选择dept表中的deptno和dname列。
4. πename, sal, avg(sal)(emp|sal > (select avg(sal) from emp as e where e.deptno = emp.deptno))
解释:在emp表中,选择工资比所在部门平均工资高的员工,然后选择这些员工的ename和sal列,以及这些员工所在部门的平均工资。其中,平均工资的计算是在子查询中进行的,子查询中使用了emp表的别名e,且对e的deptno进行了限制,确保计算的是该员工所在部门的平均工资。