热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

第五章数据查询(二)

5.1模糊查询模糊查询提取的数据不一定的确切的,查询者对查询条件也是模糊的、大概的、不特别明确的。例如,只查询张姓学员的信息、只查询分数在60-83分之间的考试成绩、或者只查询北京上海广州地区的学员,这种查询不是指定某个人的姓名、一个具体的分数

5.1 模糊查询 模糊查询提取的数据不一定的确切的,查询者对查询条件也是模糊的、大概的、不特别明确的。例如,只查询张姓学员的信息、只查询分数在60-83分之间的考试成绩、或者只查询北京上海广州地区的学员,这种查询不是指定某个人的姓名、一个具体的分数

5.1 模糊查询

  模糊查询提取的数据不一定的确切的,查询者对查询条件也是模糊的、大概的、不特别明确的。例如,只查询张姓学员的信息、只查询分数在60-83分之间的考试成绩、或者只查询北京上海广州地区的学员,这种查询不是指定某个人的姓名、一个具体的分数或者某个固定的地区,因此属于模糊查询。

  模糊查询可以使用我们前面已经介绍过的Like、通配符来进行。上一章讲述过的Is Null查询严格说也是一种模糊查询,模糊查询还有基于范围内的查询和在某些列举值内的查询。

5.1.1 使用Like进行模糊查询

  在前面我们已经介绍过使用Like来编写约束,Like运算符用于匹配字符串或字符串的一部分(称为子串)。由于该运算符只用于字符串,所以仅与char或varchar数据类型联合使用。

  在数据更新、删除或者查询的时候,依然可以使用Like关键字来进行匹配查找,例如,查找姓张的学员:

  Select * from Students Where Sname like '张%'

  或者查询不是八月份发行的A卡或者C卡:

  Select * from Card where ID Like '00[^8]%[A,C]%'

5.1.2 使用BetWeen在某个范围内进行查询

  使用关键字Between可以查找那些介于两个已知值之间的一组未知值。要实现这种查找,必须知道开始查找的初值和终值,这个最大值和最小值用单词And分开,例如:

  Select * from Score where Score Berween 60 and 80

  此外,Between 查询在日期范围的时候使用得比较多。例如,查询不在1992年8月1号到1993年8月1号之间订购的读书列表:

  Select * from Sales Where ord_date not Between '1992-8-1' and '1993-8-1'

5.1.3 使用In在列举值内进行查询

  查询的值是指定的某些值之一,可以使用带列举值的In关键字来进行查询。将列举值放在圆括号里,用逗号分开,例如查询北京、广州或者上海的学员姓名:

  Select Sname as 学员姓名 from Students Where Saddress in ('北京','广州','上海') Order by Saddress

  还可以把In关键字和Not关键字合起来使用,这样可以得到所有不匹配列举值的行。

5.2 SQL Server 中的聚合函数

  在查询中还会经常碰到的要求是取某些列的最大值、最小值、平均值等信息,有时候还需要计算出究竟查询到多少行数据项。这个时候,查询的“统计数据”是用户比较关心的,SQL Server 提供了“聚合函数”,聚合函数能够基于列进行计算,并返回单个值。

  SQL Server 提供了以下几种聚合函数。

  1. Sum

    Sum返回表达式中所有数值的总和,Sum只能用于数字类型的列,不能够汇总字符、日期等其他数据类型。要得到商务付款的总数,可执行以下查询:

    Select Sum(ytd_sales) From titles where type = 'business'

    注意这种查询只返回一个数值,因此,不能够直接与可能返回多行的列一起使用来进行查询,例如:

    Select Sum(ytd_sales) , Price from titles where type = 'business'

    将报告错误信息。但是,在一个查询中可以同时使用多个聚合函数。

  2. Avg

    Avg函数返回表达式中所有数值的平均值,香港服务器租用,Avg函数也只能用于数字类型的列。例如,成绩表中存在的数据项。

    要查询及格线以上的学员的平均成绩,语句如下:

    Select Avg(Score) as 平均成绩 from Score Where Score >= 60

  3. Max 和 Min

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

    例如,查询平均成绩、最高分、最低分的语句如下:

    Select Avg(Score) as 平均成绩 , Max(Score) as 最高分, Min(Score) as 最低分 from Score Where Score >= 60

  4. Count

    Count 返回提供的表达式中非空值的计数,Count可以用于数字和字符类型的列。

    另外,也可以使用星号(*)作为Count的表达式,使用星号可以不必指定特定的列而计算所有的行数。

    例如,查询及格人数的语句如下:

    Select Count(*) as 及格人数 From Score where Score >= 60

5.3 分组查询

5.3.1 使用 Group By 进行分组查询

  我们来看一下学员成绩表,成绩表中存储了所有课程的成绩。在这种情况下,可能就需要统计不同课程的平均成绩,也就是说,需要对不同的成绩首先按照课程来进行分组,分组以后再进行聚合计算,得到累计信息。

  这种情况应用很普遍,例如一个早餐店,早晨销售包子、油条、米粉等,中午的时候,就需要分类统计包子的销售金额、油条的销售金额、米粉的销售金额,这个时候就需要首先分类,然后在这个类别的基础上分别进行汇总和统计输出。

  再具体点,假设学员成绩表中有以下数据。  

  

  此时,要统计不同课程的平均分数。首先把相同的CourseID都分为一组,然后把这些相同组对应的分数值再使用前面的聚合函数取平均值(最大值、最小值或者参考人数统计)。

推荐阅读
author-avatar
啊哈1983_384
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有