-- 穿件 PERSON 表
create table PERSON
(
p_id NUMBER not null,
p_name NVARCHAR2(50),
p_cardid NVARCHAR2(50),
p_address NVARCHAR2(100)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Add comments to the columns
comment on column PERSON.p_id
is '人員表ID';
comment on column PERSON.p_name
is '人員表姓名';
comment on column PERSON.p_cardid
is '人員表身份證號';
comment on column PERSON.p_address
is '人員表地址';
-- Create/Recreate primary, unique and foreign key constraints
alter table PERSON
add constraint P_ID_PRIMARY primary key (P_ID)
using index
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
Select t.*, t.Rowid From Person t;
----1、往PERSON表插入數據----
Insert Into Person Values (6, 'Tom', '130132198902045358', '北京市海淀區長春橋路五號新起點嘉園4號樓906室');
Insert Into Person Values (7, 'jerry', '130132198905085469', '北京市、海淀區、蘇州街、3號、大恆科技大廈1008');
Insert Into Person Values (8, 'jerry', '130132198905085469', '北京市、海淀區、蘇州街、3號、大恆科技大廈1008');
----2、SQL查詢PERSON表重複記錄---------
Select P1.*
From Person P1, Person P2
Where P1.p_Id <> P2.p_Id And P1.p_Cardid = P2.p_Cardid And P1.p_Name = P2.p_Name And P1.p_Address = P2.p_Address;
----刪除重複記錄的SQL語句----
----1.用rowid方法----
----2.用group by方法----
----3.用distinct方法----
----1。用rowid方法----
----據據oracle帶的rowid屬性,進行判斷,是否存在重複,語句如下:----
----查數據: ----
Select *
From Person a
Where Rowid != (Select Max(Rowid)
From Person b
Where a.p_Cardid = b.p_Cardid And a.p_Name = b.p_Name And a.p_Address = b.p_Address);
----刪數據:----
Delete From Person a
Where Rowid != (Select Max(Rowid)
From Person b
Where a.p_Cardid = b.p_Cardid And a.p_Name = b.p_Name And a.p_Address = b.p_Address);
----2.group by方法----
----查數據:----
Select Count(p_Cardid), Max(p_Name)
From Person --列出重複的記錄數,並列出他的name屬性
Group By p_Cardid
Having Count(p_Cardid) > 1; --按num分組後找出表中num列重複,即出現次數大於一次
----刪數據:----
DELETE from Person
group by p_Cardid
having count(p_Cardid ) >1
----這樣的話就把所有重複的都刪除了。----
----3.用distinct方法 -對於小的表比較有用----
create table Person_new as select distinct * from Person minux
truncate table Person;
insert into Person select * from Person_new;
----查詢及刪除重複記錄的方法大全----
----1、查找表中多餘的重複記錄,重複記錄是根據單個字段(peopleId)來判斷----
select * from Person
where p_Cardid in (select p_Cardid from Person group by p_Cardid having count(p_Cardid) > 1)
----2、刪除表中多餘的重複記錄,重複記錄是根據單個字段(peopleId)來判斷,只留有rowid最小的記錄----
delete from Person
where p_Cardid in (select p_Cardid from Person group by p_Cardid having count(p_Cardid) > 1)
and rowid not in (select min(rowid) from Person group by p_Cardid having count(p_Cardid )>1)
----3、查找表中多餘的重複記錄(多個字段)----
select * from Person a
where (a.p_Cardid,a.p_Name) in (select p_Cardid,p_Name from Person group by p_Cardid,p_Name having count(*) > 1)
----4、刪除表中多餘的重複記錄(多個字段),只留有rowid最小的記錄----
DELETE * from Person a
where (a.p_Cardid,a.p_Name) in (select p_Cardid,p_Name from Person group by p_Cardid,p_Name having count(*) > 1)
and rowid not in (select min(rowid) from Person group by p_Cardid,p_Name having count(*)>1)
----5、查找表中多餘的重複記錄(多個字段),不包含rowid最小的記錄----
select * from Person a
where (a.p_Cardid,a.p_Name) in (select p_Cardid,p_Name from Person group by p_Cardid,p_Name having count(*) > 1)
and rowid not in (select min(rowid) from Person group by p_Cardid,p_Name having count(*)>1)
----(二) 比方說 在A表中存在一個字段“name”,----
----而且不同記錄之間的“name”值有可能會相同,----
----現在就是需要查詢出在該表中的各記錄之間,“name”值存在重複的項;----
Select p_Name,Count(*) From Person Group By p_Name Having Count(*) > 1
----如果還查性別也相同大則如下: ----
Select p_Cardid,p_Name,Count(*) From Person Group By p_Cardid,p_Name Having Count(*) > 1
----方法二----
----"重複記錄"有兩個意義上的重複記錄,一是完全重複的記錄,也即所有字段均重複的記錄,二是部分關鍵字段重複的記錄,比如Name字段重複,而其他字段不一定重複或都重複可以忽略。----
----1、對於第一種重複,比較容易解決,使用----
select distinct * from Person
----就可以得到無重複記錄的結果集。----