首页 > 数据库 >[Oracle]面试官:你说说rownum、currval与nextval分别是什么,还有没有其他的?

[Oracle]面试官:你说说rownum、currval与nextval分别是什么,还有没有其他的?

时间:2024-08-02 10:57:19浏览次数:15  
标签:10 面试官 nextval currval emp 序列 rownum rn select

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://www.cnblogs.com/cnb-yuchen/p/18338280
出自【进步*于辰的博客

目录

1、rownum

参考笔记一,P18.3/4、P19.5。

1.1 介绍

rownum是虚拟字段,不真实存储,在返回结果集时生成,宏观作用类似序号。在每次查询时,从1开始给结果集编号。常与<<=连用。
在与>>=连用时,由于rownum是在查询记录时逐个生成,并迭代。因此,若rownum的判断在第1行记录时就不满足,则无法返回记录,即未迭代,rownum始终为1,最终结果集中无任何记录,与between...and...连用时同理。

$\color{red}{注意}$:所有SQL语句的执行顺序都是:from → where → group by → having → select → order by

由于rownum是伴随select生成,故与order by连用时,会导致rownum混乱。因此,通常是多层嵌套,先进行排序,再使用rownum进行筛选。(见示例)

$\color{green}{扩展}$:在Oracle中,常言的top-n查询其实是在rownum编号后,使用rownum进行判断,从而获取前n条记录的查询方法。(见示例)

1.2 示例

数据表:emp(no, ..., sal)
需求:查询工资6 ~ 10名的员工的所有信息。

写法一:

select e2.*
from (select e1.*, rownum rn
	  from (select * from emp order by sal desc) e1) e2
where rn between 6 and 10

前2层仅对结果集进行一次排序,不做筛选,在第3层时,才进行筛选。rnrownum的别名,由于rn属于第2层的结果集,非rownum,故已固定,因此可以直接使用rn between 6 and 10筛选出第6 ~ 10名。

写法二。

select e2.*
from (select e1.*, rownum rn
	  from (select * from emp order by sal desc) e1
	  where rownum <= 10) e2
where rn > 5

在第2层时就进行结果集筛选,rownum初始为1,满足rownum <= 10,则返回记录,同时rownum迭代,如此反复直到条件不满足,这样就查询出前10条记录(工资最高的前10名员工)。此时rownum固定,别名是rn,第3层可以直接使用rn筛选出第6 ~ 10名。

$\color{red}{补充说明:}$
两种写法在第1层时,都得到根据工资降序排序后的所有员工信息。
写法二较写法一,效率高很多。
因为写法一是在第3层才进行结果集筛选,由于条件是rn between 6 and 10,使用的是rnrn属于结果集,已固定。因此在筛选时,会遍历根据工资降序排序后的所有员工信息。
而写法二,在第2层时,是通过rownum <= 10进行筛选,由于rownum的生成机制,第2层仅遍历前10条记录(工资最高的前10名员工)。因此,第3层仅遍历10条员工信息。

2、nextval、currval

参考笔记一,P23.18。

2.1 序列

这两个伪列皆基于$\color{green}{序列}$,我暂未对序列的相关理论进行整理,大家可以查阅这篇博文《Oracle数据库序列》(转发)。

“序列”是一种按照一定规则自动增加或减少数字的数据库对象,主要用于主键(新增时填充主键)。创建示例:

create sequence swq_emp_empId
increment by 1
start with 1000
nocycle
cache 20

seq_emp是序列名;increment是递增值,默认值为1start是初始值;nocycle表示不循环;cache 20表示进行缓存,缓存大小为20

大家也可以使用图形化界面操作:
在这里插入图片描述

2.2 介绍

nextval是序列的下一个值,currval是序列的当前值。

使用位置:

  1. select子句中,不包括子查询的select子句;
  2. insert 语句的select子句或values子句中;
  3. update 语句的set子句中。

不能使用位置:

  1. 包含distinctgroup byhavingorder by的视图SQL语句的select子句中;
  2. select、update、delete的子查询中;
  3. 包含defaultcreate tablealter table语句中。

操作,

--修改序列--
alter sequence 序列名 ...;// 后面格式与创建语句相同
// 注:后面语句中没有start with,并且修改的值不能少于当前值

2.3 示例

insert into emps values(swq_emp_empId.nextval, '张三', 7500.00, 10);

