设为首页收藏本站
查看: 102|回复: 0

[PHP] 第五章数据查询(二)

[复制链接]

论坛元老

Rank: 6Rank: 6

积分
34274
主题
17031
UID
1347
M币
67
贡献
17176

  • 发表于 2018-7-11 15:44:00 | 显示全部楼层 |阅读模式
    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都分为一组,然后把这些相同组对应的分数值再使用前面的聚合函数取平均值(最大值、最小值或者参考人数统计)。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    在我站开通SVIP可同时获得17个站点VIP资源 立即登录 立即注册
    快速回复 返回顶部 返回列表