栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

PLSQL——分页sql,case when

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PLSQL——分页sql,case when

5.分页sql

伪列:rownum 它是oracle数据库内置列,任何表都可以使用,它作用是显示表中数字的行号

select emp.*,rownum from emp;
select t.*,rownum r from (select * from emp order by sal) t;

–查询工资最低的5名员工信息

select t.*,rownum r from (select  *  from emp order by sal) t where rownum<=5; 

–注意如果给伪列加条件,小于一个值是可以,不能让它大于某个值

select t.*,rownum r from (select *  from emp order by sal) t where rownum>=2; 

–伪列不能直接大于一个值

select t.*,rownum r from (select  *  from emp order by sal) t where rownum=5;  

–伪列不能直接等于一个不等于1的值

select t.*,rownum r from (select  *  from emp order by sal) t where rownum=1;  

–伪列可以直接等于1

使用rownum的分页sql,rownum伪列的序号,只连续的不考虑值相等的情况(值相同序号不相同)

–查询5到10名的员工信息

select * from (select t.*,rownum r from (select * from emp order by sal) t) t2 where t2.r between 5 and 10;

–包三层查询

  1. row_number():

需要和over分析函数联用,排序的序号和rownum伪列相同,连续序号,不考虑值相等的情况(值相同序号不相同)
select *,row_number()over

  1. dense_rank():

可以用来做排序,它序号连续,考虑重复数据,如果值相等序号就相同

  1. rank():

可以用来做排序,它序号不连续,考虑重复数据,如果值相等序号相同

  1. over(partition by 分组列 order by 排序列):

over子句中的分组partition by和group by的分组不同,它不会把数据聚合成一条,在over子名中可以省略

select e.*,row_number()over(order by sal desc) r from emp e;

select e.*,dense_rank()over(order by sal desc) r from emp e;

select e.*,rank()over(order by sal desc) r from emp e;

select e.*,row_number()over(partition by deptno order by sal desc) r from emp e;

select e.*,dense_rank()over(partition by deptno order by sal desc) r from emp e;

select e.*,rank()over(partition by deptno order by sal desc) r from emp e;

使用row_number(),rank(),dense_rank()的分页sql,只需要一层子查询

select * from (select e.*,row_number()over(order by sal) r from emp e) t where t.r between 5 and 10;

笔记:
**rownum:**显示表中的数字行号
注:给伪列加条件,小于可以,大于不可以,不能直接等于一个不等于1的值
是对结果的序号,只连续,不考虑值相等的情况
**rowid:**数据物理地址,可以作为数据唯一标识(用来去重)
**row_number()*需要与over联用 ,不考虑值相等
**dense_rank()*可以用来排序,考虑重复数据、值相等序号相等
**rank():**可以用来排序,序号不连续,考虑重复数据
over(partition by 分组列 order by 排序列):(开窗函数):与 group by 不同,不会将数据整合为一条,在over子句中可省略。

6.case when语句

语法:
case
when 条件表达式1 then
值
when 条件表达式2 then
值
when 条件表达式3 then
值
…
else
默认值
end

语义:如果表达式成立,那么整个语句值为表达式,then后面的值,
如果所有表达式都不成立,会取else后的默认值
else语句可以省略
select * from student;

select count(*) from student where ssex=‘男’;

select s.,
(select count() from student where ssex=‘男’) 男生人数,
(select count(*) from student where ssex=‘女’) 女生人数
from student s;

使用case when统计男生人数
select
sum(case when ssex=‘男’ then 1 else 0 end) 男生人数,
sum(case when ssex=‘男’ then 0 else 1 end) 女生人数
from student s;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1003560.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号