数据伪列

目录

数据伪列

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,job
  2  from emp;

    ROWNUM      EMPNO ENAME                JOB
---------- ---------- -------------------- ------------------
         1       7369 SMITH                CLERK
         2       7499 ALLEN                SALESMAN
         3       7521 WARD                 SALESMAN
         4       7566 JONES                MANAGER
         5       7654 MARTIN               SALESMAN
         6       7698 BLAKE                MANAGER
         7       7782 CLARK                MANAGER
         8       7839 KING                 PRESIDENT
         9       7844 TURNER               SALESMAN
        10       7900 JAMES                CLERK
        11       7902 FORD                 ANALYST

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

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

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

SQL> select rownum,empno,ename,job
  2  from emp
  3  where deptno=10;

    ROWNUM      EMPNO ENAME                JOB
---------- ---------- -------------------- ------------------
         1       7782 CLARK                MANAGER
         2       7839 KING                 PRESIDENT
         3       7934 MILLER               CLERK

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

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

取得第一行数据

取得前 N 行数据

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

SQL> select rownum,empno,ename,job
  2  from emp
  3  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,ename
  2  from emp
  3  where rownum<=5;

    ROWNUM      EMPNO ENAME
---------- ---------- --------------------
         1       7369 SMITH
         2       7499 ALLEN
         3       7521 WARD
         4       7566 JONES
         5       7654 MARTIN

 rowid

行 ID :rowid

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

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

SQL> select rowid,deptno,dname,loc
  2  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 YORK
        20 RESEARCH                     DALLAS
        30 SALES                        CHICAGO
        40 OPERATIONS                   BOSTON
        10 ACCOUNTING                   NEW YORK
        10 ACCOUNTING                   NEW YORK
        30 SALES                        CHICAGO
        20 RESEARCH                     DALLAS

已选择 8 行。

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

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

SQL> select rowid,deptno,dname,loc
  2  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 mydept
  3  group by deptno,dname,loc;

    DEPTNO DNAME                        LOC                        MIN(ROWID)
---------- ---------------------------- -------------------------- ------------------
        20 RESEARCH                     DALLAS                     AAAT6wAAHAAAAGLAAB
        10 ACCOUNTING                   NEW YORK                   AAAT6wAAHAAAAGLAAA
        30 SALES                        CHICAGO                    AAAT6wAAHAAAAGLAAC
        40 OPERATIONS                   BOSTON                     AAAT6wAAHAAAAGLAAD

可以看到每组中最小的 rowid

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图像检索与识别——词袋模型(Bag-of-features models)

一、定义 计算机视觉单词袋是一种描述计算图像之间相似度的技术&#xff0c;常用于用于图像分类当中。该方法起源于文本检索&#xff08;信息检索&#xff09;&#xff0c;是对NLP“单词袋”算法的扩展。在“单词袋”中&#xff0c;我们扫描整个文档&#xff0c;并保留文档中出…

Axure 入门文档 文件格式 全局样式 元件居中

文件格式 .rp 原型文件.rplib:元件库文件.rpteam 团队项目文件.html 项目网页文件 批量设置居中 选中多个&#xff0c;然后上方任务栏即可设置 设置自定义页面视图尺寸 项目-自适应视图设置 点击页面空白处就可以使用 添加元件说明 当一个元件创建好&#xff0c;可以设…

java spring 02. AbstractApplicationContext的refresh

spring创建对象的顺序&#xff0c;先创建beanfactory&#xff0c;再会把xml文件读取到spring。 public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, Nullable ApplicationContext parent)throws BeansException {//调用父类的构造方法super(p…

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

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

⭐每天一道leetcode:35.搜索插入位置(简单;二分速查)

⭐今日份题目 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例1 输入: nums [1,3,5,6], target 5 输出: 2 …

网络学习:Vlan间路由

目录 一、vlan间路由实现的方法 二、精确匹配转发&#xff08;交换机&#xff09;流程 三、最长匹配转发&#xff08;路由器&#xff09; 四、交换机最长匹配转发 五、总结 一、vlan间路由实现的方法 方法1&#xff1a;使用路由器的物理接口 特点&#xff1a;在路由器上…

ETAS工具链ISOLAR-AB重要概念,RTE配置,ECU抽取

RTE配置界面&#xff0c;包含ECU抽取关联 首次配置RTE&#xff0c;出现需要勾选的抽取EXTRACT 创建System System制作SWC到ECU的Mapping System制作System Data 的Mapping

Redis--线程模型详解

