MYSQL学习整理(4):函数

MYSQL零基础小白,梳理学习内容督促自己,也为方便自己日后回忆,也希望可以帮助到网友。

这里推荐宋红康老师的MySQL课程,学习资源(如有侵权请联系删除):

MySQL数据库教程天花板,mysql安装到mysql高级,强!硬!_哔哩哔哩_bilibili

前文链接:

MYSQL学习整理(1):概述与SELECT指令

MYSQL学习整理(2):运算符

MYSQL学习整理(3)排序与分页、多表查询



第六章 函数

这部分感觉没有什么特别值得说的,各种程序语言大同小异,记得在函数前加上SELECT.

单行函数

函数用法

mysql> SELECT POW(2,5),POWER(2,4),EXP(2),LN(10),LOG10(10),LOG2(4)
-> FROM DUAL;
+----------+------------+------------------+-------------------+-----------+---------+
| POW(2,5) | POWER(2,4) | EXP(2) | LN(10) | LOG10(10) | LOG2(4) |
+----------+------------+------------------+-------------------+-----------+---------+
| 32 | 16 | 7.38905609893065 | 2.302585092994046 | 1 | 2 |
+----------+------------+------------------+-------------------+-----------+---------+
1 row in set (0.00 sec) 

 时间函数

SELECT
CURDATE(),CURTIME(),NOW(),SYSDATE()+0,UTC_DATE(),UTC_DATE()+0,UTC_TIME(),UTC_TIME()+0
FROM DUAL;

SELECT YEAR(CURDATE()),MONTH(CURDATE()),DAY(CURDATE()),
HOUR(CURTIME()),MINUTE(NOW()),SECOND(SYSDATE())
FROM DUAL;


除此外还有加减时间的函数,需要时查询即可。

流程控制函数

流程处理函数可以根据不同的条件,执行不同的处理流程,可以在SQL语句中实现不同的条件选择。
MySQL中的流程处理函数主要包括IF()、IFNULL()和CASE()函数。

IF(value,value1,value2)如果value的值为TRUE,返回value1,
否则返回value2
IFNULL(value1, value2)如果value1不为NULL,返回value1,否
则返回value2
CASE WHEN条件1 THEN 结果1 WHEN 条件2 THEN 结果2
.... [ELSE resultn] END
CASE expr WHEN常量值1 THEN 值1 WHEN 常量值1 THEN
值1 .... [ELSE 值n] END

SELECT IF(1 > 0,'正确','错误')
->正确

SELECT employee_id,salary, CASE WHEN salary>=15000 THEN '高薪'
WHEN salary>=10000 THEN '潜力股'
WHEN salary>=8000 THEN '屌丝'
ELSE '草根' END "描述"
FROM employees;

聚合函数

聚合函数作用于一组数据,并对一组数据返回一个值。

  • AVG()#均值
  • SUM()#和
  • MAX()#最大值
  • MIN()#最小值
  • COUNT()#计数

SELECT AVG(salary), MAX(salary),MIN(salary), SUM(salary)
FROM employees
WHERE job_id LIKE '%REP%'; 

GROUP BY 函数

可以使用GROUP BY子句将表中的数据分成若干组

SELECT column, group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];

注:WHERE一定放在FROM后面,GROUP BY 中内容不必再SELECT里。

SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id ;

多列分组:

SELECT department_id dept_id, job_id, SUM(salary)
FROM employees
GROUP BY department_id, job_id ;

#即先按部门id分类,再按工作id分类

使用WITH ROLLUP 关键字之后,在所有查询出的分组记录之后增加一条记录,该记录计算查询出的所有记录的总和,即统计记录数量。

SELECT department_id,AVG(salary)
FROM employees
WHERE department_id > 80
GROUP BY department_id WITH ROLLUP;

HAVEING 函数

与WHERE作用基本相同,过滤

使用要求:

  • 行已经被分组。
  • 使用了聚合函数。
  • 满足HAVING 子句中条件的分组将被显示。
  • AVING 不能单独使用,必须要跟 GROUP BY 一起使用。

SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary)>10000 ;

查询结构

#方式1:
SELECT ...,....,...
FROM ...,...,....
WHERE 多表的连接条件
AND 不包含组函数的过滤条件
GROUP BY ...,...
HAVING 包含组函数的过滤条件
ORDER BY ... ASC/DESC
LIMIT ...,...
#方式2:
SELECT ...,....,...
FROM ... JOIN ...
ON 多表的连接条件
JOIN ...
ON ...
WHERE 不包含组函数的过滤条件
AND/OR 不包含组函数的过滤条件
GROUP BY ...,...
HAVING 包含组函数的过滤条件
ORDER BY ... ASC/DESC
LIMIT ...,...
#其中:
#(1)from:从哪些表中筛选
#(2)on:关联多表查询时,去除笛卡尔积
#(3)where:从表中筛选的条件
#(4)group by:分组依据
#(5)having:在统计结果中再次筛选
#(6)order by:排序
#(7)limit:分页

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值