请求解析获取EMP表最后5条记录的SQL查询逻辑
这条SQL取EMP表最后5条记录的原理解析
首先得先搞懂Oracle里的ROWID:它是数据库给每条记录分配的唯一标识符,对应记录在磁盘上的存储位置,通常情况下,后插入的记录ROWID会比先插入的大(这也是这条SQL能生效的前提)。
接下来拆解这条SQL的逻辑:
- 主查询遍历
EMP表的每一条记录,把当前遍历的记录记作a。 - 子查询做的事情:统计
EMP表中所有ROWID比当前记录a的ROWID大的记录数量。 - 条件
5 > 子查询的统计数,也就是统计数要小于5:- 假设表中最后一条记录,没有比它ROWID更大的记录,统计数是0,满足0<5;
- 倒数第二条记录,只有1条记录的ROWID比它大,统计数1,满足1<5;
- ...以此类推,倒数第五条记录,有4条记录的ROWID比它大,统计数4,满足4<5;
- 而倒数第六条及更早的记录,统计数会≥5,不满足条件,被过滤掉。
这样最后筛选出来的就是表中ROWID最大的5条记录,也就是通常我们说的“最后5条插入的记录”。
注意:如果表有过删除、移动记录(比如
ALTER TABLE MOVE)的操作,ROWID的顺序可能和插入顺序不一致,这时候这条SQL的结果就未必是实际最后插入的5条了。
内容的提问来源于stack exchange,提问作者Ameesha
相关产品推荐
相关产品推荐

