数据伪列

目录

数据伪列

rownum

查询 emp 表中的记录并且取得第一行数据

取得 emp 表的前 5 行记录

 rowid

 面试题:表中有许多完全重复的数据,要求将重复的数据删除掉(只剩最早的一个)


Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645

数据伪列

之前学习过 sysdate伪列

所谓的伪列指的是列本身虽然不存在,但是却可以进行使用的列

在 Oracle 里面有两个非常重要的伪列:rownum、rowid

rownum

行号:rownum

如果在开发中使用了 rownum,那么就会自动生成行号 

SQL> set linesize 250
SQL> select rownum,empno,ename,job2  from emp;ROWNUM      EMPNO ENAME                JOB
---------- ---------- -------------------- ------------------1       7369 SMITH                CLERK2       7499 ALLEN                SALESMAN3       7521 WARD                 SALESMAN4       7566 JONES                MANAGER5       7654 MARTIN               SALESMAN6       7698 BLAKE                MANAGER7       7782 CLARK                MANAGER8       7839 KING                 PRESIDENT9       7844 TURNER               SALESMAN10       7900 JAMES                CLERK11       7902 FORD                 ANALYST

 际上数据表 emp 并没有 rownum这个列,但是仍然显示出 rownum,它是一个伪列,只是使用它生成行号

另一方面,可以发现 rownum在每一行显示的时候都会自动增加一个行号,

但需要记住的是,rownum生成的行号不是固定的,而是动态计算得来的

SQL> select rownum,empno,ename,job2  from emp3  where deptno=10;ROWNUM      EMPNO ENAME                JOB
---------- ---------- -------------------- ------------------1       7782 CLARK                MANAGER2       7839 KING                 PRESIDENT3       7934 MILLER               CLERK

 此时,行号是根据查询结果动态计算出来的,所以每一个行号都不会与特定的记录捆绑

在实际的开发过程之中,rownum可以做两件事情

取得第一行数据

取得前 N 行数据

查询 emp 表中的记录并且取得第一行数据

SQL> select rownum,empno,ename,job2  from emp3  where deptno=10 and rownum=1;ROWNUM      EMPNO ENAME                JOB
---------- ---------- -------------------- ------------------1       7782 CLARK                MANAGER

rownum此时只能查询第一行的数据,如果把上面查询语句中“rownum=1”修改为“rownum=2”,则无法查询数据 

取得 emp 表的前 5 行记录

SQL> select rownum,empno,ename2  from emp3  where rownum<=5;ROWNUM      EMPNO ENAME
---------- ---------- --------------------1       7369 SMITH2       7499 ALLEN3       7521 WARD4       7566 JONES5       7654 MARTIN

 rowid

行 ID :rowid

rowid大部分情况下是在一些分析上使用的,而且在实际的开发过程中你也不会感受到 rowid存在

所谓的 rowid指的是每行数据提供的物理地址

SQL> select rowid,deptno,dname,loc2  from dept;ROWID                  DEPTNO DNAME                        LOC
------------------ ---------- ---------------------------- --------------------------
AAAR29AAHAAAAFcAAA         10 ACCOUNTING                   NEW YORK
AAAR29AAHAAAAFcAAB         20 RESEARCH                     DALLAS
AAAR29AAHAAAAFcAAC         30 SALES                        CHICAGO
AAAR29AAHAAAAFcAAD         40 OPERATIONS                   BOSTON

 现在分析一下 rowid的组成,以“AAAR29AAHAAAAFcAAA”这个数据为例

数据对象编号:AAAR29

数据文件编号:AAH

数据保存的块号:AAAAFc

数据保存的行号:AAA

 面试题:表中有许多完全重复的数据,要求将重复的数据删除掉(只剩最早的一个)

 现在将 dept 表复制为 mydept

SQL> create table mydept as select * from dept;表已创建。

有一张 mydept 表,由于疏于管理,导致表中出现了许多重复的内容,并且这些内容还是全都重复

