根据提供的标题、描述以及部分代码内容,我们可以整理出Oracle数据库查询相关的知识点,这些知识点主要集中在多表查询、条件筛选及聚合函数的使用上。 ### 1. 多表查询与聚合函数 #### 1.1 统计部门员工数量超过1人的部门 ```sql SELECT deptno, COUNT(empno) FROM emp GROUP BY deptno HAVING COUNT(empno) > 1; ``` 此查询用于找出员工数量超过1人的所有部门。`GROUP BY`子句按照`deptno`进行分组,而`HAVING COUNT(empno) > 1`则确保只返回那些满足特定条件(即员工数量大于1)的分组结果。 #### 1.2 多表连接查询部门员工数量超过1人的部门详情 ```sql SELECT d.*, ed.cou FROM dept d, (SELECT deptno, COUNT(empno) cou FROM emp GROUP BY deptno HAVING COUNT(empno) > 1) ed WHERE d.deptno = ed.deptno; ``` 这里使用了嵌套查询的方式,先通过子查询统计员工数量超过1人的部门,并计算每个符合条件的部门的员工数量(命名为`cou`),然后将这个结果集与`dept`表进行连接,得到具体的部门信息。 ### 2. 条件筛选查询 #### 2.1 查询工资高于'SMITH'员工的其他员工 ```sql SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE ename = 'SMITH'); ``` 该查询用于找出工资高于名为'SMITH'的员工的所有员工。这里使用了子查询来获取'SMITH'员工的工资,并作为外部查询中的比较基准。 ### 3. 多条件组合查询 #### 3.1 查询每个员工及其直属领导的信息 ```sql SELECT e.ename, m.ename FROM emp e, emp m WHERE e.mgr = m.empno (+); ``` 这个查询展示了如何使用表别名简化查询语句,并通过外连接(`empno (+)`)确保即使没有对应的领导记录也能返回员工的信息。 ### 4. 多表复杂条件查询 #### 4.1 查询入职日期早于其直属领导的员工及其部门信息 ```sql SELECT e.empno, e.ename, d.dname FROM emp e, emp m, dept d WHERE e.mgr = m.empno AND e.hiredate < m.hiredate AND e.deptno = d.deptno; ``` 这个复杂的查询结合了多个条件:通过`mgr`字段找到员工的直属领导,同时利用`hiredate`确保员工的入职日期早于领导;并通过`deptno`字段连接`dept`表以获取部门名称。 ### 5. 左外连接查询 #### 5.1 左外连接查询员工及其所在部门信息 ```sql SELECT d.dname, e.* FROM emp e, dept d WHERE e.deptno (+) = d.deptno; ``` 这里的左外连接(通过`deptno (+)`表示)可以返回所有员工的信息,即使某些员工没有对应部门信息的情况下也能够显示这些员工的基本信息。 ### 6. 指定职位员工查询 #### 6.1 查询所有职位为“CLERK”的员工及其所在部门信息 ```sql SELECT e.ename, d.dname FROM emp e, dept d WHERE e.deptno = d.deptno AND e.job = 'CLERK'; ``` 该查询通过`job`字段筛选出职位为“CLERK”的员工,并结合`deptno`字段连接`dept`表以获取部门名称。 ### 7. 聚合函数与条件筛选 #### 7.1 查询最低工资超过1500元的职位及其员工数量 ```sql SELECT job, COUNT(empno) FROM emp WHERE job IN (SELECT job FROM emp GROUP BY job HAVING MIN(sal) > 1500) GROUP BY job; ``` 这里使用了嵌套查询和聚合函数`MIN`来筛选出最低工资超过1500元的职位,并进一步计算这些职位的员工数量。 ### 8. 部门信息筛选查询 #### 8.1 查询属于“SALES”部门的员工 ```sql SELECT ename FROM emp WHERE deptno = (SELECT deptno FROM dept WHERE dname = UPPER('sales')); ``` 该查询通过子查询先找到部门名称为“SALES”的部门编号,然后在`emp`表中筛选出该部门的员工。 ### 9. 平均工资与条件筛选 #### 9.1 计算公司员工平均工资 ```sql SELECT AVG(sal) FROM emp; ``` 简单的聚合函数应用,用于计算公司所有员工的平均工资。 #### 9.2 查询工资高于公司平均工资的员工及其所在部门信息 ```sql SELECT e.*, d.dname, d.loc FROM emp e, dept d WHERE sal > (SELECT AVG(sal) FROM emp) AND e.deptno = d.deptno; ``` 这个查询首先通过子查询获取公司的平均工资,然后筛选出工资高于平均值的员工,并通过部门编号连接`dept`表以获取部门信息。 以上内容总结了给定文件中的关键查询语句和应用场景,涉及到了多表查询、条件筛选、聚合函数等多种Oracle数据库操作技巧。
分析: 所有部门的员工数量
count(),group by
select deptno,count(empno) from emp group by deptno;
count(empno)>1
having
select deptno,count(empno) from emp group by deptno having count(empno)>1;
select d.*,ed.cou
from dept d,(select deptno,count(empno) cou from emp group by deptno having count(empno)>1) ed
where d.deptno=ed.deptno;
2、列出薪金比“SMITH”多的所有员工
select sal from emp where ename='SMITH';
select * from emp where sal>(select sal from emp where ename='SMITH');
3、列出所有员工的姓名以及其直接上级的姓名
select e.ename 员工的姓名,m.ename 领导的姓名
from emp e,emp m
where e.mgr=m.empno(+);
4、列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称
select e.empno,e.ename,d.dname
from emp e,emp m,dept d
where e.mgr=m.empno and e.hiredate<m.hiredate and e.deptno=d.deptno;
5、列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门
左右连接
select d.dname,e.*
from emp e,dept d
where e.deptno(+)=d.deptno;
6、列出所有“CLERK”的姓名及其部门名称,部门的人数
select ename,deptno from emp where job='CLERK';
select e.ename,d.dname,
from emp e,dept d
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助