Oracle的复杂查询
本文使用到的表
1.EMP(内容和注释在【Oracle数据库】表查询(一)一文中);
2.DEPT,其中deptno为部门编号,Dname为部门名称,Loc为部门地址;
3.SalGrade,其中Grade为工资等级,Losal和Hisal分别为该等级的工资下线和工资上线。
1.数据分组:常用的数据分组函数 -avg(),min(),max(),conut() 等等
如何显示所有员工中的最高工资和最低工资?
那我们如何在结果中显示出获得最高工资和最低工资的人呢(使用到了子查询)
我们再举两个例子:计算所有员工的平均工资和工资总和
统计共有多少个不同的岗位
2.group by 和 having 子句
Group by 用于对查询的结果分组统计
Having字句用于限制分组查询的结果 举几个例子就懂了
显示每个部门的最低工资和最高工资
显示每个部门每个不同岗位的最低工资和最高工资
显示平均工资低于2000的部门号和它的平均工资
注:分组函数只能出现在选择列表、having、order by 字句里面。
如果在select语句同时包还有group by、having、order by,那么他们的顺序是group by、having、order by。
3.多表查询:对两个或以上的表或视图进行的查询
我们可以给表起个别名来方便使用,直接看例子吧,简单明了
显示雇员名、员工工资和所在部门的名称
注意,在多表查询中至少指定(表个数-1)个条件(如上的where。。。),否则会出现笛卡尔集。您可以去掉上图中的where条件感受一下。
查询部门号为10的部门名称,员工名和工资
显示员工的姓名,所在部门的名称和工资级别(注意使用到的between关键字)
将上图的查询结果按工资等级升序排序
4.自连接:同一张表内的连接查询
显示员工的名字,和他上司的名字