我的编程空间,编程开发者的网络收藏夹
学习永远不晚

零基础学MySQL(五)-- 详细讲解数据库中的常用函数

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

零基础学MySQL(五)-- 详细讲解数据库中的常用函数

在这里插入图片描述



在这里插入图片描述


🎇一、聚合函数

提供 student 表
在这里插入图片描述

1️⃣count 函数

count 表示返回行的总数

(1)基本语法

SELECT COUNT(*|列名) FROM 表名WHERE 条件;

(2)基本练习

统计一个班级共有多少学生?

SELECT COUNT(*) FROM student;

统计数学成绩大于 90 的学生有多少个?

SELECT COUNT(*) FROM studentWHERE math > 90;

统计总分大于 250 的人数有多少?

SELECT COUNT(*) FROM studentWHERE (math + english + chinese) > 250

(3)注意细节

count(*) 和 count(列) 的区别:
count(*) 返回满足条件的记录的行数
count(列): 统计满足条件的某列有多少个,但是会排除为 null 的情况

2️⃣sum 函数

sum函数返回满足where条件的行的和,一般使用于数值列

(1)基本语法

SELECT SUM(列名) FROM 表名WHERE 条件;

(2)基本练习

统计一个班级数学总成绩

SELECT SUM(math) FROM student; 

统计一个班级语文、英语、数学各科的总成绩

SELECT SUM(math),SUM(english),SUM(chinese) FROM student; 

统计一个班级语文、英语、数学的成绩总和

SELECT SUM(math + english + chinese) FROM student; 

统计一个班级语文成绩平均分

SELECT SUM(chinese)/ COUNT(*) FROM student;

(3)注意细节

sum 函数仅对数值起作用,对多行求和需用逗号隔开

3️⃣avg 函数

avg函数返回满足where条件的一列的平均值

(1)基本语法

SELECT AVG(列名) FROM 表名WHERE 条件;

(2)基本练习

求一个班级数学平均分?

SELECT AVG(math) FROM student; 

求一个班级总分平均分

SELECT AVG(math + english + chinese) FROM student;

4️⃣max/min 函数

max/min 函数返回满足 where 条件的一列的最大/最小值

(1)基本语法

SELECT MAX(列名) FROM 表名WHERE 条件;SELECT MIN(列名) FROM 表名WHERE 条件;

(2)基本练习

求班级最高分和最低分

SELECT MAX(math + english + chinese), MIN(math + english + chinese) FROM student;

求出班级数学最高分和最低分

SELECT MAX(math), MIN(math) FROM student;

🎆二、字符串相关函数

1️⃣字符串常用函数一览表

函数用法说明
CHARSET(str)返回字串字符集
CONCAT (string2 [,… ])连接字串, 将多个列拼接成一列
INSTR (string ,substring )返回 substring 在 string 中出现的位置,没有返回 0
UCASE (string2)转换成大写
LCASE (string2)转换成小写
LEFT (string2 ,length)从 string2 中的左边起取 length 个字符
RIGHT (string2 ,length)从 string2 中的右边起取 length 个字符
LENGTH (string)string 长度[按照字节]
REPLACE (str ,search_str ,replace_str )在 str 中用 replace_str 替换 search_str
STRCMP (string1 ,string2)逐字符比较两字串大小
SUBSTRING (str , position [,length ])从 str 的 position 开始【从 1 开始计算】,取 length 个字符
LTRIM (string)去除前端空格
RTRIM (string)去除后端空格
TRIM(string)去除前后两端空格

2️⃣案例演示

以 emp 表为例
在这里插入图片描述

