oracle数据库聚合函数、分组、子查询、分页
聚合函数
聚合函数经常与 SELECT 语句的 GROUP BY 子句一同使用,所以也把其它称之为分组函数。
group by 子句就是按照某一个条件,给数据进行分组
select语句执行顺序:
from子句,组装来自表的数据,有可能是多张表
where子句,基于指定的条件对记录行进行筛选
group by子句,将数据划分为多个分组
使用聚合函数对没个小组中的数据进行计算
having子句,进行条件筛选,这里可以使用聚合函数的计算结果
计算所有的运算表达式,主要是select部分
order by子句,对结果集进行排序
聚合函数能够出现的位置:
select后面
having后面
order by后面
注意:where后面不能放聚合函数
where和having对比:
where和having都是做条件筛选的
where执行的时间比having要早
where后面不能出现组函数having后面可以出现组函数
where语句要紧跟from后面having语句要紧跟group by后面
group by和having的关系:
group by可以单独存在,后面可以不出现having语句
having不能单独存在,如果需要出现,那么就必须出现在group by后面
group by 分组
在使用聚合函数的时候:
如果还使用了group by分组,那么就表示先分组,然后对每一个小组使用聚合函数如果没有使用group by分组,
那么就表示全部数据是一个默认小组,然后对这个全部数据使用聚合函数。
子查询
子查询的思路就是,把第一个sql语句的查询结果,在第二个sql语句中使用,这时候第一条sql语句的结
果,在第二条sql中就可以充当一个where条件中的一个值,或者充当一张虚拟的表。
分页查询
因为表中数据过多,我们并不能一次全都查询出来交给前端去展示,而是需要每次按照提前设置好的要求,查询一部分数据给用户,当用户点击下一页的时候,再查出下一部分数据给用户。实现分页的方式有很多,并且不同数据库,实现分页查询的方式也会不同,那么在Oracle中,可以使用伪列rownum,再结合子查询来进行简单的实现。
select t.id,t.last_name,t.dept_idfrom (select rownum rn,id,last_name,dept_idfrom s_empwhere rownum<=10) twhere t.rn>=6;
查询 6-10的记录
补充:minus 表示差集,第一个结果集 除去 第二个结果集和它相同的部分 从方法效率不高