第二天 -- 《2014-07-07 sql server》2——检索(Top、Distinct、聚合函数、Like)
一、上午 《09、Top、Distinct》
1、Top、Distinct
--使用top可以只返回结果集的前N条记录
select top 10 * from Student
--也可以限百分比
select top 10 percent * from Student --不是四舍五入,而是取Ceiling(取顶)
记
--distinct 去除重复值。它的作用与原始的数据表的记录无关。只针对select结果集,去除select指定的每个字段都重复的记录(只保留一条)。
select distinct Sex,Address from Student
-distinct去重针对的是整个select字段列表,而非其中某一个字段。
注意:如果检索里有distinct 和 top 关键字,distinct必须放前面,否则报错。
二、上午 《10、聚合函数》
1、五个函数:MAX、MIN、AVG、SUM、COUNT(统计记录数)
SUM和AVG只能对数值进行计算。
1 --如果是字符串,那么就按字符串的字母(或拼音)进行查字典的排序,得到最大和最小值 2 select min(StudentName) from Student 3 select MAX(StudentName) from Student
2、聚合函数一般只在以下三个子句中使用:
(1)select子句(2)having子句(3)compute子句(将生成的合计值作为另一个结果集)
3、COUNT(*) 与COUNT(列)的区别在于:
前者统计符合条件的所有行数;后者只统计符合条件的(指定列)非NULL记录。
同理MAX、MIN、AVG、SUM函数全都忽略(不计算)NULL值
三、上午 《11、范围条件查询》-- between A and B 和 in(A,B,C)
1、between ...and... 是大于等于前面的值 小于等于 后面的值(必须前面值小,后面值大)。否则查不到想要的结果(但不报错)
select * from Student where Sex='女' and BornDate between '1999-1-1' and '1995-1-1' -- 包括前者和后者。大小值写反了,查不到结果,但不报错
另外between范围值如果存在null,那么这个范围实际上是不可知的,查询的结果集为空。(是因为结果不可知)
2、in:可以指定一个具体的范围,它可以取其中的任意值. 要求值的类型是一致(值可以相互转换)
select * from Student where ClassId in (1,2,'3','4') -- 因为ClassId是一个int 所以要把in后面的范围转为整数
四、上午 《12、模糊查询》-- LIKE语句
1、LIKE的三个通配符:% _ []
具体如下
% 代表任意个任意字符。(也可以代表0个)
_ 代表一个任意字符
[ ] 代表一个具体的或者连续的范围,能够匹配其中一个字符 如[12345] 匹配1~5任何一个字符;[after] 匹配a/f/t/e/r中的任何一个字符
[0-9] 代表一个匹配从0~9任何一个字符;[a-z]代表二十六个字母中的任何一个字符
[^after] 代表一个字符,它不是a/f/t/e/r中的任何一个字符。
[^1-7] 代表一个字符,它不是1/2/3/4/5/6/7中的任何一个字符。
注意: ^符号只有SQLServer支持。其他DBMS要使用not like
五、补充内容:转义字符
1、在字符串中输入单引号。
在字符串内部以一个单引号作为转义后一个单引号就是字符串内容。如下黄色标注所示
where name like '%''你猜''%'
双引号是普通字符,直接输入即可。
2、模糊查询中通配符的转义。
使用escape关键字定义转义符。当转义符置于通配符之前时,该通配符就解释为普通字符。例如要搜索在任意位置包含字符串5%的字符串,要使用如下所示语句:
where name like '%5$%%' escape '$' --这里定义$符号做转义字符,其后一个字符当做普通字符而非通配符。
同理对于下划线_等通配符都要这么用,如下sql搜索在任意位置包含字符串5_的字符串:
where name like '%5?_%' escape '?' --这里定义?符号做转义字符,其后一个字符当做普通字符而非通配符。
3、在通配符上加方括号也可以将该字符转义为普通字符。
另外方括号用法注意看下面例子:
Symbol Meaning
like '5[%]' 5%
like '[_]n' _n
like '[a-cdf]' a, b, c, d, or f
like '[-5cdf]' -, 5, c, d, or f
like '[[]' [
like ']' ]
like 'abc[_]d%' abc_d and abc_de...
like 'abc[def]' abcd, abce, and abcf
like '[^1-9]' 0
like '[^1-9b-z]' 0, a
浙公网安备 33010602011771号