- 部门表 dept:部门标号(DEPTNO),部门名称(DNAME),所在位置(LOC) - 雇员表 emp:员工标号(Empno),员工名称(Emname),员工工位(Job),经理(Mgr),雇佣日期(Hiredate),薪水(Sal),部门编号(Deptno) 写出 sql 语句: - 找出部门名称为 ACCOUNTING 的部门下的所有员工名称? - 找出部门名称为 SALES 的部门下每月需要发出的薪水总额? - 找出部门名称为 SALES 的部门的部门经理? - 找出部门名称为 RESEARCH 的部门下雇佣日期为 1980-12-17 的员工?
时间: 2023-05-23 08:06:58 浏览: 69
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';
相关问题
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 就会自动触发,将考核表中该员工的记录一并删除。
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 函数来计算每个部门的员工总数。
相关推荐















