MySQL必知必会11-14章

第11章 使用数据处理函数

函数:

SQL支持利用函数来处理数据。函数一般是在数据上执行的,它给数据的转换和处理提供了方便

函数没有SQL的可移植性强

能运行在多个系统上的代码称为可移植的(portable)

  • 文本处理函数
  • 日期和时间处理函数
  • 数值处理函数

第12章 汇总数据

我们经常需要汇总数据而不用把它们实际检索出来,为此聚集函数

聚集函数(aggregate function)

运行在行组上,计算和返回单个值的函数
  • AVG()

    • 只用于单个列
    • AVG()只能用来确定特定数值列的平均值,而且列名必须作为函数参数给出。为了获得多个列的平均值,必须使用多个AVG()函数
  • COUNT()
  • MAX()
  • MIN()
  • SUM()

NULL值 AVG()函数忽略列值为NULL的行 (这几个都忽略)


第13章 分组数据

注意事项:

  • group by 子句可以包含任意数目的列。

    • 这使得能对分组进行嵌套
  • group by 如果在子句中嵌套了分组,数据将在最后规定的分组上进行汇总。换句话说,在建立分组时,指定的所有列都一起计算(所以不能从单个列中取回数据)

  • group by子句中列出的每个列都必须是检索列或有效的表达式(但不能是集聚函数)。如果在select 中使用表达式,则必须在group by子句中指定相同的表达式。不能使用别名。
  • 除集聚计算语句外,select语句中的每个列都必须在groub by子句中指定相同的表达式。不能使用别名
  • 除集聚计算语句外,select语句中的每个列都必须在group by子句中给出
  • 如果分组列中具有null值,则null将作为一个分组返回。如果列中有多行null值,它们将分为一组
  • group by子句必须出现在where子句后,order by子句之前。

过滤分组

where子句只能过滤行,而不能过滤分组 。Having子句可以过滤分组,

Having非常类似于where,事实上,目前为止所学过的所有类型的WHERE子句都可以用having子句来代替。

唯一的区别是where过滤行,having过滤的是分组。
还可以这么理解:where在数据分组前进行过滤,having在数据分组后进行过滤。where排除的行不包括在分组中。

having支持所有where操作符

SELECT子句顺序
  1. select
  2. from
  3. where