sql语句去重distinct方法是啥?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql语句去重distinct方法是啥?相关的知识,希望对你有一定的参考价值。
参考技术Asql语句去重distinct方法是根据name和id两个字段来去重的。这种方式Access和SQLServer同时支持,返回的结果为两行,这说明distinct并非是对xing和ming两列字符串拼接后再去重的,而是分别作用于了xing和ming列。
sql语句去重distinct特点
distinct语句中select显示的字段只能是distinct指定的字段,其他字段是不可能出现的,例如假如表A有备注列,如果想获取distincname,以及对应的备注字段想直接通过distinct是不可能实现的,但可以通过其他方法实现关于SQLServer将一列的多行内容拼接成一行的问题讨论。
distinct这个关键字用来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是distinct只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。
SQL部分解析
过滤数据
distinct关键字 去除重复的数据 直接加在select即可
select distinct (name/*)
from sales.customers
order by name
当出现很多null值只会保留一个,当然对于null去重有其他更多的方法。
当不使用distinct时:
当使用distinct去重时,就只会出现一次Null:
where语句
作用于筛选,例如:
查询sales.customers表电话不为空的用户信息
select *
from sales.customers
where phone is not null
或者查询电话为空的用户信息:
又或者筛选某个详细的条目,例如:
查询sales.customers表中电话为(619) 635-2027的用户信息
select *
from sales.customers
where phone='(619) 635-2027' 注:字符串要用 '' 括起来
AND 查找两个条件的行
AND是一个逻辑运算符,用于组合两个布尔表达式
比如查询CA州并且在campbell这个城市里的客户信息 、
比较符<>=
除了这些大于等于小于,还有!=不等于而不等于也可以用<>同时使用来表达不等于。
这些比较符可用运用于where 这些查询,或者判定某些规则中使用。例如:production.products表中价格大于3000的货物数据
也可配合and或order by使用,使查询出来的区间值更加精细和方便观察
or或者
查找多个只需满足其中一个条件即可用法与and相同
区别是and只会查询出满足所有条件的信息,or只需要满足其中一条就可以查询出来
例如查询出除了2500——3000的价格数据,其他的都查询出来并且价格从高到低排列出来:
当然or和and也可以一起使用只不过语言上理解需要理清,例如:
Select*from production.products
//这里表示查找price大于等于3000并且年份是2018的数据据
where (list_price>=3000
and model_year = 2018)
//从or后开始and就不算做这里面所有这里只需要小于等于2500即可
甚至可以在后面加多一条and但是与上面无关所以不会起冲突
注:(or的优先级比and优先级高,所以为了看上去更方便可以选择把他们括起来)
or list_price<=2500
order by list_price
跟上面区间完全相同的写法还有between关键字 但需要注意的是此关键字所表示的区间值是包括边缘值本身的,也就是说上面不是小于等于或者是大于等于或两者都不是那就不是完全相同。
此用法一般作用于两个数值之间的查询
例如查询在2017年1月15日至2017年1月17日期间下订单的客户(在SQL查时间时可用用字符串类型,数据库会根据查询的数据种类而自动内部转换)
or方法还有一些更简单的转化例如in方法
or写法:
用in写法
注:括号里的如果是字符串类型的数据需要单引号括起来,但这里的是数据类型所以不用
-------------------------------------------------------------------------------
like 查找包指定含字符串的行(类似于正则表达式一样匹配所需要查询的数据)
( %通配符代表零个或者多个字符,使语句变成开头是’’字符串,
如果不加%语句将变成匹配叫a的字符串 )注:这里面的a不区分大小写
但如果想要查询的是第二个字符是a的就需要用到另一个通配符 _ 下划线,
一个下划线代表一个字符 例:
[list of characters] 通配符:指定集合中的任何单个字符。
[charaacter-character]:指定范围内的任何单个字符。
[^]:不在列表或范围内的任何单个字符。
like模糊查询默认是不分大小写的
通配符是like运算符比等于(=)和不等于(!=)字符串比较运算符更灵活
转义符
转义字符指示like运算符将通配符视为常规字符。转义字符没有默认值,必须仅
计算为一个字符。
当有多个需要一起查询的条件时可以使用or方法连起来但是却有些复杂,in方法也不可以
使用,因为in里面必须要有准确的值
所以就要用到通配符[list of characters][] 例如:
用like匹配acbde开头的first_name
当这种连续的查询可以使用-([character-character]通配符)代替里面的中间值.例如:
如果是不查询a-e只需在like前面加个not即可 例如:
或者在[a-e]里面加^通配符也可达到没有a-e的first_name 例如:
as关键字代称(可以理解为把看不懂的或者复杂的英文二次取名成为自己
理解或者简约的名字,可以支持中文)例如:
(这里的c是给表取名了现在作用不大,
但是多表查询的时候会方便很多)
//这里是使用别名并且排除a-c
//这里是排序,当然可以使用二次取名,而且原来的表名也可以使用
毕竟as别名只不过是临时名不会影响数据库里的表名。
这是我所学到的SQL,所以我要分享给你们,希望可以帮助到你们。
以上就是我的分享,新手上道,请多多指教。如果有更好的方法或不懂得地方欢迎在评论区教导和提问喔!
以上是关于sql语句去重distinct方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
3.1.3MySQL__数据库基本建表查询,登录,sql语句,建表语句,修改表结构,增删改查,as别名,limit分页,distinct去重,聚合函数,