INSERT INTO mydept(deptno,dname,loc) VALUES (10,'ACCOUNTING','NEW YORK') ;
INSERT INTO mydept(deptno,dname,loc) VALUES (10,'ACCOUNTING','NEW YORK') ;
INSERT INTO mydept(deptno,dname,loc) VALUES (30,'SALES','CHICAGO') ;
INSERT INTO mydept(deptno,dname,loc) VALUES (20,'RESEARCH','DALLAS') ;
SQL> INSERT INTO mydept(deptno,dname,loc) VALUES (10,'ACCOUNTING','NEW YORK') ;已创建 1 行。SQL> INSERT INTO mydept(deptno,dname,loc) VALUES (10,'ACCOUNTING','NEW YORK') ;已创建 1 行。SQL> INSERT INTO mydept(deptno,dname,loc) VALUES (30,'SALES','CHICAGO') ;已创建 1 行。SQL> INSERT INTO mydept(deptno,dname,loc) VALUES (20,'RESEARCH','DALLAS') ;已创建 1 行。
SQL> select *2  from mydept;DEPTNO DNAME                        LOC
---------- ---------------------------- --------------------------10 ACCOUNTING                   NEW YORK20 RESEARCH                     DALLAS30 SALES                        CHICAGO40 OPERATIONS                   BOSTON10 ACCOUNTING                   NEW YORK10 ACCOUNTING                   NEW YORK30 SALES                        CHICAGO20 RESEARCH                     DALLAS已选择 8 行。

现在的问题是表中的数据列的信息几乎都是一样的,所以如果按照已有的字段删除,那么最终的结果是都会被删除掉

即便数据重复了,在 Oracle 里面存在一个 rowid,它的物理保存地址也是不可能重复的

SQL> select rowid,deptno,dname,loc2  from mydept;ROWID                  DEPTNO DNAME                        LOC
------------------ ---------- ---------------------------- --------------------------
AAAT6wAAHAAAAGLAAA         10 ACCOUNTING                   NEW YORK
AAAT6wAAHAAAAGLAAB         20 RESEARCH                     DALLAS
AAAT6wAAHAAAAGLAAC         30 SALES                        CHICAGO
AAAT6wAAHAAAAGLAAD         40 OPERATIONS                   BOSTON
AAAT6wAAHAAAAGPAAA         10 ACCOUNTING                   NEW YORK
AAAT6wAAHAAAAGPAAB         10 ACCOUNTING                   NEW YORK
AAAT6wAAHAAAAGPAAC         30 SALES                        CHICAGO
AAAT6wAAHAAAAGPAAD         20 RESEARCH                     DALLAS已选择 8 行。

我们可以使用下面的代码删除其中重复的语句

SQL> delete from mydept where rowid='AAAT6wAAHAAAAGPAAA';已删除 1 行。

只需替换上面代码中要删除的 rowid记录即可。最终清除完无用数据的结果

SQL> SELECT ROWID,deptno,dname,loc FROM mydept ;ROWID                  DEPTNO DNAME                        LOC
------------------ ---------- ---------------------------- --------------------------
AAAT6wAAHAAAAGLAAA         10 ACCOUNTING                   NEW YORK
AAAT6wAAHAAAAGLAAB         20 RESEARCH                     DALLAS
AAAT6wAAHAAAAGLAAC         30 SALES                        CHICAGO
AAAT6wAAHAAAAGLAAD         40 OPERATIONS                   BOSTON

但是如果数据表中重复的数据太多,使用上面介绍的方法就不行了

此时,考虑到在程序中都会涉及累加的操作,所以理论上来说,最早保存数据的 rowid内容应该是最小的

如果要想确认最小,可以使用 min() 函数

现在 mydept 表中的数据有重复,那么可以采用分组,按照重复内容分组之后统计出最小的rowid(最早的 rowid)

