但行好事
莫论前程❤

数据库操作—-去重方法汇总

数据库的去重操作(删除数据库中的重复数据的sql语句)主要由三种方法:

  • rowid 方法
  • group by 方法
  • distinct 方法

一、 用rowid方法

根据Oracle自带的rowid属性,可以进行判断是否存在重复语句:

(1)、查询表1和表2中name相同的数据

select * from table1 a where rowid !=(select max(rowid) from table2 b 
                                      where a.name1 = b.name1 and
                                     a.name2 = b.name2 ...);

Oracle中的rowid

​ ROWID是ORACLE中的一个重要的概念。用于定位数据库中一条记录的一个相对唯一地址值。通常情况下,该值在该行数据插入到数据库表时即被确定且唯一。ROWID它是一个伪列,它并不实际存在于表中。它是ORACLE在读取表中数据行时,根据每一行数据的物理地址信息编码而成的一个伪列。所以根据一行数据的ROWID能找到一行数据的物理地址信息。从而快速地定位到数据行。数据库的大多数操作都是通过ROWID来完成的,而且使用ROWID来进行单记录定位速度是最快的。

(2)、删除表1和表2中name相同的数据

delete from table1 a where rowid != (select max(rowid) from table2 b 
                                     where a.name1 = b.name1 
                                     and a.name2 = b.name2 ...)

二、用group by 方法

主要用于分组统计,一般都是在聚合函数中使用:

(1) 查数据

  • 列出学生信息表中重复的记录数和学生名字的属性,并按照num分组找出表中num列中出现次数大于1的
select count(num),max(name) from student group by num having count(num) > 1   

(2) 删数据

  • 删除表中num列所有重复的数据
delete from student group by num having count(num) > 1
拓展

group by分组后的条件使用 HAVING 来限定,WHERE 是对原始数据进行条件限制。几个关键字的使用顺序为 where 、group by 、having、order by ,例如:

SELECT name ,sum(*)  FROM table1 WHERE id<>1 GROUP BY name  HAVING sum(*) > 5  ORDER BY sum(*) DESC;

三、 用 distinct 方法

  • 一般用于比较小的表进行去重,会过滤掉多余的重复记录,返回不重复的记录或字段;
select distinct name from student;
赞(1) 打赏
未经允许不得转载:刘鹏博客 » 数据库操作—-去重方法汇总
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