代码改变世界

MSSQL重拾记录

2012-12-29 18:16  kennyMc  阅读(204)  评论(0编辑  收藏  举报

:distinct修饰多列

select distinct age,name from test.dbo.t1

这里就以age和name列为基准,比如
12,a
13,b
12,a
13,d
执行结果就是
12,a
13,b
13,d

:order by

如果不适用order by,检索出的数据的顺序没有意义,数据可能进行更新或删除,则默认顺序会受到SQL Server重用回收存储空间的影响。

select  id,age,name from test.dbo.t1 order by age desc,name asc

order by多列时,仅在多个行具有相同的age值时才对name进行排序。

:where字符类型默认不区分大小写

:%通配符

%表示匹配出现任意次数的任何字符,默认不区分大小写,不能匹配NULL。

select  * from test.dbo.t1 where name like '%a%'

 :_通配符

_通配符值匹配单个字符,需要注意:char和nchar是固定长度(创建表时指定的长度),输入数据没有达到长度就自动以英文空格填充,varchar和nvarchar是变动长度的。
列name 是nchar(50)类型,然后填充abc,aaa,cab,ddd 4条数据

select * from t1 where name like '_a_'

结果不会查询到数据,因为name后面被填充了空格,将name修改为nvarchar(50)类型结果输出aaa,cab

:[]通配符

匹配指定中括号内的一个字符,只能匹配单个字符,[AB]%表示A或B开头(默认不区分大小写),使用^ 表示否定,比如[^A]%。

select * from t2 where name like '_[^a]%'

上面语句匹配name字段第二个字符不是a的列

:聚集函数

AVG()只能确定特定数值列的平均值,忽略列值为NULL的行。
Count(*)对表中行的数目进行计数,不管表列中是否包含NULL。
Count(column)对特定列进行计数,忽略NULL值。
Max(),Min(),Sum()都忽略列值为NULL的行。
上面所有的聚集函数都可以指定distinct参数,计算只包含不同的值。

:group by

group by子句中列出的每个列都必须是检索列或有效的表达式(不能是聚集函数)
如果在select中使用表达式,则必须在group by子句中指定相同的表达式,不能使用别名。

--group by使用表达式
select AVG(distinct age),LTRIM(name) from t2 group by LTRIM(name)

如果分组列中具有NULL值,则NULL将作为一个分组返回。
group by子句必须出现在where子句之后,order by子句之前。

:过滤分组

where过滤行,having过滤分组,where在数据分组前进行过滤,having在数据分组后进行过滤。

select name,COUNT(name) from t2 group by name having COUNT(name)>1

本文版权归kennyMc和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。