-- CHARSET(str) 返回字串字符集SELECT CHARSET(ename) FROM emp;-- CONCAT (string2 [,... ]) 连接字串, 将多个列拼接成一列SELECT CONCAT(ename, '工作是', job) FROM emp;-- INSTR (string ,substring ) 返回 substring 在 string 中出现的位置,没有返回 0-- dual 亚元表, 系统表 可以作为测试表使用SELECT INSTR('jack','c') FROM DUAL;-- UCASE (string2) 转换成大写SELECT UCASE(ename) FROM emp;-- LCASE (string2) 转换成小写SELECT LCASE(ename) FROM emp;-- LEFT (string2 ,length)从 string2 中的左边起取 length 个字符SELECT LEFT(ename,2) FROM emp;-- RIGHT (string2 ,length) 从 string2 中的右边起取 length 个字符SELECT RIGHT(ename,2) FROM emp;-- LENGTH (string)string 长度[按照字节]SELECT LENGTH(ename) FROM emp;SELECT LENGTH('邱崇源') FROM emp;-- 9个字节-- REPLACE (str ,search_str ,replace_str )在 str 中用 replace_str 替换 search_str-- 如果是 manager 就替换成 经理SELECT  ename, REPLACE(job, 'MANAGER', '经理') FROM emp;-- STRCMP (string1 ,string2) 逐字符比较两字串大小SELECT STRCMP('abc','bbc') FROM emp;-- SUBSTRING (str , position [,length ])-- 从 str 的 position 开始【从 1 开始计算】,取 length 个字符-- 从 ename 列的第一个位置开始取出 2 个字符SELECT SUBSTRING(ename,1,2) FROM emp;-- LTRIM (string2 ) RTRIM (string2 ) TRIM(string)-- 去除前端空格或后端空格SELECT LTRIM(' 邱崇源') FROM DUAL;SELECT RTRIM('邱崇源 ') FROM DUAL;SELECT TRIM(' 邱崇源 ') FROM DUAL;

✨三、数学相关函数

1️⃣数学常用函数一览表

函数用法说明
ABS(num)绝对值
BIN (decimal_number)十进制转二进制
CEILING (number2)向上取整, 得到比 num2 大的最小整数
CONV(number2,from_base,to_base)进制转换
FLOOR (number2)向下取整,得到比 num2 小的最大整数
FORMAT (number,decimal_places)保留小数位数(四舍五入)
HEX (DecimalNumber)转十六进制
LEAST (number , number2 [,…])求最小值
MOD (numerator ,denominator)求余
RAND([seed])返回随机数 其范围为 0 ≤ v ≤ 1.0

2️⃣案例演示

-- 演示数学相关函数-- ABS(num) 绝对值SELECT ABS(-10) FROM DUAL; -- BIN (decimal_number )十进制转二进制SELECT BIN(10) FROM DUAL; -- CEILING (number2 ) 向上取整, 得到比 num2 大的最小整数SELECT CEILING(-1.1) FROM DUAL; -- CONV(number2,from_base,to_base) 进制转换-- 下面的含义是 8 是十进制的 8, 转成 2 进制输出SELECT CONV(8, 10, 2) FROM DUAL; -- 下面的含义是 8 是 16 进制的 8, 转成 2 进制输出SELECT CONV(16, 16, 10) FROM DUAL; -- FLOOR (number2 ) 向下取整,得到比 num2 小的最大整数SELECT FLOOR(1.1) FROM DUAL;-- FORMAT (number,decimal_places ) 保留小数位数(四舍五入)SELECT FORMAT(78.125458,2) FROM DUAL; -- HEX (DecimalNumber ) 转十六进制-- LEAST (number , number2 [,..]) 求最小值SELECT LEAST(0,1, -10, 4) FROM DUAL; -- MOD (numerator ,denominator ) 求余SELECT MOD(10, 3) FROM DUAL;-- RAND([seed]) 返回随机数 其范围为 0 ≤ v ≤ 1.0-- 说明-- 1. 如果使用 rand() 每次返回不同的随机数 ,在 0 ≤ v ≤ 1.0-- 2. 如果使用 rand(seed) 返回随机数, 范围 0 ≤ v ≤ 1.0, 如果 seed 不变,-- 该随机数也不变了SELECT RAND() FROM DUAL;

🎄四、时间日期相关函数

