MySQL常见函数的学习

  概念:类似于Java中的方法,将一组逻辑语句封装到方法体中,对外暴露方法名
  好处:1.隐藏了实现细节  2.提高代码重用性

常见函数分类
(1)单行函数
如:concat(),length(),ifnull()等等
(2)分组函数
主要是做功能统计来用的,如:sum(),avg(),count()等等
又称为:聚合函数,统计函数,组函数

一、单行函数

字符函数
(1)length() 获取字符长度
select length('abc'); 返回:4
(2)concat() 拼接字符串或字段
select concat(last_name,'_',first_name) from employees;
(3)upper() 转大写
select upper('abc') ; 返回:ABC
(4)lower() 转小写
select upper('ABC') ; 返回:abc
(5)substr() 截取字符------注意:SQL索引从1开始
select substr('ABC',2) ; 返回:BC
select substr('ABCDEF',1,3) ; 返回:ABC
(6)instr() 返回字串的索引位置,相当于Java中String.valueOf()
select instr('ABC','AB') ; 返回:1
select instr('ABCDEF','Q') ; 找不到返回:0
(7)trim() 去除前后空格
select trim( ' ABC ') ; 返回:ABC
select trim( 'a' from 'aaaaaAaaaBCaaaaa') ; 返回:AaaaBC
注意:这个不是替换,只能去除前后的字符
(8)lpad() 左填充
select lpad('ABC',5,'') ; 返回:ABC(5代表指定长度)
(9)rpad() 右填充
select rpad('ABC',5,'
') ; 返回:ABC(5代表指定长度)
(10)replace() 替换
select replace('ABC','A','a') ; 返回:aBC
数学函数
(1)round() 四舍五入
select round(1.56); 返回:2
select round(1.567,2); 返回:1.57
(2)ceil() 向上取整
select ceil(1.006); 返回:2
(3)fool() 向下取整
select ceil(9.99); 返回:9
(4)truncate() 截断
select truncate(1.56,1); 返回:1.5
(5)mod() 取余数
select mod(10,3); 返回:1
select 10%3; 返回:1
日期函数
(1)now() 返回系统当前日期+时间
select now(); 返回:2021-1-2 12:00:00
(2)curdate() 返回系统当前日期 (不包含时间)
select curdate(); 返回:2021-1-2
(3)curtime() 返回系统当前时间(不包含日期)
select curtime(); 返回: 12:00:00
(4)获取指定日期的年月日
select YEAR(‘1998-1-1’); 返回: 1998
select MONTH(‘1998-1-1’); 返回: 1
...........
(5)str_to_date() 将字符转化为日期 (重要)
SELECT * FROM employees WHERE hiredate ='1992-4-3'
SELECT * FROM employees WHERE hiredate= STR_TO_DATE('4-3 1992','%c-%d %Y')
(6)date_format() 日期转化为字符 (重要)
SELECT DATE_FORMAT(NOW(),'%Y年%c月%d日') 日期
(7)DATEDIFF(day1,day2) 日期计算 (重要)
SELECT DATEDIFF('2008-12-30','2008-12-29') AS DiffDate 返回:1(day1-day2的天数)

image.png

流程控制函数
(1)if() 相当于if-else
select if(10<5,'大','小') 返回:小
(2)case() 相当于switch case效果
语法:
case 要判断的字段或者是表达式
when 常量1 then 要显示的字段值1或者是语句1;
when 常量2 then 要显示的字段值2或者是语句2;
....
else 要显示的值n或语句n;
end
SELECT salary 原始工资,department_id,
CASE department_id
WHEN 30 THEN salary
1.1
WHEN 40 THEN salary
1.2
ELSE salary
END AS 新工资
FROM employees
(2)case() 相当于多重if效果
语法:
case
when 常量1 then 要显示的字段值1或者是语句1;
when 常量2 then 要显示的字段值2或者是语句2;
....
else 要显示的值n或语句n;
end
SELECT salary,
CASE
WHEN salary>15000 THEN 'A'
WHEN salary>10000 THEN 'B'
ELSE 'D'
END AS 工资级别
FROM employees

二、分组函数

(1)简单使用
SELECT SUM(salary) 求和,ROUND(AVG(salary),2) 平均数, MAX(salary) 最高, MIN(salary) 最低,COUNT(salary) 个数
FROM employees
(2)和distinct 搭配使用
SELECT COUNT(salary),COUNT(DISTINCT salary) FROM employees
(3)count的详细介绍
SELECT COUNT(salary) FROM employees (效率最低!!!)
SELECT COUNT() FROM employees
SELECT COUNT(1) FROM employees
注意:在MYISAM存储引擎下,count(
)效率最高
注意:在MYISAM存储引擎下,count(*)和count(1)效率差不多


三、分组查询

语法:
select 分组函数,列(要求出现在哎group by 后面)
from 表
【where 条件】
group by 分组列
【order by 子句】
注意:查询列表比较特殊,要求是分组函数和group by 后出现的字段
(1)(简单的)每个工种的最高工资
SELECT MAX(salary), job_id FROM employees GROUP BY job_id
(2)查询邮箱中包含a字符的,每个部门的平均工资
SELECT AVG(salary),department_id FROM employees WHERE email LIKE '%a%' GROUP BY department_id
(3)查询那个部门的员工 个数>2
SELECT COUNT(*) 人数,department_id FROM employees GROUP BY department_id HAVING 人数>2
(4)(按多个字段分组) 查询每个部门,每个工种的员工的平均工资
SELECT AVG(salary),department_id ,job_id FROM employees GROUP BY department_id,job_id

四、福利彩蛋,你不知道的排名函数

image.png

你可能感兴趣的:(MySQL常见函数的学习)