- 部门表 dept:部门标号(DEPTNO),部门名称(DNAME),所在位置(LOC) - 雇员表 emp:员工标号(Empno),员工名称(Emname),员工工位(Job),经理(Mgr),雇佣日期(Hiredate),薪水(Sal),部门编号(Deptno) 写出 sql 语句: - 找出部门名称为 ACCOUNTING 的部门下的所有员工名称? - 找出部门名称为 SALES 的部门下每月需要发出的薪水总额? - 找出部门名称为 SALES 的部门的部门经理? - 找出部门名称为 RESEARCH 的部门下雇佣日期为 1980-12-17 的员工?
时间: 2023-05-23 20:06:58 浏览: 115
1. 找出部门名称为 ACCOUNTING 的部门下的所有员工名称:
SELECT Emname FROM emp WHERE Deptno=(SELECT DEPTNO FROM dept WHERE DNAME='ACCOUNTING');
2. 找出部门名称为 SALES 的部门下每月需要发出的薪水总额:
SELECT SUM(Sal) FROM emp WHERE Deptno=(SELECT DEPTNO FROM dept WHERE DNAME='SALES');
3. 找出部门名称为 SALES 的部门的部门经理:
SELECT mgr FROM emp WHERE Deptno=(SELECT DEPTNO FROM dept WHERE DNAME='SALES') AND Job='MANAGER';
4. 找出部门名称为 RESEARCH 的部门下雇佣日期为 1980-12-17 的员工:
SELECT Emname FROM emp WHERE Deptno=(SELECT DEPTNO FROM dept WHERE DNAME='RESEARCH') AND Hiredate='1980-12-17';
相关问题
现有关系集合 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进行了限制,确保计算的是该员工所在部门的平均工资。
2.某数据库有3个基本表,部门表dept(部门编号deptno,部门名dname,地址loc),员工表emp(员工号empno,员工名ename, 雇佣日期hiredate,部门号deptno),考核表eval(员工号empno,年出勤数attnd,年考核成绩eval) 创建一个行级触发器 Trig_delete,如果在员工表中进行了删除员工的操作,则在考核表中应将该员工一起删除。
可以使用如下的 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 就会自动触发,将考核表中该员工的记录一并删除。