1、 使用LIKE进行模糊查询
LIKE运算符用于匹配字符串或字符串的一部分,该运算符只用于字符串,所以仅与Char或Varchar数据类型联合使用。
例如:
SELECT * FROM Students WHERE Sname LIKE ‘%新%’
2、 使用BETWEEN在某个范围内进行查询
使用BETWEEN可以查找那些介于两个已知值之间的一组未知值。要实现这种查找,必须知道开始查找的初始值和终值,这个最大值和最小值用单词AND分开。BETWEEN只能用于数字数据类型。NOT用来对限制条件“取反”操作。
SELECT * FROM Score WHERE Score BETWEEN 60 AND 80
SELECT * FROM Sales WHERE date NOT BETWEEN '1992-8-1' AND '1993-8-1'
3、 使用IN在列举值内进行查询
把某一字段中与所列的查询内容列表匹配的记录查询出来。查询的值是指定的某些值之一,可以使用带列举值的IN关键字来进行查询。IN可以和NOT组合起来使用,NOT IN得到所有不匹配列举值的行。
SELECT * FROM Students WHERE Saddress IN(‘耒阳’,’郴州’) ORDER BY Saddress
4、 SQL Server中的聚合函数
4.1、SUM:sum返回表达式中所有数值的总和,sum只能用于数字类型的列,不能够汇总字符、日期等其他数据类型。Sum只返回一个数值,不能够直接与可能返回多行的列一起使用来进行查询。在一个查询中可以使用多个聚合函数。
select sum(Score) from Score
4.2、AVG:avg函数返回表达式中所有数值的平均值,只能用于数值类型的列。
select avg(Score) from Score
4.3、MAX、MIN
max返回表达式中的最大值,min返回表达式中的最小值,他们都可以用于数字型、字 符型、日期/时间类型的列。
select max(Score) from Score
select min(Score) from Score
4.4、COUNT
Count返回提供的表达式中非空值的计数,count可以用于数字和字符类型的列。使用(*) 计算所有的行数。如果用字段代替*,该字段有null,则不计算在内。
select count(*) from Score
5、 Group By分组查询
select StudentID, CourseID, avg(Score) from Score group by CourseID, CourseID
在使用group by关键字时,在select 列表中可以指定的项目是有限制的,select语句中 只能是以下几项:
被分组的列。(在group by中出现过的字段,才可以在select语句中)
为每个分组返回一个值的表达式,例如用一个列名作为参数的聚合函数。
Group By 和Ordey By后使用分组或聚合函数,where后不能使用聚合函数。
6、 使用HAVING子句进行分组筛选
Where子句只能对没有分组统计前的数据进行筛选,对分组后的条件的筛选必须使用 having子句。
Having和where子句可以在同一个select语句中一起使用,使用的顺序为:
WHERE ——》GROUP BY ——》 HAVING
在select语句中,where、group by、haning子句和统计函数的执行的顺序:where子句 从数据源中去掉不符合其搜索条件的数据,group by子句搜集数据行到各个组中,统计 函数为各个组计算统计值,having子句去掉不符合其组搜索条件的各组数据行。
select StudentID, CourseID, avg(Score) from Score
group by StudentID,CourseID
having count(Score) > 1
7、 多表联接查询分类
7.1、内联接查询
7.1.1、在where子句中指定联接条件
select S.SName, SC.CourseID, SC.Score from Student as S, Score as S
where S.SCode = SC.StudentID
7.1.2、在from子句中使用JOIN...ON
select S.SName, SC.CourseID, SC.Score
from Students as S join Score as SC
on (S.SCode = SC.StudentID)
如果查询的列名在用到的两个或多个表中不重复,则对这一列的引用不必用表名来限 定。
7.2、外联接
7.2.1、左外联接:LEFT JOIN或LEFT OUTER JOIN
左向外联接的结果集包括left outer子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关的结果集行中右表的所有选择列均为空值。
在外部联接中参与联接的表有主从之分,以主表的每行数据去匹配从表的数据列,符合联接条件的数据将直接返回到结果集中,对那些不符合联接条件的列,将被填上NULL值后返回到结果集中。
查询所有参加考试学员的每次考试分数:
select S.Sname, C.CourseID, C.Score
from Students as S
left outer join Score as C on S.Scode = C.StudentID
查询没考试的学员:
select S.Stuname, C.Stuscore
from Stuinfo as S left join Stuscore as C
on S.id = C.id where C.Stuscore is null
7.2.2、右外联接查询
右外联接查询与左外联接查询相似,只不过要包含右表中所有匹配的行。如果右表中有的项在左表中没有对应的项,以NULL值来填充。如:在PUBS数据库中,在Titles和Publishers表之间的右向外联接将包括所有的出版商,在Titles表中没有书名的(很久没出书了)也被列出。
select Titles.Title_id,Titles.Title,Publishers.Pub_name form titles
right outer join Publishers on Titles.Pub_id = Publishers.Pub_id