200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 【MySQL】数据库函数通关教程上篇(聚合 数学 字符串 日期 控制流函数)

【MySQL】数据库函数通关教程上篇(聚合 数学 字符串 日期 控制流函数)

时间:2020-12-20 15:00:07

相关推荐

【MySQL】数据库函数通关教程上篇(聚合 数学 字符串 日期 控制流函数)

💁个人主页:黄小黄的博客主页

❤️支持我:👍 点赞 🌷 收藏 🤘关注

🎏格言:一步一个脚印才能承接所谓的幸运

本文来自专栏:MySQL8.0学习笔记

本文参考视频:MySQL数据库全套教程

欢迎点击支持订阅专栏 ❤️

写在前面

  本文将 mysql 数据库中函数的相关知识进行了总结,并提供案例供大家吸收学习。需要注意的是对于聚合函数、数学函数、字符串函数、日期函数只需要会使用并熟悉即可,想不起来的时候可以在本文中查询相应的函数。对于控制流函数,在实际查询的时候使用频率还是比较高的,需要重点掌握。特别地,自 mysql 8.0开始新增了窗口函数,新技术还是需要学习的,在下篇中你可以学习到窗口函数包括序号函数、开窗聚合函数、分布函数等,记得关注数据库函数通关教程(下)哦。

文章目录

写在前面1 聚合函数1.1 GROUP_CONCAT()1.2 其他聚合函数2 数学函数3 字符串函数4 日期函数4.1 常见日期函数与使用4.2 日期格式5 控制流函数5.1 if逻辑判断语句5.2 case when语句写在最后

1 聚合函数

1.1 GROUP_CONCAT()

🆔简介:

group_concat()函数首先根据group by指定的列进行分组,并且根据分隔符分隔,默认为 ‘,’,将同一个分组的值连接起来,返回一个字符串结果。

🍑语法格式:

GROUP_CONCAT([DISTINCT] 字段名 [ORDER BY 排序字段 ASC/DESC] [SEPARATOR '分隔符']);

⭕️操作示例:

  首先我们需要通过下面的代码创建一个表,而后录入一些数据(随意就行),示例代码及数据表示例如下:

CREATE TABLE emp (eid VARCHAR (20) NOT NULL PRIMARY KEY,ename VARCHAR (20) NULL,age INT NULL,dept_id VARCHAR (20) NULL);

  基于此表,简单举例,一段代码对应一个运行结果,供大家理解此函数的作用。

示例1️⃣将所有名字合并成一行,并以爱心分隔

SELECT GROUP_CONCAT(ename SEPARATOR '♥')FROM emp;

示例2️⃣将所有名字合并成一行,要求根据部门号进行分组,并以年龄总和降序展示

SELECT SUM(age) age_sum, GROUP_CONCAT(ename)FROM empGROUP BY dept_idORDER BY age_sum DESC;

1.2 其他聚合函数

 由于博主之前的文章涉及到这些函数的实例,这里就不一一赘述啦,链接附上,详细请见文章中的聚合查询与聚合函数:

【MySQL】DQL数据查询详细学习教程(完整版)

2 数学函数

🍎常用数学函数一览表:

🖊示例代码:

Tips: 答案在代码注释里哦~~~

SELECT ABS(-10); -- 10SELECT CEIL(8.8); -- 9SELECT CEIL(-8.8); -- -8SELECT FLOOR(8.8); -- 8SELECT FLOOR(-8.8); -- -9SELECT GREATEST(-1,1,2,3,4,5,6); -- 6SELECT LEAST(-1,1,2,3,4,5,6); -- -1SELECT MOD(2.5, 2); -- 0.5SELECT MOD(2.5, -2); -- 0.5SELECT MOD(-2.5, 2); -- -0.5SELECT MOD(-2.5, -2); -- -0.5SELECT ROUND(5.532); -- 6SELECT ROUND(5.532, 1); -- 5.5SELECT TRUNCATE(6.67, 1); -- 6.6

3 字符串函数

🐱常用字符串函数一览表:

🖊示例代码:

Tips: 答案在代码注释里哦~~~

