查询Oracle中的重复数据(查询oracle重复数据)
大部分数据库管理系统,如Oracle,MySQL中都存在重复数据。如果存在大量重复记录,会降低数据库的性能,影响数据安全,增加数据库的管理难度,所以有必要对数据库进行清理,删除无用的重复数据,查询Oracle中的重复数据就显得尤为重要。
在查询Oracle中的重复数据,可以使用一些传统的sql语法,也可以引入窗口函数,以下是常用的查询方式:
1. 使用rowid和group by查询
rowid能够储存每一行记录的物理地址,我们可以使用group by进行查询,获取重复出现次数大于1的记录:
例如:
SELECT name, count(*) cnt
FROM table_name
GROUP BY ROWID HAVING COUNT(*) > 1;
2. 使用analytic查询
下面使用analytic函数,查询出现重复次数大于1的记录:
例如:
SELECT name, count(*) cnt
FROM table_name t
WHERE rowid ALL
(
SELECT rowid FROM
( SELECT rowid FROM table_name
GROUP BY name,rowid HAVING count(*)>1
)
)
GROUP BY name;
3.通过子查询查询
(1)找出重复记录
SELECT *
FROM table_name
WHERE name IN
(SELECT name FROM table_name
GROUP BY name
HAVING COUNT(*) > 1)
后面的查询结果中,可以看到有记录重复出现。
(2)找出未重复记录
SELECT *
FROM table_name
WHERE ROWID NOT IN
(SELECT ROWID FROM table_name
GROUP BY name,rowid
HAVING COUNT(*)>1)
最后,要提醒的是,Oracle的查询和删除任务都要慎重进行, 要三思而后行,以免误删有用的记录。