update emps
set sal = 10000.00
where emp_id = swq_emp_empId.currval;

必须先获取nextval,才能使用currval

最后

掌握伪列,我建议:理解、自测。

本文持续更新中。。。

标签:10,面试官,nextval,currval,emp,序列,rownum,rn,select
From: https://www.cnblogs.com/cnb-yuchen/p/18338280

相关文章

  • [Oracle]面试官:你举例几个内置函数,并且说说如何使用内置函数作正则匹配
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/18338279出自【进步*于辰的博客】目录先言1、单行函数1.1lpad/rpad(str1,n,str2)1.2instr(str1,str2[,pos][,n])2、非空判断函数3、日期函数4、正则表达式相关函数4.1......
  • [Oracle]面试官:你简单说说常用的4种约束
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/18338278出自【进步*于辰的博客】参考笔记一,P22.18~22。目录1、介绍2、外键约束3、check约束4、notnull约束最后1、介绍“约束”是一种对数据表字段存储数据的限制,分......
  • 2024AGI面试官 常问的问题以及答案(附最新的AI大模型算法面试大厂必考100题 )
    前言在这个人工智能飞速发展的时代,AI大模型已经成为各行各业创新与变革的重要驱动力。从自动驾驶、医疗诊断到金融分析,AI大模型的应用场景日益广泛,为我们的生活带来了前所未有的便捷。作为一名程序员,了解并掌握AI大模型的相关知识,无疑将大大提升我们的竞争力。在这个充满......
  • 面试官:说说单点登录都是怎么实现的?
     在数字化时代,用户账户安全和便捷体验成为了众多互联网产品设计的重要考量。       而“单点登录”(SingleSign-On,SSO)作为提升用户体验、简化登录流程的关键技术,已经成为各类企业应用的标准配置。       那么,当你在面试现场被问到‘单点登录是如何实现的?’,......
  • 面试官:聊聊你对分库分表的理解?
    在MySQL集群架构中有两种主流的集群实现,一种是读写分离,而另外一种则是数据分片。所谓的数据分片其实就是今天要聊的分库分表技术。分库分表技术不但是日常工作中用于解决数据库中的数据量会急剧增长,解决单库单表性能瓶颈的一种方案,更是面试中的高频知识点。在阿里巴巴的《Java......
  • KMP算法中next数组以及nextval的求解(简单,通俗易懂版)
    以一个题为例:计算上图中next[j]以及nextval[j]的值。【本文中j的下标从1开始。】最长公共前后缀:···前缀:不包含最后一个字符的所有以第一个字符开头的连续子串。···后缀:不包含第一个字符的所有以最后一个字符结尾的连续子串。先看next[j],(1)j的下标......
  • 面试官:为什么SpringBoot的 jar 可以直接运行?
    引言传统Java应用部署:需要将应用打包成WAR文件,部署到如ApacheTomcat、Jetty等Web容器中。SpringBoot:改变了Java应用的开发体验,应用可以打包成可直接运行的jar文件,无需外部容器。SpringBootJAR包基础概念FatJAR(胖Jar):包含应用程序所需的全部依赖库和应用程序自身的......
  • 面试官:Dubbo一次RPC请求经历哪些环节?
    大家好,我是三友~~今天继续探秘系列,扒一扒一次RPC请求在Dubbo中经历的核心流程。本文是基于Dubbo3.x版本进行讲解一个简单的Demo这里还是老样子,为了保证文章的完整性和连贯性,方便那些没有使用过的小伙伴更加容易接受文章的内容,这里快速讲一讲Dubbo一个简单的Demo如果你已经......
  • [Java]面试官:你对异常处理了解多少,例如,finally中可以有return吗?
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/18299911出自【进步*于辰的博客】参考笔记一,P35.4/5。目录1、介绍2、try...with...resources最后1、介绍相信大家对try...catch...finally都很熟悉了,在此我提一点使用细......
  • 面试官无招可施?【独家秘籍】《大模型面试通关宝典》震撼上市!免费分享
    截至目前,国内已发布的大模型数量超过200个,特别是在10亿参数规模以上的大模型,已有报道指出数量已超过100个。这些大模型主要集中在自然语言处理领域,且地域分布上以北京和广东最为突出。随着人工智能技术的迅速发展,这个数字仍在持续增长中,反映出中国在大模型研发领域的强劲势......