-- 1.按照字节求长度,注意 utf-8 英文 1 字节 汉字 3 字节SELECT LENGTH('hello'); -- 5SELECT LENGTH('祢豆子'); -- 9-- 2.求字符串长度SELECT CHAR_LENGTH('祢豆子'); -- 3-- 3.合并字符串SELECT CONCAT('我','是','祢豆子'); -- 我是祢豆子SELECT CONCAT_WS('!','我','是','祢豆子'); -- 我!是!祢豆子-- 4.返回字符串在列表的第一个位置,没有则返回0SELECT FIELD('Nezuko','大头','小牛马','Nezuko','几何心凉','Nezuko'); -- 3SELECT FIELD('小鹏','大头','小牛马'); -- 0-- 5.去除空格SELECT LTRIM(' Nezuko'); -- NezukoSELECT RTRIM('Nezuko '); -- NezukoSELECT TRIM(' Nezuko '); -- Nezuko-- 6.字符串截取SELECT MID('我是祢豆子',3,3); -- 祢豆子-- 7.获取位置SELECT POSITION('627' IN 'Nezuko627'); -- 7-- 8.替换字符SELECT REPLACE('是你的大头大头','大头','小牛马'); -- 是你的小牛马小牛马-- 9.反转字符串SELECT REVERSE('我喜欢你'); -- 你欢喜我-- 10.返回字符串后几个字符SELECT RIGHT('Nezuko627',3); -- 627-- 11.字符串比较SELECT STRCMP('abc','abc'); -- 0SELECT STRCMP('azc','abc'); -- 1SELECT STRCMP('abcd','abcdzzzzzz'); -- -1

📖小提示:在字符串比较中,比较的是字典顺序,比如 b > a。

4 日期函数

日期函数相关内容大家了解下即可,需要使用的时候回过头来再查找。

4.1 常见日期函数与使用

🐘常用日期函数一览表:

🖊示例代码:

Tips: 答案在代码注释里哦~~~

-- 1.获取时间戳SELECT UNIX_TIMESTAMP(); -- 1653890515-- 2.将一个日期转化为毫秒值SELECT UNIX_TIMESTAMP('-05-30 14:02:57'); -- 1653890577-- 3.将时间戳转化为指定格式的日期SELECT FROM_UNIXTIME(1653890577,'%Y-%m-%d %H-%i-%s'); -- -05-30 14-02-57-- 4.获取当前年月日SELECT CURDATE(); -- -05-30-- 5.获取当前时分秒SELECT CURRENT_TIME(); -- 14:05:30-- 6.获取当前时间包括年月日时分秒SELECT CURRENT_TIMESTAMP(); -- -05-30 14:07:12-- 7.获取日期之间的差值(天)SELECT DATEDIFF('-05-30','-07-23'); -- 5059-- 8.获取时间差值SELECT TIMEDIFF('17:00:00','16:00:00'); -- 01:00:00-- 9.日期格式化SELECT DATE_FORMAT('-6-1 14:16:5','%Y-%m-%d %H-%i-%s'); -- -06-01 14-16-05-- 10.日期加减SELECT DATE_ADD('-06-01',INTERVAL 1 DAY); -- -06-02SELECT DATE_SUB('-06-01',INTERVAL 1 DAY); -- -05-31-- 11.从日期中获取年、日、月SELECT EXTRACT(YEAR FROM '-06-01'); -- SELECT EXTRACT(DAY FROM '-06-01'); -- 1SELECT EXTRACT(MONTH FROM '-06-01'); -- 6

4.2 日期格式

🐍日期格式附表:

5 控制流函数

5.1 if逻辑判断语句

案例1️⃣:查询判断成绩是否优秀

  首先先准备下面的数据表,具体数据如图,数据表结构代码如下:

CREATE TABLE IF NOT EXISTS student(name VARCHAR(20),score INT);INSERT INTO student VALUES ('祢豆子', 95);INSERT INTO student VALUES ('漩涡鸣人', 85);INSERT INTO student VALUES ('佐助', 75);INSERT INTO student VALUES ('路飞', 55);INSERT INTO student VALUES ('乔巴', 45);

  下面使用逻辑判断语句进行确定是否优秀,并查询,参考代码及结果如下:

SELECT *, IF(score >= 85, '优秀', '不优秀') 'grade'FROM student;

❓ 这里我们仅仅将成绩分成了两类:优秀与不优秀。可是实际情况是成绩分为良好、及格与不及格,但是 if 逻辑判断语句却不能很好的解决,那我们究竟该如何操作才能将成绩分成3类呢?我们引入 case when 语句。

5.2 case when语句

🍌语法格式:

CASE expressionWHEN condition1 THEN result1WHEN condition2 THEN result2...WHEN conditionN THEN resultNELSE resultEND

📖说明:

CASE表示函数的开始,END表示函数的结束,如果condition1成立,则返回result1,以此类推… … 如果都不成立,则返回ELSE后的result

案例2️⃣:将成绩分为良好、及格与不及格三类

  我们还是使用案例1的数据表,并通过 case when函数来实现:

SELECT *,CASE scoreWHEN score >= 85 THEN '良好'WHEN score >= 60 THEN '及格'ELSE '不及格'END AS 'grade'FROM student;

写在最后

🌟以上便是本文的全部内容啦,后续内容将会持续免费更新,如果文章对你有所帮助,麻烦动动小手点个赞 + 关注,非常感谢 ❤️ ❤️ ❤️ !

如果有问题,欢迎私信或者评论区!

共勉:“你间歇性的努力和蒙混过日子,都是对之前努力的清零。”

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。