ORACLE(3)

4.4过滤行记录和组信息

行记录的过滤是针对每条记录的筛选,组信息的过滤是针对组的筛选,是可以同时出现的,先筛选行,再过滤组。

where 筛选行,只能出现行信息

having 筛选组,只能出现组信息

结构:select...from...where...group by ...having...

执行顺序:

from

where

group by

having

select

--查询部门编号和部门里面的员工数量

--只统计工资大于2000的员工(行记录)

--并且是工资大于2000的员工数量在2及其以上的部门(组信息过滤)

select deptno,count(*) from emp where sal>2000 group by deptno having count(*)>=2;

  1. 分页和去重

1.1分页介绍

因为列表内容太多,所以使用分页进行显示。数据过多单页无法显示所有内容,则每一次只显示一部分的数据。

分页,是一种将所有数据分段展示给用户的技术,用户每次看到的不是全部数据,而是其中的一部分,如果在其中没有找到自己想要的内容,用户可以通过制定页码或是翻页的方式转换可见内容,直到找到自己想要的内容为止。

实现分页的解决方案有两种:

(1).一次查询出数据库中的所有记录,在每页中显示指定的记录。

(2).对数据库进行多次查询,每次只获取本页的数据并显示。

注意:执行方案1会加大服务器内存的负载,降低系统运行速度,执行方案2,则可能会频繁操作数据库,会影响效率 ,建议采用1+2的方式来实现。

分页的核心就是计算每页多少记录和总页数以及第几页。每一页的数据则只需计算起始的记录和结束的记录即可。

1.2rownum

rownum 不是一个真实存在的列,它是用于从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数。

由于rownum 总是结果集的编号,所以无法查询rownum>1的任何记录,因为总是从1开始的。

       --rownum 是对每一个结果集中的每一条记录的编号,从1开始

       select ename,sal,deptno,rownum from emp;

       select ename,sal,deptno,rownum from emp where deptno =30;

       --进行分页,每一页显示5条记录,查询第一页的数据

       select ename,sal,deptnpo,rownum from emp where rownum <=5;

       --查询第二的数据 6~10 (注:此方法不可取)

       select ename,sal,deptno,rownum from emp where rownum <=10 and rownum >=6;

       正确方法:

       --将查询所有的员工信息,并且加上伪列rownum;

       select ename,sal,deptno,rownum from emp;

       --将查询出来的结果作为临时的数据来源,此时,刚才临时的那个结果集rownum普通字段(rw 在这里是别名的意思 )  这里是第二页的意思

       select * from (select ename,sal,deptno,rownum rw from emp)where rw>5 and rw<=10;

       --查询员工的信息,姓名,工资,部门编号,按照工资降序排序,实现分页

       --每一页显示3条记录 查询第2页的数据

 第一步:select ename,sal,depyno,r1,rownum r2 from ( select ename ,sal,deptno,rownum r1 from emp order by sal desc);

第二步:select ename ,sal,deptno,r1,r2 from (select ename,sal,depyno,r1,rownum r2 from ( select ename ,sal,deptno,rownum r1 from emp order by sal desc)) where r2>(3-1)*3 and r2<=2*3;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值