SQL Server数据查询2

1、  使用LIKE进行模糊查询

LIKE运算符用于匹配字符串或字符串的一部分,该运算符只用于字符串,所以仅与CharVarchar数据类型联合使用。

例如:

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.1SUMsum返回表达式中所有数值的总和,sum只能用于数字类型的列,不能够汇总字符、日期等其他数据类型。Sum只返回一个数值,不能够直接与可能返回多行的列一起使用来进行查询。在一个查询中可以使用多个聚合函数。

select  sum(Score)  from Score  

4.2AVGavg函数返回表达式中所有数值的平均值,只能用于数值类型的列。

select avg(Score) from Score

4.3MAXMIN

max返回表达式中的最大值,min返回表达式中的最小值,他们都可以用于数字型、字 符型、日期/时间类型的列。

select max(Score) from Score

select min(Score) from Score

4.4COUNT

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子句。

Havingwhere子句可以在同一个select语句中一起使用,使用的顺序为:

WHERE ——》GROUP BY ——》 HAVING

select语句中,wheregroup byhaning子句和统计函数的执行的顺序: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 JOINLEFT 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数据库中,在TitlesPublishers表之间的右向外联接将包括所有的出版商,在Titles表中没有书名的(很久没出书了)也被列出。

select Titles.Title_id,Titles.Title,Publishers.Pub_name  form titles

right outer join Publishers on Titles.Pub_id = Publishers.Pub_id

 

你可能感兴趣的:(SQL Server数据查询2)