标题:“Oracle基本功” 描述:“关于Oracle数据库的一些基本操作,适合于新手学习使用!” 从提供的文件信息中,我们可以提炼出一系列重要的Oracle数据库基础知识和操作技巧,这些内容对于初学者和经验不足的数据库管理员(DBA)来说尤其宝贵。下面将详细解释其中的关键知识点。 ### Oracle表连接与子查询 #### 求部门中薪水最高的人 通过连接查询找出每个部门薪水最高的人,这里使用了`JOIN`语句和`GROUP BY`子句来分组部门并找到每组的最大薪水。 ```sql SELECT ename, sal FROM emp JOIN (SELECT MAX(sal) max_sal, deptno FROM emp GROUP BY deptno) t ON (emp.sal = t.max_sal AND emp.deptno = t.deptno); ``` #### 求部门平均薪水的等级 此查询计算了每个部门的平均薪水,并将其与`salgrades`表中的薪水等级进行匹配,以确定平均薪水所属的等级。 ```sql SELECT deptno, AVG(sal) avg_sal, grade FROM (SELECT deptno, AVG(sal) avg_sal FROM emp GROUP BY deptno) t JOIN salgrades ON (t.avg_sal BETWEEN s.losal AND s.hisal); ``` #### 求部门平均薪水等级 该查询更进一步,找出每个部门中所有员工薪水等级的平均值。 ```sql SELECT deptno, AVG(grade) FROM (SELECT deptno, ename, grade FROM emp JOIN salgrades ON (emp.sal BETWEEN s.losal AND s.hisal)) t GROUP BY deptno; ``` ### 雇员中的经理 这个查询通过比较员工编号和经理编号来识别哪些员工是经理。 ```sql SELECT ename FROM emp WHERE empno IN (SELECT DISTINCT mgr FROM emp); ``` ### 不使用组函数求薪水最高值 利用`NOT IN`和子查询来避免使用`MAX`函数,间接找出薪水最高的人。 ```sql SELECT sal FROM emp WHERE sal NOT IN (SELECT DISTINCT e1.sal FROM emp e1 JOIN emp e2 ON (e1.sal < e2.sal)); ``` ### 使用组函数求薪水最高值 这是更直接的方法,直接使用`MAX`函数来查找最高薪水。 ```sql SELECT MAX(sal) FROM emp; ``` ### 求平均薪水最高的部门 此查询首先计算每个部门的平均薪水,然后找出其中最大的平均薪水所对应的部门编号。 ```sql SELECT deptno, avg_sal FROM (SELECT AVG(sal) avg_sal, deptno FROM emp GROUP BY deptno) t WHERE avg_sal = (SELECT MAX(avg_sal) FROM (SELECT AVG(sal) avg_sal, deptno FROM emp GROUP BY deptno) t); ``` ### 组函数嵌套写法 上面的查询可以进一步优化为组函数的嵌套使用,提高效率和可读性。 ```sql SELECT deptno, avg_sal FROM (SELECT AVG(sal) avg_sal, deptno FROM emp GROUP BY deptno) t WHERE avg_sal = (SELECT MAX(AVG(sal)) FROM emp GROUP BY deptno); ``` ### 求平均薪水最高的部门名称 这里结合`dept`表来获取部门名称,而不是仅仅部门编号。 ```sql SELECT dname FROM dept WHERE deptno = (SELECT deptno FROM (SELECT AVG(sal) avg_sal, deptno FROM emp GROUP BY deptno) t WHERE avg_sal = (SELECT MAX(avg_sal) FROM (SELECT AVG(sal) avg_sal, deptno FROM emp GROUP BY deptno) t)); ``` ### 求平均薪水等级最低的部门名称 此查询较为复杂,旨在找出平均薪水等级最低的部门,通过多次嵌套查询实现。 ```sql SELECT t.avg_sal, t.deptno, s.grade FROM (SELECT AVG(sal) avg_sal, deptno FROM emp GROUP BY deptno) t JOIN salgrades ON (t.avg_sal BETWEEN s.losal AND s.hisal) WHERE avg_sal = ( SELECT MIN(avg_sal) FROM (SELECT AVG(sal) avg_sal, deptno FROM emp GROUP BY deptno) ); ``` 通过以上详细解析,我们可以看到Oracle数据库的强大功能和灵活性,它允许我们通过各种查询技术来处理复杂的数据分析需求。对于新手和有志于深化Oracle技能的人来说,熟练掌握这些基础操作是非常重要的。这些知识点不仅涵盖了数据查询的基础,还触及到了高级查询技巧,如嵌套查询、子查询和连接等,这些都是成为一名优秀Oracle DBA所必需的核心能力。
剩余15页未读,继续阅读
- 粉丝: 1
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助