MYSQL必知必会读书笔记 第十和十一章 使用函数处理数据

来源:互联网 发布:smg淘宝店 编辑:程序博客网 时间:2024/06/05 20:26
  • 拼接字段
    存储在数据库表中的数据一般不是应用程序所需要的格式。我们需要直接从数据库中检索出转换、计算或格式化过的数据;而不是检索出数据,然后再在客户机应用程序或报告程序中重新格式化。

    计算字段(字段 = 列,不过数据库列一般称为列,而字段通常用于计算字段中)并不实际存在于数据库表中,计算字段是运行时在select语句内创建的。

    拼接 concatenate 将值联结到一起构成单个值
    在MySQL的select语句中,可使用Concat()函数来拼接两个列。

    如创建由两列组成的标题:生成一个供应商报表,需要在供应商的名字中按照name(location)这样的格式列出供应商的位置。此报表需要单个值,而表中数据存储的两个列vend_namevend_country中。还需要用括号将vend_country括起来。

    新创建的列用AS赋一个别名

  • 去除空白
    Ltrim() RTrim() Trim()
  • 执行算术计算
    比如物品单单表存储物品的价格和数量,但是不需要存储每个物品的总价格(用价格乘以数量即可)。 为打印发票,需要物品的总价格。即需要增加一列,根据已有的列计算出来。

文本函数

left()  串左边字符length() 串长度locate() 找出串的一个子串lower() 转为小写ltrim() 去掉左边空格right() 返回串右边字符rtrim() 去掉串右边空格soundex() 返回字符串soundex值upper() 大写

将选择的文本转换成大写

select Upper(vend_name)from vendors;

Soundex()函数:将任何文本传转换为描述其语音表示的字母数字模式的算法。(语音匹配?对发音比较而不是对字幕比较)

日期函数

日期和时间函数adddate() 增加一个日期-天或周addtime() 增加一个时间curdate() 返回当前日期curtime() 返回当前时间date() 返回日期时间的日期部分datediff() 计算两个日期差date_add() 高度灵活的日期运算函数date_format() 返回一个格式化的日期或时间串day() 返回一个日期的天数部分dayofweek() 对于一个日期,返回对应的星期几hour()minute()month()now() 当前日期和时间second()time() 当前日期时间的时间部分year()

一般,应用程序不使用用来存储日期和时间的格式,因此日期和时间函数总是被用来读取,统计和处理这些值。

MySQL的日期格式:yyyy-mm-dd。 比如 2005-09-01

但是这样的where order_date = '2005-09-01'不可靠。因为order_date存储的数据类型是datatime. 这种类型存储日期及时间值。比如存储的order_date值为2005-09-01 11:30:05,则where order_date = '2005-09-01'就会匹配失败。

所以最安全的方法是Date()函数,Date(order_date)指示MySQL提取列的日期部分。

select cust_id, order_numfrom orderswhere Date(order_date) = '2005-09-01';

再比如想要检索出2005年9月下的所有订单。

select cust_id, order_numfrom orderswhere Year(order_date) = 2005 and Month(order_date) = 9;

聚集函数

我们经常需要汇总函数,而不是把它们实际检索出来。
这种类型的检索例子:
1. 确定表中行数
2. 获得表中行组的和
3. 找出表列(or 所有行某些特定的行)的最大值,最小值和平均值

聚集函数(aggregate function) 运行在行组上,计算和返回单个值的函数。

注意的是distinct只能用于count(distinct  列名),不能用于计算表达式

AVG()     返回某列的平均值COUNT()   返回某列的行数MAX()     返回某列的最大值MIN()     返回某列的最小值SUM()     返回某列值的和
  • 求某一列的平均值
select avg(prod_price) as avg_pricefrom products;


- 计数
使用count(*)对表中行的数目进行计数(whether null or not)

使用count(column)对特定列具有值的行进行计数,忽略null

  • 求和
    使用sum()返回指定列值的和

0 0