MySQL是一个开源的关系型数据库管理系统,广泛应用于各种应用场景中。在使用MySQL时,我们经常需要删除一些数据,而其中not in语句是一个非常有用的工具,可以帮助我们快速、方便地删除无用的数据。本文将为你详细介绍MySQL删除not in语句的使用方法。
10年积累的成都网站设计、成都做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有涿州免费网站建设让你可以放心的选择与我们合作。
一、not in语句的定义
not in语句是MySQL中的一种条件语句,用于指定SQL查询时返回值中不包含某些值。
语法格式如下:
“` SQL
SELECT column_name(s)
FROM table_name
WHERE column_name NOT IN (value1, value2, …);
“`
其中column_name指需要查询的列,table_name指需要查询的表,NOT IN表示返回不包含括号中指定值的所有行。
二、not in语句的使用场景
not in语句可以应用于各种场景,例如:
1. 待删除的数据不在指定范围内:可以使用not in语句对需要删除的数据进行筛选,只保留在指定范围外的数据。
2. 删除或更新表中的指定行:使用not in语句可以准确地删除或更新表中的指定行。
3. 数据库优化:使用not in语句可以优化数据库查询效率,减少不必要的数据加载和运算量。
以下将分别介绍not in语句在这些场景中的使用方法。
三、删除指定范围外的数据
在进行数据清理时,有时需要删除数据库中不在指定范围内的数据。例如,删除所有不在“用户ID在1到100之间”的用户数据。
使用not in语句可以轻松实现这个目标,具体代码如下:
“` SQL
DELETE FROM users
WHERE user_id NOT IN (1,2,3,4,….100);
“`
其中users是需要删除的表,user_id是需要删除的数据列。通过将需要删除的数据ID列的ID值都列出,并将not in语句用于where条件中,可以实现只删除不在指定范围内的数据的效果。
四、删除指定行
不仅可以删除指定范围外的数据,还可以使用not in语句准确地删除表中某些行。例如,想要删除users表中最近一年没有登录的用户数据。
使用not in语句可以轻松实现这个目标,具体代码如下:
“` 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是需要删除的表,user_id是需要删除的数据列,user_login_history是需要用来比较的表。通过将需要用到的表中的字段都放入IN子句中,可以实现只删除满足条件的数据的效果。
五、数据库优化
在进行大型数据库操作时,查询速度可能会变慢。这时,可以使用not in语句对查询速度进行优化。例如,在进行数据清理时,要删除不在指定范围内的大量数据。这种情况下,如果一条一条地删除数据,可能会十分耗时。
使用not in语句可以大幅度提升操作效率。具体代码如下:
“` SQL
DELETE FROM users
WHERE user_id NOT IN (
SELECT user_id
FROM users_temp
);
“`
其中users是需要删除的表,user_id是需要删除的数据列,users_temp是查询需要用到的表。与以上例子类似,通过将需要查询的表中的字段都放入IN子句中,可以实现快速、准确地删除满足条件的数据的效果。
六、
本文为你详细介绍了MySQL删除not in语句的使用方法。在实际操作中,需要根据具体的情况选择不同的场景和方法。在进行数据清理、性能优化等操作时,not in语句是一个非常有用的工具。通过灵活运用not in语句,可以轻松实现满足特定条件的数据删除、更新等操作,从而提高MySQL数据库管理效率,帮助你更好地处理各种数据库问题。
成都网站建设公司-创新互联,建站经验丰富以策略为先导10多年以来专注数字化网站建设,提供企业网站建设,高端网站设计,响应式网站制作,设计师量身打造品牌风格,热线:028-86922220COL1 中有重复记录(COL1,COL2为主键),如何删除
1、有少数重复记录(在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、大部份记录有重复记录
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. 删除重复记录
更高效的删除重复记录方法 ( 因为使用了ROWID)
DELETE FROM EMP E
WHERE E.ROWID > (SELECT MIN(X.ROWID)
FROM EMP X
WHERE X.EMP_NO = E.EMP_NO);
11. 用TRUNCATE替代DELETE
当删除表中的记录时,在通常情况下, 回滚段(rollback segments ) 用来存放可以被恢复的信息. 如果你没有COMMIT事务,ORACLE会将数据恢复到删除之前的状态(准确地说是
恢复到执行删除命令之前的状况)
而当运用TRUNCATE时, 回滚段不再存放任何可被恢复的信息.当命令运行后,数据不能被恢复.因此很少的资源被调用,执行时间也会很短.
(译者按: TRUNCATE只在删除全表适用,TRUNCATE是DDL不是DML)
12. 尽量多使用COMMIT
只要有可能,在程序中尽量多使用COMMIT, 这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少:
COMMIT所释放的资源:
a. 回滚段上用于恢复数据的信息.
b. 被程序语句获得的锁
c. redo log buffer 中的空间
d. ORACLE为管理上述3种资源中的内部花费
删除重复的数据
delete from tb where id not in (
select id from
(select fileSize,fileName ,max(id) id from tb group by filesize,filename ) a
)
现在完成了重复数据的删除,主要是利用了找出某个分组中更大的那个id,其中包括了所有不重复的id,然后使用not in将需要保留的排除。
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
2、删除表中多余的重复记录,重复记录是根据单个字段(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、查找表中多余的重复记录(多个字段)
select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
4、删除表中多余的重复记录(多个字段),只留有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、查找表中多余的重复记录(多个字段),不包含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.消除一个字段的左边的之一位:
update tableName set =Right(,(len()-1)) where Title like ‘村%’
7.消除一个字段的右边的之一位:
update tableName set =left(,(len()-1)) where Title like ‘%村’
8.假删除表中多余的重复记录(多个字段),不包含rowid最小的记录
去掉重复值计数的三种方法判猜,函数搏冲悄法、基渣删除重复值法、透视表法,各种方法均有讲解,可以择优使用。
可以写个过程;
先找出 A,B表中重复数据的id,然后旅芦核在根据id,分别把A,B表哗庆中相应数据删除 oracle中可以用拆掘游标处理
关于删除数据库中 not in的使用的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
创新互联是成都专业网站建设、网站制作、网页设计、SEO优化、手机网站、小程序开发、APP开发公司等,多年经验沉淀,立志成为成都网站建设第一品牌!
当前文章:MySQL删除notin语句使用方法(删除数据库中notin的使用)
转载来于:http://www.shufengxianlan.com/qtweb/news0/263200.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联