新聞中心
MySQL是一個(gè)開源的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),廣泛應(yīng)用于各種應(yīng)用場(chǎng)景中。在使用MySQL時(shí),我們經(jīng)常需要?jiǎng)h除一些數(shù)據(jù),而其中not in語(yǔ)句是一個(gè)非常有用的工具,可以幫助我們快速、方便地刪除無用的數(shù)據(jù)。本文將為你詳細(xì)介紹MySQL刪除not in語(yǔ)句的使用方法。

10年積累的成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有涿州免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
一、not in語(yǔ)句的定義
not in語(yǔ)句是MySQL中的一種條件語(yǔ)句,用于指定SQL查詢時(shí)返回值中不包含某些值。
語(yǔ)法格式如下:
“` SQL
SELECT column_name(s)
FROM table_name
WHERE column_name NOT IN (value1, value2, …);
“`
其中column_name指需要查詢的列,table_name指需要查詢的表,NOT IN表示返回不包含括號(hào)中指定值的所有行。
二、not in語(yǔ)句的使用場(chǎng)景
not in語(yǔ)句可以應(yīng)用于各種場(chǎng)景,例如:
1. 待刪除的數(shù)據(jù)不在指定范圍內(nèi):可以使用not in語(yǔ)句對(duì)需要?jiǎng)h除的數(shù)據(jù)進(jìn)行篩選,只保留在指定范圍外的數(shù)據(jù)。
2. 刪除或更新表中的指定行:使用not in語(yǔ)句可以準(zhǔn)確地刪除或更新表中的指定行。
3. 數(shù)據(jù)庫(kù)優(yōu)化:使用not in語(yǔ)句可以優(yōu)化數(shù)據(jù)庫(kù)查詢效率,減少不必要的數(shù)據(jù)加載和運(yùn)算量。
以下將分別介紹not in語(yǔ)句在這些場(chǎng)景中的使用方法。
三、刪除指定范圍外的數(shù)據(jù)
在進(jìn)行數(shù)據(jù)清理時(shí),有時(shí)需要?jiǎng)h除數(shù)據(jù)庫(kù)中不在指定范圍內(nèi)的數(shù)據(jù)。例如,刪除所有不在“用戶ID在1到100之間”的用戶數(shù)據(jù)。
使用not in語(yǔ)句可以輕松實(shí)現(xiàn)這個(gè)目標(biāo),具體代碼如下:
“` SQL
DELETE FROM users
WHERE user_id NOT IN (1,2,3,4,….100);
“`
其中users是需要?jiǎng)h除的表,user_id是需要?jiǎng)h除的數(shù)據(jù)列。通過將需要?jiǎng)h除的數(shù)據(jù)ID列的ID值都列出,并將not in語(yǔ)句用于where條件中,可以實(shí)現(xiàn)只刪除不在指定范圍內(nèi)的數(shù)據(jù)的效果。
四、刪除指定行
不僅可以刪除指定范圍外的數(shù)據(jù),還可以使用not in語(yǔ)句準(zhǔn)確地刪除表中某些行。例如,想要?jiǎng)h除users表中最近一年沒有登錄的用戶數(shù)據(jù)。
使用not in語(yǔ)句可以輕松實(shí)現(xiàn)這個(gè)目標(biāo),具體代碼如下:
“` SQL
DELETE FROM users
WHERE user_id NOT IN (
SELECT user_id
FROM user_login_history
WHERE login_time > DATE_SUB(NOW(), INTERVAL 1 YEAR)
);
“`
其中users是需要?jiǎng)h除的表,user_id是需要?jiǎng)h除的數(shù)據(jù)列,user_login_history是需要用來比較的表。通過將需要用到的表中的字段都放入IN子句中,可以實(shí)現(xiàn)只刪除滿足條件的數(shù)據(jù)的效果。
五、數(shù)據(jù)庫(kù)優(yōu)化
在進(jìn)行大型數(shù)據(jù)庫(kù)操作時(shí),查詢速度可能會(huì)變慢。這時(shí),可以使用not in語(yǔ)句對(duì)查詢速度進(jìn)行優(yōu)化。例如,在進(jìn)行數(shù)據(jù)清理時(shí),要?jiǎng)h除不在指定范圍內(nèi)的大量數(shù)據(jù)。這種情況下,如果一條一條地刪除數(shù)據(jù),可能會(huì)十分耗時(shí)。
使用not in語(yǔ)句可以大幅度提升操作效率。具體代碼如下:
“` SQL
DELETE FROM users
WHERE user_id NOT IN (
SELECT user_id
FROM users_temp
);
“`
其中users是需要?jiǎng)h除的表,user_id是需要?jiǎng)h除的數(shù)據(jù)列,users_temp是查詢需要用到的表。與以上例子類似,通過將需要查詢的表中的字段都放入IN子句中,可以實(shí)現(xiàn)快速、準(zhǔn)確地刪除滿足條件的數(shù)據(jù)的效果。
六、
本文為你詳細(xì)介紹了MySQL刪除not in語(yǔ)句的使用方法。在實(shí)際操作中,需要根據(jù)具體的情況選擇不同的場(chǎng)景和方法。在進(jìn)行數(shù)據(jù)清理、性能優(yōu)化等操作時(shí),not in語(yǔ)句是一個(gè)非常有用的工具。通過靈活運(yùn)用not in語(yǔ)句,可以輕松實(shí)現(xiàn)滿足特定條件的數(shù)據(jù)刪除、更新等操作,從而提高M(jìn)ySQL數(shù)據(jù)庫(kù)管理效率,幫助你更好地處理各種數(shù)據(jù)庫(kù)問題。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220SQL語(yǔ)句刪除重復(fù)的記錄
COL1 中有重復(fù)記錄(COL1,COL2為主鍵),如何刪除
1、有少數(shù)重復(fù)記錄(在col1,col2上有索引比較好)
DELETE T
WHERE (COL1,COL2) IN
(SELECT COL1,COL2 FROM T GROUP BY COL1,COL2 HAVING COUNT(*) > 1)
AND
ROWID NOT IN
(SELECT MIN(ROWID) FROM T GROUP BY COL1,COL2 HAVING COUNT(*) > 1)
2、大部份記錄有重復(fù)記錄
DELETE T WHERE ROWID NOT IN
(SELECT MIN(ROWID) FROM T GROUP BY COL1,COL2)
3、其他寫法
DELETE T WHERE ROWID IN
(SELECT A.ROWID FROM T A,T B
WHERE A.COL1=B.COL1 AND A.COL2 = B.COL2 AND A.ROWID > B.ROWID)
######################################
10. 刪除重復(fù)記錄
更高效的刪除重復(fù)記錄方法 ( 因?yàn)槭褂昧薘OWID)
DELETE FROM EMP E
WHERE E.ROWID > (SELECT MIN(X.ROWID)
FROM EMP X
WHERE X.EMP_NO = E.EMP_NO);
11. 用TRUNCATE替代DELETE
當(dāng)刪除表中的記錄時(shí),在通常情況下, 回滾段(rollback segments ) 用來存放可以被恢復(fù)的信息. 如果你沒有COMMIT事務(wù),ORACLE會(huì)將數(shù)據(jù)恢復(fù)到刪除之前的狀態(tài)(準(zhǔn)確地說是
恢復(fù)到執(zhí)行刪除命令之前的狀況)
而當(dāng)運(yùn)用TRUNCATE時(shí), 回滾段不再存放任何可被恢復(fù)的信息.當(dāng)命令運(yùn)行后,數(shù)據(jù)不能被恢復(fù).因此很少的資源被調(diào)用,執(zhí)行時(shí)間也會(huì)很短.
(譯者按: TRUNCATE只在刪除全表適用,TRUNCATE是DDL不是DML)
12. 盡量多使用COMMIT
只要有可能,在程序中盡量多使用COMMIT, 這樣程序的性能得到提高,需求也會(huì)因?yàn)镃OMMIT所釋放的資源而減少:
COMMIT所釋放的資源:
a. 回滾段上用于恢復(fù)數(shù)據(jù)的信息.
b. 被程序語(yǔ)句獲得的鎖
c. redo log buffer 中的空間
d. ORACLE為管理上述3種資源中的內(nèi)部花費(fèi)
刪除重復(fù)的數(shù)據(jù)
delete from tb where id not in (
select id from
(select fileSize,fileName ,max(id) id from tb group by filesize,filename ) a
)
現(xiàn)在完成了重復(fù)數(shù)據(jù)的刪除,主要是利用了找出某個(gè)分組中更大的那個(gè)id,其中包括了所有不重復(fù)的id,然后使用not in將需要保留的排除。
1、查找表中多余的重復(fù)記錄,重復(fù)記錄是根據(jù)單個(gè)字段(peopleId)來判斷
select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
2、刪除表中多余的重復(fù)記錄,重復(fù)記錄是根據(jù)單個(gè)字段(peopleId)來判斷,只留有rowid最小的記錄
delete from people where peopleName in (select peopleName from people group by peopleName having count(peopleName) > 1) and peopleId not in (select min(peopleId) from people group by peopleName having count(peopleName)>1)
3、查找表中多余的重復(fù)記錄(多個(gè)字段)
select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
4、刪除表中多余的重復(fù)記錄(多個(gè)字段),只留有rowid最小的記錄
delete from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
5、查找表中多余的重復(fù)記錄(多個(gè)字段),不包含rowid最小的記錄
select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
6.消除一個(gè)字段的左邊的之一位:
update tableName set =Right(,(len()-1)) where Title like ‘村%’
7.消除一個(gè)字段的右邊的之一位:
update tableName set =left(,(len()-1)) where Title like ‘%村’
8.假刪除表中多余的重復(fù)記錄(多個(gè)字段),不包含rowid最小的記錄
如何刪除數(shù)據(jù)庫(kù)中A表和B表中的重復(fù)數(shù)值
去掉重復(fù)值計(jì)數(shù)的三種方法判猜,函數(shù)搏沖悄法、基渣刪除重復(fù)值法、透視表法,各種方法均有講解,可以擇優(yōu)使用。
可以寫個(gè)過程;
先找出 A,B表中重復(fù)數(shù)據(jù)的id,然后旅蘆核在根據(jù)id,分別把A,B表嘩慶中相應(yīng)數(shù)據(jù)刪除 oracle中可以用拆掘游標(biāo)處理
關(guān)于刪除數(shù)據(jù)庫(kù)中 not in的使用的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)是成都專業(yè)網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、SEO優(yōu)化、手機(jī)網(wǎng)站、小程序開發(fā)、APP開發(fā)公司等,多年經(jīng)驗(yàn)沉淀,立志成為成都網(wǎng)站建設(shè)第一品牌!
當(dāng)前標(biāo)題:MySQL刪除notin語(yǔ)句使用方法(刪除數(shù)據(jù)庫(kù)中notin的使用)
標(biāo)題路徑:http://m.fisionsoft.com.cn/article/ccidgsi.html


咨詢
建站咨詢