SQL> select deptno,dname,loc,min(rowid)2  from mydept3  group by deptno,dname,loc;DEPTNO DNAME                        LOC                        MIN(ROWID)
---------- ---------------------------- -------------------------- ------------------20 RESEARCH                     DALLAS                     AAAT6wAAHAAAAGLAAB10 ACCOUNTING                   NEW YORK                   AAAT6wAAHAAAAGLAAA30 SALES                        CHICAGO                    AAAT6wAAHAAAAGLAAC40 OPERATIONS                   BOSTON                     AAAT6wAAHAAAAGLAAD

可以看到每组中最小的 rowid

查询返回了所有需要保留的数据,那么所有不需要保留的数据就可以删除了

SQL> delete from mydept where rowid not in(2  select min(rowid)3  from mydept4  group by deptno,dname,loc);

不过这样的操作只是一个使用说明,在以后讲解索引的时候会讲到 rowid 更多的使用情况

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/725054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Guava处理异常

guava由Google开发&#xff0c;它提供了大量的核心Java库&#xff0c;例如&#xff1a;集合、缓存、原生类型支持、并发库、通用注解、字符串处理和I/O操作等。 异常处理 传统的Java异常处理通常包括try-catch-finally块和throws关键字。 遇到FileNotFoundException或IOExce…

嵌入式蓝桥杯做题总结

第十二届省赛 按键代码 ——自认为比较巧妙&#xff0c;定时器3被设置为10ms进入一次中断&#xff0c;代替了HAL_Delay(10)的方法消抖&#xff1b; 运用状态机机思想实现检测多个按键检测——且分为两个状态&#xff0c;其中一个状态PB&#xff11;和PB&#xff12;的按键不…

stable-diffusion-webui-forge 介绍,安装,运行

一 stable-diffusion-webui-forge 介绍 stable-diffusion-webui-forge 的作用和stable-diffusion-webui一样&#xff0c;但性能上作了优化&#xff0c;说得上是是stable-diffusion-webui优化版&#xff0c;本人在使用stable-diffusion-webui时偶尔会有内存不够报错。本人的环境…

手写分布式配置中心(四)增加实时刷新功能(长轮询)

上一篇文章中实现了短轮询&#xff0c;不过短轮询的弊端也很明显&#xff0c;如果请求的频率较高&#xff0c;那么就会导致服务端压力大&#xff08;并发高&#xff09;&#xff1b;如果请求的频率放低&#xff0c;那么客户端感知变更的及时性就会降低。所以我们来看另一种轮询…

Mysql面试总结

基础 1. 数据库的三范式是什么&#xff1f; 第一范式&#xff1a;强调的是列的原子性&#xff0c;即数据库表的每一列都是不可分割的原子数据项。第二范式&#xff1a;要求实体的属性完全依赖于主关键字。所谓完全 依赖是指不能存在仅依赖主关键字一部分的属性。第三范式&…

UDP通信发送和接收 || UDP实现全双工通信

recvfrom ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen); 功能: 从套接字中接收数据 参数: sockfd:套接字文件描述符 buf:存放数据空间首地址 …

基于springboot实现的幼儿园管理系统

一、系统架构 前端&#xff1a;html | layui | jquery | css 后端&#xff1a;springboot | mybatis 环境&#xff1a;jdk1.8 | mysql | maven 二、代码及数据库 三、功能介绍 01. 登录页 02. 系统管理-用户管理 03. 系统管理-页面管理 04. 系统管理-角色管…

win11配置Mask DINO小白踩坑记录

win11配置Mask DINO踩坑记录 1 准备工作2 创建python环境和安装detectron22.1 安装前提2.2 安装流程2.2.1 cl.exe的错误2.2.2 SetuptoolsDeprecationWarning的错误 3 MaskDINO运行3.1 运行demo 前情提要&#xff1a;需要复现Mask DINO&#xff0c;但是实验室没有Linux的电脑&am…

keycloak18.0.0==本地源码启动

github下载源码&#xff0c; 版本18.0.0 java和maven的版本如下 E:\keycloak-18.0.0>java -version java version "21.0.1" 2023-10-17 LTS Java(TM) SE Runtime Environment (build 21.0.112-LTS-29) Java HotSpot(TM) 64-Bit Server VM (build 21.0.112-LTS-…

