sql去重、or、in、and、groupby的使用
程序员文章站
2022-05-03 10:54:33
...
表结构如下
查询一:查询name在 ‘111’,‘222’,‘liuyao’,‘zhai’ 之间任意一个,或者age等于20的数据(如果条件是并且,使用and)
SELECT * from user
WHERE 1=1
and name in ('111','222','liuyao','zhai')
or age = 20
查询结果:可以看出满足上述条件 ,但test3这条数据有重复
查询二:查询name在 ‘111’,‘222’,‘liuyao’,‘zhai’ 之间任意一个,或者age等于20的数据,并且按照name对数据去重
如果数据库有两条数据一模一样,使用下边的sql即可去重
select distinct * from table(表名) where (条件)
但是本次的数据结构有唯一id 不符合上述条件,需要这样来去重
①:先查出满足条件的全部数据
②:对满足条件的数据按照name过滤
③:取所有过滤后数据的id
④:查询id 在过滤后id内的所有数据,即可去重!
SELECT * from user
where id in (
select id from
(SELECT * from user
WHERE 1=1
and name in ('111','222','liuyao','zhai')
or age = 20) a
group by name )
查询结果:
查询三:查询name在 ‘111’,‘222’,‘liuyao’,‘zhai’ 之间任意一个,或者age等于20,并且tel等于 45465 的数据
这个查询条件是要在(查询name在 ‘111’,‘222’,‘liuyao’,‘zhai’ 之间任意一个,或者age等于20)的查询结果中,只要tel等于 45465 的数据
需要注意的是多个and 和 or之间的运用
当使用or时,需要给当前条件加上() 否则查询结果不成立
SELECT * from user
WHERE 1=1
and
(name in ('111','222','liuyao','zhai')
or age = 20)
and tel = '45465'
查询结果