Redis线程模型 Redis内部使用的文件事件处理器&#xff08;基于Reactor模式开发的&#xff09;file event handler是单线程的&#xff0c;所以Redis线程模型才叫单线程模型&#xff0c;它采用IO多路复用机制同时监听多个socket&#xff0c;当被监听的socket准备好执行accep、r…

就业班 2401--3.6 Linux Day12--计划任务和邮件和ssh远程连接

一、计划任务 计划任务概念解析 在Linux操作系统中&#xff0c;除了用户即时执行的命令操作以外&#xff0c;还可以配置在指定的时间、指定的日期执行预先计划好的系统管理任务&#xff08;如定期备份、定期采集监测数据&#xff09;。RHEL6系统中默认已安装了at、crontab软件…

如何在控制台重新发送请求、修改请求参数

场景一&#xff1a;重新请求接口 - 鼠标右键点击请求&#xff0c;选择重放XHR - 可以看到重新发起了一次请求 注意&#xff1a;重放XHR不会重新渲染页面数据&#xff0c;只是单纯的请求接口 场景二&#xff1a;修改接口参数 - 右键鼠标右键点击接口、选择复制、选择以fetc…

Scrapy与分布式开发(3):Scrapy核心组件与运行机制

Scrapy核心组件与运行机制 引言 这一章开始讲解Scrapy核心组件的功能与作用&#xff0c;通过流程图了解整体的运行机制&#xff0c;然后了解它的安装与项目创建&#xff0c;为后续实战做好准备。 Scrapy定义 Scrapy是一个为了爬取网站数据、提取结构性数据而编写的应用框架…

【C++精简版回顾】20.模板的使用

1.模板起源 1.模板的定义 1.针对函数属性模板 //针对函数属性 template <class VOID > VOID print1(int a) {cout << a << endl; } 2.针对数据属性模板 //针对数据属性 template <typename INT,typename FLOAT> void print2(INT a,FLOAT b) {cout <…

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…

Tomcat基础与Nginx的动静分离

一、TOMCAT基础功能 &#xff08;一&#xff09;自动解压war包 在配置文件中讲到&#xff0c;当接受到请求后&#xff0c;会匹配符合要求的Host&#xff0c;在配置文件中的Host只有一个&#xff0c;且规定了自动解压war包 自动解压war包 .war&#xff1a;WebApp打包,类zip格…

领腾讯云红包,可抵扣云服务器订单金额

在2024年腾讯云新春采购节优惠活动上&#xff0c;可以领取新年惊喜红包&#xff0c;打开活动链接 https://curl.qcloud.com/oRMoSucP 会自动弹出红包领取窗口&#xff0c;如下图&#xff1a; 腾讯云2024新春采购节红包领取 如上图所示&#xff0c;点击“领”红包&#xff0c;每…

Matlab梁单元有限元编程 | 铁木辛柯梁 | 欧拉梁 | Matlab源码 | 理论文本

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

SPI 接口

SPI 接口 SPI 简介寻址方式通信过程极性和相位IIC 和 SPI 的异同相同点不同点 SPI 简介 SPI&#xff08;Serial Peripheral Interface&#xff09;是串行外设接口的缩写&#xff0c;SPI是一种高速的、全双工、同步的串行通信总线&#xff1b;SPI采用主从方式工作&#xff0c;一…

一篇了解电容的使用

目录 一、电容理论基础 1.电容的本质 2.电容量的大小 &#xff08;1&#xff09;电容的单位 &#xff08;2&#xff09;电容量的决定式 3.电容的特点 4.电容的串并联 5.电容器的类型 6.电容实际的电路模型 二、电容器的选型 1.安装方式 2.电容值 3.电容的类型 4…

【opencv】1基础知识

1.模块 2.应用 3.图像 注释&#xff1a;鲁棒性&#xff0c;也称健壮性、稳健性或强壮性&#xff0c;是指系统在异常和危险情况下生存的关键特性。 3.1 数字图像的定义&#xff1a; 数字图像作为2D图像&#xff0c;可以使用称为像素的有限数字集进行表示。 3.2 RGB模型&#…

AI学习集合-前瞻

AI学习前瞻 工作岗位 算法工程师机器学习工程师图像算法工程师ai工程师NLP高级算法工程师 学习路线 应用场景 计算机视觉技术应用场景 自然语言应用 AI流程 AI拟人流程 机器人历史数据经验模型规律依据模型预测未来依据规律做出判断 AI基本流程 术语所用到的技术手段数据数…