【网站项目】308学生档案管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

Spring Webflux 详解

目录 0、组件对比 1、WebFlux 1、引入 2、Reactor Core 1、HttpHandler、HttpServer 3、DispatcherHandler 1、请求处理流程 4、注解开发 1、目标方法传参 2.返回值写法 5、文件上传 6、错误处理 7、RequestContext 8、自定义Flux配置 9、Filter WebFlux&am…

Linux 之二:CentOS7 的 IP 常用命令和配置及 xshell 基本使用方法

1. 进入虚拟机 点击右键---进入终端--输入 ip adrr 或 ifconfig 查看ip地址 下面输入命令 ifconfig&#xff08;注意&#xff1a;不是 ipconfig &#xff09; 或 ip addr 来查看当前系统 IP 查看到IP 后&#xff0c;比如&#xff1a;上面是 192.168.184.137 1.1 IP 常用命令…

LeetCode142题:环形链表II(python3)

代码思路&#xff1a; 双指针的第一次相遇&#xff1a; 设两指针 fast&#xff0c;slow 指向链表头部 head 。 令 fast 每轮走 2 步&#xff0c;slow 每轮走 1 步。 fast 指针走过链表末端&#xff0c;说明链表无环&#xff0c;此时直接返回 null。 如果链表存在环&#xff0c;…

web学习笔记(二十六)

目录 1.JS执行队列 1.1JS是单线程 1.2Web Worker 1.3同步和异步 1.4JS执行机制 2.location对象 2.1什么是location对象 2.2url包含的信息 2.3location对象属性 2.4location对象的方法 3.navigator对象和history对象 3.1navigator对象 3.2history对象 1.JS执行队…

初识JS

目录 javascript的作用: 浏览器如何执行JS代码&#xff1a; JS的三部分组成&#xff1a; ECMAScript: DOM: BOM: JS的三种书写导入方式&#xff1a; JS注释&#xff1a; JS的输入输出语句&#xff1a; JS变量,数据&#xff1a; 变量的使用&#xff1a; 声明变量&…

嵌入式学习第二十五天!(网络的概念)

网络&#xff1a; 可以用来&#xff1a;数据传输、数据共享 1. 网络协议模型&#xff1a; 1. OSI协议模型&#xff1a; 应用层实际收发的数据表示层发送的数据是否加密会话层是否建立会话连接传输层数据传输的方式&#xff08;数据包&#xff0c;流式&#xff09;网络层数据的…

Vue+SpringBoot打造医院门诊预约挂号系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 功能性需求2.1.1 数据中心模块2.1.2 科室医生档案模块2.1.3 预约挂号模块2.1.4 医院时政模块 2.2 可行性分析2.2.1 可靠性2.2.2 易用性2.2.3 维护性 三、数据库设计3.1 用户表3.2 科室档案表3.3 医生档案表3.4 医生放号…

SpringCloud Alibaba 学习

一&#xff1a;SpringCloud Alibaba介绍 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服 务的必需组件&#xff0c;方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。 依托 Spring Cloud Alibaba&…

JavaScript实现点击鼠标弹钢琴的效果

思路&#xff1a; 图片设置宽900px&#xff0c;找到鼠标按下时的x坐标和img距离body的x坐标&#xff0c;两个值相减&#xff0c;然后除100取整&#xff0c;赋值给a&#xff0c;通过判断a的值来确定放出那个音乐。 完整代码&#xff1a; <!DOCTYPE html> <html lan…

MQTT连接阿里云物联网上报物模型数据

目录 1. 创建产品&#xff08;物联网平台 -> 产品 -> 创建产品&#xff09; 2. 为产品添加设备 3. 添加物模型 4. mqtt.fx连接测试 5. 调试物模型 6. 使用mqtt.fx上报温度数据 1. 创建产品&#xff08;物联网平台 -> 产品 -> 创建产品&#xff09; 我这里再新…