【MySQL必知必会】学习笔记Day5

拟墨画扇 提交于 2020-01-31 11:12:14

【MySQL必知必会】学习笔记Day5&1.25&D11-12章&P68-82页

9、使用数据处理函数

(1) 文本处理函数

  • eg:Upper()将文本转换为大写
SELECT  vend_name,Upper(vend_name)  AS vend_name_upcase
FROM vendors
ORDER BY vend_name;
  • 常用的文本处理函数:
函数          说明
Left()       返回串左边的字符
Right()      返回串右边的字符
LTrim()      去掉串左边的空格 
RTrim()      去掉串右边的空格 
Lower()      将串转换为小写 
Upper()      将串转换为大写
Length()     返回串的长度 
Locate()     找出串的一个子串 
Soundex()    返回串的SOUNDEX值 
SubString()  返回子串的字符 

注:SOUNDEX是一个将任何文本串转换为描述其语音表示的字母数字模式的算法。SOUNDEX考虑了类似的发音字符和音节,使得能对串进行发音比较而不是字母比较

  • eg:customers表中有一个顾客Coyote Inc.,其联系名为Y.Lee。但如果这是输入错误,此联系名实际应该是Y.Lie。按正确的联系名搜索不会返回数据,如下所示:
SELECT cust_name,cust_contact
FROM customers
WHERE cust_contact = 'Y.Lie';
  • 使用Soundex()函数进行搜索,它匹配所有发音类似于 Y.Lie的联系名,因为Y.Lee和 Y.Lie发音相似,所以它们的SOUNDEX值匹配:
SELECT cust_name,cust_contact
FROM customers
WHERE Soundex(cust_contact )= Soundex('Y.Lie');

(2) 日期和时间处理函数

  • 常用的日期和时间处理函数
函数                 说明
AddDate()           增加一个日期(天、周等)
AddTime()           增加一个时间(时、分等)
CurDate()           返回当前日期
CurTime()           返回当前时间
DateDiff()          计算两个日期之差
Date_Add()          高度灵活的日期运算函数
Date_Format()       返回一个格式化的日期或时间串
DayOfWeek()         对于一个日期,返回对应的星期几
Now()               返回当前日期和时间
Date()              返回日期时间的日期部分
Time()              返回一个日期时间的时间部分
Second()            返回一个时间的秒部分
Minute()            返回一个时间的分钟部分
Hour()              返回一个时间的小时部分
Day()               返回一个日期的天数部分
Month()             返回一个日期的月份部分
Year()              返回一个日期的年份部分

注:MySQL使用的日期格式,必须为格式yyyy-mm-dd

  • eg:检索一个订单记录,它的order_date为2005-09-01:
SELECT cust_id, order_num
FROM orders
WHERE Date(order_date)= '2020-01-25';

注:因为存储的order_date值可能为 2020-01-25 11:30:05,所以比较可靠的方法是只取其日期部分

  • eg:检索2005年9月的所有订单
SELECT cust_id, order_num
FROM orders
WHERE Date(order_date) BETWEEN '2020-09-01' AND '2020-09-30';

或者:

SELECT cust_id, order_num
FROM orders
WHERE Year(order_date) = 2005 AND Month(order_date) =9;

(3)数值处理函数

  • 常用数值处理函数
函数     说明
Abs()   返回一个数的绝对值 
Cos()   返回一个角度的余弦 
Exp()   返回一个数的指数值 
Mod()   返回除操作的余数 
Pi()    返回圆周率
Rand()  返回一个随机数 
Sin()   返回一个角度的正弦 
Sqrt()  返回一个数的平方根 
Tan()   返回一个角度的正切
10、汇总数据

(1)聚集函数

  • 聚集函数:运行在行组上,计算和返回单个值的函数
  • SQL聚集函数:
函数        说明
AVG()      返回某列的平均值 
COUNT()    返回某列的行数 
MAX()      返回某列的最大值 
MIN()      返回某列的最小值 
SUM()      返回某列值之和

(2)AVG()函数

  • eg:使用AVG()返回products表中所有产品的平均价格
