㈠ oracle資料庫中怎樣刪除一個表的重復數據
這個問題就是要刪除表中重復的記錄,查詢的sql語句如下:x0dx0aselect id,name from (x0dx0aselect id,name,row_numer() over(partition by id,name order by id,name) rn from tableA)x0dx0awhere rn>1;x0dx0a刪除的sql語句如下:x0dx0aDELETE tableA WHERE ROWNUM = (SELECT ROWNUMx0dx0a FROM (SELECT id,name,x0dx0a ROW_NUMBER() OVER(PARTITION BY id,name ORDER BY id,name) RNx0dx0a FROM tableA )x0dx0a WHERE RN > 1);
㈡ oracle資料庫刪除數據Delete語句和Truncate語句的使用比較
當表中的數據不需要時 則應該刪除該數據並釋放所佔用的空間 刪除表中的數據可以使用Delete語句或者Truncate語句 下面分別介紹 一 delete語句 ( )有條件刪除 語法格式 delete [from] table_name [where condition]; 如 刪除users表中的userid為 的數據 delete from users where userid= ; ( )無條件刪除整個表數據 語法格式 delete table_name; 如 刪除user表中的所有數據 delete users ; 二 Truncate語句 使用Truncate語句是刪除表中的所有記錄 語法格式 Truncate [table] table_name; ( )刪除所有記錄不保留記錄佔用空間 Truncate [table] table_name [drop storage]; 如 刪除users表中的所有數據並不保存佔用空間 Truncate table users drop storage; 由於默認使用drop storage關鍵字 所以可以省略 drop storage; ( )刪除所有記錄保留記錄佔用空間 Truncate [table] table_name [reuse storage]; 如 刪除users表中的所有數據並保存佔用空間 Truncate table users reuse storage; 三 兩種刪除語句的對比 由於delete語句刪除記錄時候 記錄是逐條刪除的 而Truncate 語句刪除數據時不產生回退信息 所以如果需要刪除大量數據的時候使用delete則佔用較多的系統資源 而如果使用Truncate 則會快的多 下面通過實例說明一下 首先建立user表 create table users ( userid varchar ( ) username varchar ( ) userpass varchar ( ) );復制代碼 接著插入一條數據 insert into users values( GavinDream ); 使用復制插入方法插入幾萬條數據 insert into users(userid username userpass) select * from users;我插入了 條數據 使用delete刪除花費時間為 seconds 然後又插入了二倍的數據 但使用truncate花費時間僅僅為 seconds 如下圖所示 lishixin/Article/program/Oracle/201405/30860
㈢ oracle中刪除數據表中記錄的命令是
刪除一條或多條可以用delete語句,全部刪除用truncate table語句。
㈣ 教你刪除Oracle資料庫中重復沒用的數據
在對資料庫進行操作過程中我們可能會碰到這種情況 表中的數據可能重復出現 使我們對資料庫的操作過程中帶來很多的不便 那麼怎麼刪除這些重復沒有用的數據呢?
重復數據刪除技術可以提供更大的備份容量 實現更長時間的數據保留 還能實現備份數據的持續驗證 進步數據恢復服務水平 方便實現數據容災等 重復的數據可能有這樣兩種情況 第一種時表中只有某些欄位一樣 第二種是兩行記錄完全一樣 Oracle資料庫重復數據刪除技術有如下優勢 更大的備份容量 數據能得到持續驗證 有更高的數據恢復服務水平 方便實現備份數據的容災
一 刪除部分欄位重復數據
先來談談如何查詢重復的數據吧
下面語句可以查詢出那些數據是重復的
select 欄位 欄位 count(*) from 表名 group by 欄位 欄位 having count(*) >
將上面的>號改為=號就可以查詢出沒有重復的數據了
想要刪除這些重復的數據 可以使用下面語句進行刪除
delete from 表名 a where 欄位 欄位 in
(select 欄位 欄位 count(*) from 表名 group by 欄位 欄位 having count(*) > )
上面的語句非常簡單 就是將查詢到的數據刪除掉 不過這種刪除執行的效率非常低 對於大數據量來說 可能會將資料庫弔死 所以我建議先將查詢到的重復的數據插入到一個暫時表中 然後對進行刪除 這樣 執行刪除的時候就不用再進行一次查詢了 如下
create TABLE 暫時表 AS
(select 欄位 欄位 count(*) from 表名 group by 欄位 欄位 having count(*) > )
上面這句話就是建立了暫時表 並將查詢到的數據插入其中
下面就可以進行這樣的刪除操作了
delete from 表名 a where 欄位 欄位 in (select 欄位 欄位 from 暫時表);
這種先建暫時表再進行刪除的操作要比直接用一條語句進行刪除要高效得多
這個時候 大家可能會跳出來說 什麼?你叫我們執行這種語句 那不是把所有重復的全都刪除嗎?而我們想保留重復數據中最新的一條記錄啊!大家不要急 下面我就講一下如何進行這種操作
在oracle中 有個隱藏了自動rowid 裡面給每條記錄一個唯一的rowid 我們假如想保留最新的一條記錄
我們就可以利用這個欄位 保留重復數據中rowid最大的一條記錄就可以了
下面是查詢重復數據的一個例子
以下是引用片段 selecta rowid a *from表名awherea rowid!=(selectmax(b rowid)from表名bwherea 欄位 =b 欄位 anda 欄位 =b 欄位 )
下面我就來講解一下 上面括弧中的語句是查詢出重復數據中rowid最大的一條記錄
而外面就是查詢出除了rowid最大之外的其他重復的數據了
由此 我們要刪除重復數據 只保留最新的一條數據 就可以這樣寫了
deletefrom表名awherea rowid!=(selectmax(b rowid)from表名bwherea 欄位 =b 欄位 anda 欄位 =b 欄位 )
隨便說一下 上面語句的執行效率是很低的 可以考慮建立暫時表 講需要判定重復的欄位 rowid插入暫時表中 然後刪除的時候在進行比較
createtable暫時表asselecta 欄位 a 欄位 MAX(a ROWID)dataidfrom正式表aGROUPBYa 欄位 a 欄位 ;deletefrom表名awherea rowid!=(selectb dataidfrom暫時表bwherea 欄位 =b 欄位 anda 欄位 =b 欄位 );mit;
二 完全刪除重復記錄
對於表中兩行記錄完全一樣的情況 可以用下面語句獲取到去掉重復數據後的記錄
select distinct * from 表名
可以將查詢的記錄放到暫時表中 然後再將原來的表記錄刪除 最初將暫時表的數據導回原來的表中 如下
createTABLE暫時表AS(selectdistinct*from表名);truncatetable正式表; 注 原先由於筆誤寫成了droptable正式表; 現在已經改正過來insertinto正式表(select*from暫時表);droptable暫時表;
假如想刪除一個表的重復數據 可以先建一個暫時表 將去掉重復數據後的數據導入到暫時表 然後在從暫時表將數據導入正式表中 如下
insertINTOt_table_bakselectdistinct*fromt_table;
三 怎樣快速刪除oracle資料庫
最快的方法就進入注冊表 在運行 里輸入regedit
依次展開HKEY_LOCAL_MACHINE SOFARE
找到ORACLE節點 刪除
然後刪除ORACLE數據文件 安裝的時候選的路徑
lishixin/Article/program/Oracle/201311/18677
㈤ 如何刪除Oracle中的重復記錄 4種方法來刪除Oracle中的重復記錄
目錄方法1:查詢重復記錄1、查詢重復記錄。2、從名為"Names"的列中查詢重復記錄。3、從其他列中查詢重復記錄。方法2:刪除單個重復記錄1、Sele2、刪除所有有重復名稱的行。3、重新輸入沒有重復記錄的行。4、查看新列表。方法3:刪除多個重復記錄1、選擇要刪除的RowID。2、刪除重復記錄。3、檢查重復記錄。方法4:刪除包含指定列的行1、選擇行。2、通過查詢每行的列來刪除重復行。3、查看重復記錄。當你使用Oracle時,可能會發現有重復記錄。你可以通過查詢重復行、使用其RowID,或者行地址來刪除它們。在開始之前,你應該創建一個備份表,以防在刪除記錄之後需要引用它們。
方法1:查詢重復記錄
1、查詢重復記錄。在本例中,查詢示例重復記錄"Alan"。通過輸入下面的SQL,確保要刪除的記錄確實是重復的。
2、從名為"Names"的列中查詢重復記錄。在本例中,列名為"Names",你要用Names來替換"column_name"。
3、從其他列中查詢重復記錄。如果你嘗試從其他列中查詢重復記錄,比如Alan的年齡,而不是他的名字,那麼你需要在"column_name"這個地方輸入"Ages",以此類推。
select column_name, count(column_name) from table group by column_namehaving count (column_name) > 1;
方法2:刪除單個重復記錄
1、Select "name from names."在"SQL(結構化查詢語言)"後輸入"select name from names."
2、刪除所有有重復名稱的行。在"SQL,"後輸入"delete from names where name='Alan'"。注意,字母大寫很重要,這樣就可以刪除所有名為"Alan"的行。在"SQL"後輸入"commit"。
3、重新輸入沒有重復記錄的行。現在已經刪除了所有名為"Alan"的行,可以通過輸入"insert into name values ('Alan');"來插入一條記錄。在"SQL"後輸入"commit",創建新行。
4、查看新列表。當你完成上述步驟後,通過輸入"select * from names"檢查一下,確保沒有重復記錄。
SQL > select name from names;NAME------------------------------AlanCarrieTomAlanrows selected.SQL > delete from names where name='Alan'rows deleted.SQL > commit;Commit complete.SQL > insert into names values ('Alan');row created.SQL > commit;Commit complete.SQL > select * from names;NAME------------------------------AlanCarrieTomrows selected.
方法3:刪除多個重復記錄
1、選擇要刪除的RowID。在"SQL"後輸入"select rowid, name from names;"。
2、刪除重復記錄。在"SQL"後輸入"delete from names a where rowid > (select min(rowid) from names b where b.name=a.name);"來刪除重復記錄。
3、檢查重復記錄。完成上述操作後,輸入"select rowid,name from names;",然後輸入"commit",檢查是否仍然存在重復記錄。
SQL > select rowid,name from names;ROWID NAME------------------ ------------------------------AABJnsAAGAAAdfOAAA AlanAABJnsAAGAAAdfOAAB AlanAABJnsAAGAAAdfOAAC CarrieAABJnsAAGAAAdfOAAD TomAABJnsAAGAAAdfOAAF Alanrows selected.SQL > delete from names awhere rowid > (select min(rowid) from names bwhere b.name=a.name);rows deleted.SQL > select rowid,name from names;ROWID NAME------------------ ------------------------------AABJnsAAGAAAdfOAAA AlanAABJnsAAGAAAdfOAAC CarrieAABJnsAAGAAAdfOAAD Tomrows selected.SQL > commit;Commit complete.
方法4:刪除包含指定列的行
1、選擇行。在"SQL"後輸入"select * from names;"來查看行。
2、通過查詢每行的列來刪除重復行。在"SQL"後輸入"delete from names a where rowid > (select min(rowid) from names b where b.name=a.name and b.age=a.age);"來刪除重復記錄。
3、查看重復記錄。完成上述步驟後,輸入"select * from names;",然後輸入"commit",以檢查是否成功刪除了重復記錄。
SQL > select * from names;NAMEAGE------------------------------ ----------Alan50Carrie51Tom52Alan50rows selected.SQL > delete from names awhere rowid > (select min(rowid) from names bwhere b.name=a.nameand b.age=a.age);row deleted.SQL > select * from names;NAMEAGE------------------------------ ----------Alan50Carrie51Tom52rows selected.SQL > commit;Commit complete.
警告登錄自己的賬號後創建一個備份表,這樣可以用來顯示進行任何刪除之前的內容(防止出現任何問題)。
SQL > create table alan.names_backup as select * from names;Table created.
㈥ oracle 如何刪除一行數據
方法1、sql:deletefrom資料庫.表名whereid='1'
講解:如果不用跨庫,可以省略「資料庫」。1代表唯一的一條記錄,是參數。如果省略where,則刪除所有記錄,如果指定where,則刪除指定滿足條件的記錄。
方法2、PL/SQLDev的話有個簡單的方法:首先,用select...forupdate語句查出結果,然後,開鎖,用和滑鼠選中你要刪除的一行,最後,選擇「-」,提交就OK了。
㈦ 如何刪除oracle資料庫中的重復記錄
查詢及刪除重復記錄的SQL語句
1、查找表中多餘的重復記錄,重復記錄是根據單個欄位(Id)來判斷 ;
select * from 表 where Id in (select Id from 表 group byId having count(Id) > 1)
2、刪除表中多餘的重復記錄,重復記錄是根據單個欄位(Id)來判斷,只留有rowid最小的記錄;
DELETE from 表 WHERE (id) IN ( SELECT id FROM 表 GROUP BY id HAVING COUNT(id) > 1) AND ROWID NOT IN (SELECT MIN(ROWID) FROM 表 GROUP BY id HAVING COUNT(*) > 1);
3、查找表中多餘的重復記錄(多個欄位);
select * from 表 a where (a.Id,a.seq) in(select Id,seq from 表 group by Id,seq having count(*) > 1)
4、刪除表中多餘的重復記錄(多個欄位),只留有rowid最小的記錄;
delete from 表 a where (a.Id,a.seq) in (select Id,seq from 表 group by Id,seq having count(*) > 1) and rowid not in (select min(rowid) from 表 group by Id,seq having count(*)>1)
5、查找表中多餘的重復記錄(多個欄位),不包含rowid最小的記錄;
select * from 表 a where (a.Id,a.seq) in (select Id,seq from 表 group by Id,seq having count(*) > 1) and rowid not in (select min(rowid) from 表 group by Id,seq having count(*)>1)