1️⃣时间日期常用函数一览表

函数用法说明
CURRENT_DATE ( )当前日期
CURRENT_TIME ( )当前时间
CURRENT_TIMESTAMP ( )当前时间戳
DATE_ADD(send_time, INTERVAL d_value d_type)在date2中加上一个日期或时间
DATE_SUB(send_time, INTERVAL d_value d_type)在date2中减去一个日期或时间
DATEDIFF(date1,date2)两个日期差(结果是天)
TIMEDIFF(date1,date2)两个时间差(结果是多少小时多少分钟多少秒)
NOW()当前时间
YEAR/Month/DAY (datetime)取时间的年月日
unix_timestamp()返回的是 1970-1-1 到现在的秒数
FROM_UNIXTIME()可以把一个 unix_timestamp 秒数[时间戳],转成指定格式的日期

2️⃣案例演示

建立mes表

CREATE TABLE mes (id INT,content VARCHAR(30),send_time DATETIME);INSERT INTO mes VALUES(1,'界面打开',CURRENT_TIMESTAMP());INSERT INTO mes VALUES(2,'鸡腿肉',NOW());INSERT INTO mes VALUES(3,'圣诞狗狗',NOW());
-- 日期时间相关函数-- CURRENT_DATE ( ) 当前日期SELECT CURRENT_DATE() FROM DUAL; -- CURRENT_TIME ( )当前时间SELECT CURRENT_TIME() FROM DUAL; -- CURRENT_TIMESTAMP ( ) 当前时间戳SELECT CURRENT_TIMESTAMP() FROM DUAL;-- 显示所有新闻信息,发布日期只显示 日期,不用显示时间.SELECT id,content,DATE(send_time) FROM mes;-- 请查询在 10 分钟内发布的新闻, 思路一定要梳理一下.SELECT * FROM mes WHERE DATE_ADD(send_time, INTERVAL 10 MINUTE) >= NOW();-- 请在 mysql 的 sql 语句中求出 2011-11-11 和 1990-1-1 相差多少天SELECT DATEDIFF('2011-11-11','1990-01-01') FROM DUAL;-- 请用 mysql 的 sql 语句求出你活了多少天?SELECT DATEDIFF(NOW(),'2000-05-24') FROM DUAL;-- 如果你能活 80 岁,求出你还能活多少天.SELECT DATEDIFF('2080-05-24',NOW()) FROM DUAL;SELECT TIMEDIFF('10:11:11', '06:10:10') FROM DUAL; -- YEAR|Month|DAY| (datetime)SELECT YEAR(NOW()) FROM DUAL;SELECT MONTH(NOW()) FROM DUAL;SELECT DAY(NOW()) FROM DUAL;-- unix_timestamp() : 返回的是 1970-1-1 到现在的秒数SELECT UNIX_TIMESTAMP() FROM DUAL; -- FROM_UNIXTIME() : 可以把一个 unix_timestamp 秒数[时间戳],转成指定格式的日期-- %Y-%m-%d 格式是规定好的,表示年月日-- 意义:在开发中,可以存放一个整数,然后表示时间,通过 FROM_UNIXTIME 转换SELECT FROM_UNIXTIME(1672307500, '%Y-%m-%d %H:%i:%s');

🍱五、加密和系统函数

1️⃣加密和系统函数一览表

函数用法说明
USER()查询用户
DATABASE()查询当前使用数据库名称
MD5(str)为字符串算出一个 MD5 32 的字符串,常用(用户密码)加密
PASSWORD(str)加密函数, MySQL 数据库的用户密码就是 PASSWORD 函数加密

2️⃣案例演示

