【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
来源:CSDN
作者:Janet_zyh
链接:https://blog.csdn.net/JanetHULAHA/article/details/104109752