数据处理函数/单行处理函数
- Lower 转换小写
- upper 转换大写
- substr 取子串(substr(被截取字符串,起始下标,截取长度))
- length 取长度
- trim 去空格
- str_to_date 将字符串转换成日期
- date_format 格式化日期
- format 设置千分位
- round 四舍五入
- rand() 生成随机数
- ifnull 可以将null转换成一个具体的值
- concat 函数进行字符串的拼接
单行处理函数的特点
特点:一个输入对应一个输出
和单行处理函数相对应的是:多行处理函数(特点:多个输入,对应一个输出!)
常见的单行处理函数
- Lower 转换小写
- lower lower lower lowerlower lower lower lower
mysql> select LOWER(CLASS_NAME) from class;
+-------------------+
| LOWER(CLASS_NAME) |
+-------------------+
| qy142 |
| qy142 |
| qy141 |
+-------------------+
几个输入对应几个输出单行处理
- upper 转换大写
upper upper upper upper upper upper upper upper upper upper upper
mysql> select upper(remark) from class;
+---------------+
| upper(remark) |
+---------------+
| MR |
| MR |
| MR |
+---------------+
- substr 取子串(substr(被截取字符串,起始下标,截取长度))
substr substr substr substr substr substr substrsubstr
注意:起始下标是1
mysql> select substr(remark,1,1) from class;
+--------------------+
| substr(remark,1,1) |
+--------------------+
| m |
| m |
| m |
+--------------------+
substr的另一种用法 可以作为条件的判断
mysql> select class_id from class where substr(class_id,1,1)=4;
+----------+
| class_id |
+----------+
| 4 |
+----------+
- concat 函数进行字符串的拼接
select concat(class_id,remark) from class
mysql> select concat(class_id,remark) from class;
+-------------------------+
| concat(class_id,remark) |
+-------------------------+
| 4mr |
| 6mr |
| 7mr |
+-------------------------+
首字母大写
select concat(upper(substr(remark,1,1)),substr(remark,2,length(remark)-1)) as A from class;
+------+
| A |
+------+
| Mr |
| Mr |
| Mr |
+------+
- length 取长度
select length(remark) from class;
mysql> select length(remark) from class
-> ;
+----------------+
| length(remark) |
+----------------+
| 2 |
| 2 |
| 2 |
+----------------+
- trim 去除前后空格
mysql> select * from class where remark = trim(' mr');
+----------+------------+--------+
| class_id | CLASS_NAME | remark |
+----------+------------+--------+
| 4 | QY142 | mr |
| 6 | QY142 | mr |
| 7 | QY141 | mr |
+----------+------------+--------+
3 rows in set (0.00 sec)
mysql> select * from class where remark = ' mr';
Empty set (0.00 sec)
- round 四舍五入
mysql> select round(13.5,0) as rou from class;
+-----+
| rou |
+-----+
| 14 |
| 14 |
| 14 |
+-----+
保留一个小数
mysql> select round(13.5,1) as rou from class;
+------+
| rou |
+------+
| 13.5 |
| 13.5 |
| 13.5 |
+------+
mysql> select round(135.65,1) as rou from class;
+-------+
| rou |
+-------+
| 135.7 |
| 135.7 |
| 135.7 |
+-------+
保留到十位
mysql> select round(135.65,-1) as rou from class;
+-----+
| rou |
+-----+
| 140 |
| 140 |
| 140 |
+-----+
select 后面可以跟某个表 的字段名(可以等同变量名),也可以跟字面量 字面值 (数据),
- rand() 生成随机数
mysql> select rand() from class;
+----------------------+
| rand() |
+----------------------+
| 0.48039640624113045 |
| 0.008101779975091834 |
| 0.5993197118857128 |
+----------------------+
100 以内的随机数
mysql> select round( rand()*100) from class;
+--------------------+
| round( rand()*100) |
+--------------------+
| 26 |
| 40 |
| 24 |
+--------------------+
- ifnull 可以将null转换成一个具体的值
ifnull 是一个空处理函数,专门处理空的
在所有数据库中,只要有null参与的数学运算,最终结果就是null
注意: null参与运算,最终结果一定是null 。为了避免这个现象,需要使用ifnull函数。
ifnull函数用法: 用ifnull(数据,被当做哪个值)
如果“数据”为null 的时候,把这个数据结构当做哪个值。
case…when…then…when… then…else…end
当A是1的时候,B改变成什么什么,当A是2的时候,B改变成什么什么
(注意:不修改数据库,只是将查询结果显示改变)
分组函数 (多行处理函数)
多行处理函数的特点: 输入多行,最终输出一行
5个:
max 最大
min 最小
count 计数
sum 和
avg 平均数
注意:分组函数在使用的时候必须先进行分组,然后才能用> 如果你没有进行对数据进行分组,就默认吧整张表默认为一组
+----------+
| class_id |
+----------+
| 4 |
| 6 |
| 7 |
+----------+
mysql> select max(class_id) from class;
+---------------+
| max(class_id) |
+---------------+
| 7 |
+---------------+
1 row in set (0.00 sec)
mysql> select min(class_id) from class;
+---------------+
| min(class_id) |
+---------------+
| 4 |
+---------------+
1 row in set (0.00 sec)
mysql> select avg(class_id) from class;
+---------------+
| avg(class_id) |
+---------------+
| 5.6667 |
+---------------+
1 row in set (0.00 sec)
mysql> select sum(class_id) from class;
+---------------+
| sum(class_id) |
+---------------+
| 17 |
+---------------+
1 row in set (0.00 sec)
mysql> select count(class_id) from class;
+-----------------+
| count(class_id) |
+-----------------+
| 3 |
+-----------------+
分组函数注意
-
分组函数自动忽略null,你不需要提前对null进行处理
-
分组函数中count()和count(字段)有什么区别
count (): 统计所有表中的总行数(因为不可能有全为null的行)
count(字段):表示该字段下不为null的元素总和 -
分组函数不能够直接使用where子句中.
分组查询(重要)
- 什么是分组查询
实际生活的需要分组来对数据进行操作
吧一个条件的数据放到一起
select......from .....group by.....
- 执行顺序
select
....
from
...
where
....
group by
.....
order by
.....
严格顺序不能颠倒 , 记
- select
- from
- where
- group by
- order