SELECT  AVG(prod_price)AS  avg_price
FROM  products;
  • eg:用AVG()返回特定供应商所提供产品的平均价格
SELECT  AVG(prod_price)AS  avg_price
FROM  products
WHERE vend_id= 1003;

注:

  • AVG()只能用来确定特定数值列的平均值,而且列名必须作为函数参数给出。
  • 为了获得多个列的平均值, 必须使用多个AVG()函数
  • AVG()函数忽略列值为NULL的行

(3)COUNT()函数

  • COUNT()函数有两种使用方式

    • 使用COUNT(*)对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值
    • 使用COUNT(column)对特定列中具有值的行进行计数,忽略 NULL值
  • eg:返回customers表中客户的总数

SELECT COUNT(*) AS num_cust
FROM customers;
  • eg:只对具有电子邮件地址的客户计数
SELECT COUNT(cust_email) AS num_cust
FROM customers;

注:

  • 如果指定列名,则指定列的值为空的行被COUNT() 函数忽略
  • 但如果COUNT()函数中用的是星号(*),则不忽略

(4)MAX()函数

  • eg:返回products表中最贵的物品的价格
SELECT MAX(prod_price) AS max_price
FROM products;

注:

  • 对非数值数据使用MAX():虽然MAX()一般用来找出最大的数值或日期值,但MySQL允许将它用来返回任意列中的最大值,包括返回文本列中的最大值。在用于文本数据时,如果数据按相应的列排序,则MAX()返回最后一行。
  • NULL值:MAX()函数忽略列值为NULL的行

(5)MIN()函数

  • eg:返回products表中最便宜物品的价格
SELECT MIN(prod_price) AS min_price
FROM products;
  • 对非数值数据使用MAX():MIN()函数与MAX()函数类似, MySQL允许将它用来返回任意列中的最小值,包括返回文本列中的最小值。在用于文本数据时,如果数据按相应的列排序, 则MIN()返回最前面的行。
  • NULL值:MIN()函数忽略列值为NULL的行

(6)SUM()函数

  • eg:检索所订购物品的总数:
SELECT SUM(quantity)  AS  items_ordered
FROM  orderitems
WHERE  order_num = 20005;
  • eg:返回订单中所有物品价钱之和:
SELECT SUM(item_price*quantity)  AS  total_price
FROM  orderitems
WHERE  order_num = 20005;

注:

  • 利用标准的算术操作符, 所有聚集函数都可用来执行多个列上的计算
  • SUM()函数忽略列值为NULL的行

(7)聚集不同值

  • 以上5个聚集函数都可以如下使用:
    • 对所有的行执行计算,指定ALL参数或不给参数(因为ALL是默认行为)
    • 只包含不同的值,指定DISTINCT参数
    • 如果不指定DISTINCT,则假定为ALL
  • eg:使用AVG()函数返回特定供应商提供的产品的平均价格。 它与上面的SELECT语句相同,但使用了DISTINCT参数,因此平均值只考虑各个不同的价格:
SELECT  AVG(DISTINCT prod_price)AS  avg_price
FROM  products
WHERE vend_id= 1003;

注:

  • 如果指定列名,则DISTINCT只能用于COUNT()。DISTINCT 不能用于COUNT(*),因此不允许使用COUNT(DISTINCT), 否则会产生错误。类似地,DISTINCT必须使用列名,不能用于计算或表达式。

  • 将DISTINCT用于MIN()和MAX() 虽然可以,但没有实际价值

(8)组合聚集函数

  • eg:返回products表中物品的数目,产品价格的最高、最低以及平均值
SELECT COUNT(*) AS num_items,
       MIN(prod_price) AS price_min,
       MAX(prod_price) AS price_max,
       AVG(prod_price) AS price_avg
FROM  products;
     

【MySQL必知必会】系列笔记:
【MySQL必知必会1-4章】学习笔记Day1
【MySQL必知必会5-7章】学习笔记Day2
【MySQL必知必会8-9章】学习笔记Day3
【MySQL必知必会10章】学习笔记Day4

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!