rowid 与 rownum ,视图与索引 ,表设计 ,DDL 和DML

本文详细介绍了Oracle数据库中rowid和rownum的概念及应用,展示了如何利用它们进行数据去重和分页操作。同时,讲解了视图的逻辑与物理视图的区别,强调其在数据封装、简化查询和提高复用性方面的作用。此外,还探讨了索引对查询性能的影响,并提供了创建和删除索引的示例。最后,讨论了表设计的三范式原则以及DDL(数据定义语言)中的创建、删除和修改表结构的操作,以及DML(数据管理语言)中的数据增删改操作。
摘要由CSDN通过智能技术生成

--rowid 与 rownum
--都做伪列存在
--rowid : 行记录的地址,行的唯一标识,数据插入到表中的是决定

--可以实现去重: 对没有主键|唯一字段的表中多条完全重复的数据,根据rowid实现去重
--去重: 如果表中存在主键或者唯一字段,直接 根据主键或者唯一字段去重

select rowid,rownum from dept;
/*
  insert into tb_student values(1,'张三','语文',81);
  insert into tb_student values(2,'张三','数学',75);
  insert into tb_student values(3,'李四','语文',81);
  insert into tb_student values(8,'李四','英语',90);
  insert into tb_student values(4,'李四','数学',90);
  insert into tb_student values(5,'王五','语文',81);
  insert into tb_student values(6,'王五','数学',100);
  insert into tb_student values(7,'王五','英语',90);
  commit;
*/
select id,name,course,score from  tb_student;

--查询到要保留的数据
select max(rowid) from tb_student group by id,name,course,score;  --要保留的8条数据的rowid
select *
  from tb_student
 where rowid in
       (select max(rowid) from tb_student group by id, name, course, score);

--查询到要删除的数据
select *
  from tb_student
 where not rowid in
       (select max(rowid) from tb_student group by id, name, course, score);

--删除这些数据
delete from tb_student
 where not
        rowid in
        (select max(rowid) from tb_student group by id, name, course, score);

--rownum 结果集的序号
--规律: 从1开始,每次+1
select * from (select empno,ename,job,mgr,rownum num from emp) where num >=5;

--一个select查询语句就有一个结果集,每一个结果集中数据都有自己的序号-->rownum
--注意: 当需要使用rownum进行一些判定,需要对一个已经确定的结果集的rownum进行判定

--rownum与排序: 
/*
      一般规律为:
              根据非主键字段排序,先确定rownum再排序
              根据主键字段排序,先排序,后确定rownum                                
*/
select empno,ename,sal,rownum from emp order by sal;
select deptno,dname,loc,rownum from dept order by deptno desc;

--如何实现在有排序存在的情况下,保证rownum是规律的,从小到大的
select empno,ename,sal,n,rownum num from (select empno,ename,sal,rownum n from emp order by sal);

--分页
select *
  from (select empno, ename, sal, rownum num
          from (select empno, ename, sal from emp order by sal))
 where num >= 7
   and num <= 9;

--真分页
--假分页

--视图与索引
--视图 : 表与结果集之间

--逻辑视图: 不会存储数据,数据来资源原始表结构,起到封装,简化,提高复用性的作用
--物理视图: 真实存储数据

--作用: sql语句的封装与简化,提高复用性,安全性

视图:建立在表|结果集|视图上的虚拟表,有以下作用

        1. 简化:select 查询语句

        2. 重用:封装select语句 命名

        3.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值