在表中,可能会存在很多重复值。比如姓名、产品型号、年龄等信息。但是在有一些情况下可能需要列出不同的值,不显示重复值。这种情况下关键词 DISTINCT 可以用于返回唯一不同的值。distinct这个关键字来过滤掉多余的重复记录只保留一条。DISTINCT必须放在开头(字段的开头),DISTINCT作用于列(单列或者多列)。基本语法是【select distinct 列名称 from 表名称】
当列名多个的时候这时 distinct 就作用于多列,也就是根据两个字段来联合查重。这种作用于多列的查询mssql和access都支持。作用于多列是不是根据两列的值拼接后进行查重而是分别作用于两列。
那么怎么显示这些重复的数据呢?在很多情况下还是需要显示数据库中有多少条重复的数据,这时就要用到【group by】语句和【having】函数联合查询了。【group by】语句的语法在这里就不详细介绍了,下面介绍一下【having】函数的使用语法。在sql语句中where后面无法跟函数一起使用,这时就要在where后面加having函数使where后面也可以加函数进行运算具体语法是【select * from 表名 where 条件 group by 列名 having 函数】在显示重复值的时候用到的函数是【count】。具体代码是【select distinct xm from test where xm in (select xm from test group by xm having count(xm) >1)】这样就光显示重复的值了。
上面的方法显示的重复值操作类似于子循环,一行一行的检索相对来说比较浪费系统资源不建议表数据很多进行上面的操作。既然having能显示重复值那么也可以显示唯一值也就是不重复的,代码如下【select * from test where xm in (select xm from test group by xm having count(xm) =1)】
这样的话就可以通过having函数查询出重复值,不重复值,删除重复项,查询多个字段重复值等,但是一定要注意 distinct 作用于多列时的数据显示,最好配合子查询来使用效果会更好一些,还是建议在表中数据量过多的情况下不要进行上述操作,影响系统资源,如果是B/S的架构的话容易产生iis假死状态导致系统崩溃。
写的有什么不对的地方或者有什么不明白的地方请给我留言,我们一同进步。
关键词: distinct