-- 演示加密函数和系统函数-- USER() 查询用户-- 可以查看登录到 mysql 的有哪些用户,以及登录的 IPSELECT USER() FROM DUAL; -- 用户@IP 地址-- DATABASE()查询当前使用数据库名称SELECT DATABASE(); -- MD5(str) 为字符串算出一个 MD5 32 的字符串,常用(用户密码)加密-- root 密码是 qcy -> 加密 md5 -> 在数据库中存放的是加密后的密码SELECT MD5('qcy') FROM DUAL;SELECT LENGTH(MD5('qcy')); -- 32-- PASSWORD(str) -- 加密函数, MySQL 数据库的用户密码就是 PASSWORD 函数加密SELECT PASSWORD('qcy') FROM DUAL;

🎋六、流程控制函数

1️⃣流程控制函数一览表

函数用法说明
IF(expr1,expr2,expr3)如果 expr1 为 True ,则返回 expr2 否则返回 expr3
IFNULL(expr1,expr2)如果 expr1 不为空 NULL,则返回 expr1,否则返回 expr2
SELECT CASE WHEN expr1 THEN expr2 WHEN expr3 THEN expr4 ELSE expr5 END; [类似多重分支.]如果 expr1 为 TRUE,则返回 expr2,如果 expr3 为 TRUE, 返回 expr4, 否则返回 expr5

2️⃣案例演示

# 演示流程控制语句# IF(expr1,expr2,expr3) 如果 expr1 为 True ,则返回 expr2 否则返回 expr3SELECT IF(TRUE, '北京', '上海') FROM DUAL;# IFNULL(expr1,expr2) 如果 expr1 不为空 NULL,则返回 expr1,否则返回 expr2SELECT IFNULL( NULL, '韩顺平教育') FROM DUAL;# SELECT CASE WHEN expr1 THEN expr2 WHEN expr3 THEN expr4 ELSE expr5 END; [类似多重分支.]# 如果 expr1 为 TRUE,则返回 expr2,如果 expr3 为 TRUE, 返回 expr4, 否则返回 expr5SELECT CASEWHEN TRUE THEN 'jack' -- jackWHEN FALSE THEN 'tom' ELSE 'mary' END-- 1. 查询 emp 表, 如果 comm 是 null , 则显示 0.0-- 说明,判断是否为 null 要使用 is null, 判断不为空 使用 is not nullSELECT ename,IFNULL(comm,0.0) FROM emp;-- 2. 如果 emp 表的 job 是 CLERK 则显示 职员, 如果是 MANAGER 则显示经理-- 如果是 SALESMAN 则显示 销售人员,其它正常显示SELECT ename, (SELECT CASEWHEN job = 'CLERK' THEN '职员' WHEN job = 'MANAGER' THEN '经理' WHEN job = 'SALESMAN' THEN '销售人员' ELSE job END) AS 'job' FROM emp;

来源地址:https://blog.csdn.net/programmerchiu/article/details/128988964

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

零基础学MySQL(五)-- 详细讲解数据库中的常用函数

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

零基础学MySQL(五)-- 详细讲解数据库中的常用函数

目录 🎇一、聚合函数1️⃣count 函数(1)基本语法(2)基本练习(3)注意细节 2️⃣sum 函数(1)基本语法(2)基本练习(3)注意细节 3️⃣avg 函数(1)基本语法(2)基本练习
2023-08-16

零基础学MySQL(四)-- 数据库最常用的操作【查询基础篇 -- 单表查询】

目录 📔一、最简单的 select 语句1️⃣基本语法2️⃣基本练习3️⃣补充说明(1) 使用表达式对查询的列进行运算(2) 在 select 语句中可使用 as 语句取别名 📕
2023-08-21

MySQL数据库基础学习之JSON函数各类操作详解

目录前言一、jsON语法规则二、JSON函数1.JSON_CONTAINS(json_doc,value)函数2.JSON_SEARCH()函数 3.JSON_PRETTY(json_doc)函数4.JSON_DEPTH(json_doc)
2023-02-17

【从删库到跑路】详细讲解MySQL的函数和约束作用

🎊专栏【MySQL】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 文章目录 🍔
2023-08-16

【MySQL】MySQL数据库,RDBMS 术语,使用说明和报错解决的详细讲解

作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 M
2023-08-18

编程热搜

目录