MySQL 基础 ————高频函数总结

一、MySQL函数调用方式

函数调用的基本语法:

SELECT 函数(实参列表)  [FROM 表]

其中,对于函数,需要重点关注三点:

1、函数的名称

2、参数列表

3、函数功能

二、函数的分类

在 MySQL中,函数分为两类:1、单行函数;2、分组函数

2.1 单行函数

单行函数有 concat、length、ifnull 等。单行函数下还有多种分类。

2.1.1 字符函数

字符函数的参数类型就是 varchar 。常用的字符函数有:

1、大小写控制函数:LOWER()、UPPER()。

SELECT LOWER('MORTY'),UPPER('morty') ;

2、字符控制函数:

CHAR_LENGTH(str) : 返回字符串的字符个数。

select char_length('中国') 字符数,CHAR_LENGTH('Morty') 字符数,CHARACTER_LENGTH('中国') 字符数,length('中国') 字节数;

tip:查看字符集的语句:SHOW VARIABLES LIKE '%char%';

CONCAT(str1, str2, ...) : 拼接多个字符串

SELECT CONCAT('中国', '-', '香港') 地市,CONCAT('Jack', '_', 'Morty') 姓名,CONCAT(UPPER('Hello'), ' ', LOWER('WORLD')) 问候 ;

SUBSTR(str, pos [, len]) : 截取字符串,下标从 1 开始,len代表需要截取字符数,不指定则截取到最后。

SELECT 
'中国人民共和国建国70周年' 原始,
SUBSTR('中国人民共和国建国70周年', 2) 截取后,
SUBSTR('中国人民共和国建国70周年',3, 5) 截取后;

# 姓名中首字符大写
SELECT emp_name 原始,CONCAT(UPPER(SUBSTR(emp_name, 1, 1)),LOWER(SUBSTR(emp_name, 2))) last_name 
FROMemp 

INSTR(str, substr) : 返回子串第一次出现的索引,如果找不到返回 0

SELECT INSTR('我和我的祖国', '祖国') 第一次出现, INSTR('我和我的祖国', '中国') 没有子串;

TRIM(str) : 去掉前后空格

SELECT TRIM('   我们  不一 样   ') 去前后空格;

LPAD(str, len, padstr) : 左补指定字符串,且总长度是 len 个字符。注意,padstr 可以是多个字符,但最终字符数必须是 len。RPAD(...) 右补同理。

SELECT 
LPAD('美景东方小区', 10, 'abc') 左补多个字符,
LPAD('美景东方小区', 10, '*') '左补*';

REPLACE(str, fromstr, tostr) : 替换子串

SELECT REPLACE('王建国,你好', '王', '李') 替换;

 

也可以修改字段内的个别文字,如:

UPDATE 表名 SET 列名 = REPLACE(列名, '原内容', '新内容') WHERE 条件;

 

2.1.2 数学函数

1、ROUND(x  [, d])   四舍五入(计算规则:先算绝对值,在加正负号),如果是两个参数,则第二个参数代表保留小数点后位数。

SELECT ROUND(1.65), ROUND(-1.45), ROUND(-1.5);

SELECT ROUND(1.65, 1), ROUND(-1.453, 2);

2、CEIL(x) 向上取整,返回 >= 该参数的最近整数,FLOOR(x) 向下取整,返回 <= 该参数的最近整数。

SELECT FLOOR(1.52), CEIL(1.00), CEIL(-1.02);

3、TRUNCATE(x, d) : 小数截取,保留小数后指定位数。

SELECT TRUNCATE(1.65, 1);

4、MOD(a, b) : 取余运算。不论正负,都可以套用公式:a - a/b * b,除法运算要取整。规律:结果值符号与被除数相同。mod()运算与 % 的效果是相同的。

SELECT MOD(10, 3), MOD(-10, 3), MOD(-10, -3), -10 % -3;

5、RAND() :取得 [0, 1) 之间的随机数,可以配合其他函数一起使用,另外,该函数可以接收一个种子值,这个种子值会对应一个不变的随机数,只要种值不变,生成的随机数就不会改变。另外,获取 [ a, b ] 之间的整数公式是:

FLOOR(a + RAND() * (b - a + 1))

SELECT RAND(1),RAND(1),RAND(),RAND(),FLOOR(RAND() * 100) 组合;

2.1.3 日期函数

1、获取当前系统时间,获取当前日期,获取当前时间,获取年份:

SELECT NOW(),CURDATE(),CURTIME(),YEAR('2019-10-20') 年,YEAR(NOW()) 年,YEAR(CURDATE()) 年,YEAR(CURTIME()) 年 ;

2、获取月份:MONTH()、MONTHNAME()、其他的日、时、分、秒 类似。

SELECT MONTH(NOW()),MONTH(CURTIME()),MONTHNAME('2019-10-20') ;

3、STR_TO_DATE(str, format) 将日期字符串按照指定格式解析为日期

SELECT * FROM emp WHERE hiredate = '2019-10-15';
SELECT * FROM emp WHERE hiredate = STR_TO_DATE('10-15 2019', '%m%d %Y');

 

4、DATE_FORMAT(date, format) 日期格式化

SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日') 日期格式化;

SELECT LEFT(DATE_FORMAT(CURRENT_TIMESTAMP(3),'%Y-%m-%d %H:%i:%s.%f'),23) 当前时间 ;

 

5、DATEDIFF(expr1, expr2) 相差天数

SELECT DATEDIFF(NOW(), '2019-10-18') 相差天数;

2.1.4 其他函数

1、VERSION()   版本号

2、DATABASE()  查看当前数据库

3、USER()  查看当前用户

4、PASSWORD(str)  给字符串加密,类似还有MD5(str) 等。

SELECT VERSION(),DATABASE(),USER(),PASSWORD('123'),MD5('123') ;

2.1.5 流程控制函数

1、IF(expr1, expr2, expr3)   三目运算符

SELECT IF(1 = 1, 'true', FALSE) 真,IF(1 = 2, 'true', FALSE) 假,IF(FALSE = 0, 'true', FALSE) 真;

2、IFNULL(a, b)  判空,若a 为 null ,则输出 b ,否则直接输出 a.

SELECT *,IFNULL(manager_id, 0) 去NULL 
FROM`emp` ;

3、CASE...WHEN  类似 switch 和 多重 if。

案例,查询高中老师的工资,由于学校偏理科,为积极引进文科老师,所有文科老师根据学科享有一定的工资加成:

SELECT t.`teacher_id`, t.`teacher_name`, l.`lesson_name`,t.salary 原始工资,IFNULL(CASE l.`lesson_name` WHEN '语文' THEN salary * 0.1 WHEN '外语' THEN salary * 0.2 WHEN '政治' THEN salary * 0.3 WHEN '历史' THEN salary * 0.5 WHEN '生物' THEN salary * 0.3 END, 0.0) 工资加成 
FROMteacher t, lesson l 
WHERE t.`lesson` = l.`lesson_id` ;

2.2 分组函数(聚合函数)

分组函数一般用作统计使用,又称组函数、聚合函数 或 统计函数。

2.2.1 高频分组函数

1、SUM()  求和函数

2、AVG()  求平均值

3、MIN()、MAX() 求最大最小值

4、COUNT(column) 求某列非 NULL 值的记录个数

SELECT SUM(salary),ROUND(AVG(salary), 2),MIN(salary),MAX(salary),COUNT(salary) 
FROMteacher ;

这些函数的特点:

1、SUM、AVG 用于处理数值型

2、MAX、MIN、COUNT 可以用于处理任何类型

3、所有的分组函数都忽略 NULL 值。

2.2.2 与 DISTINCT 的搭配用法

所有的分组函数都可以与DISTINCT关键字进行搭配使用。

SELECT SUM(salary) 原求和,SUM(DISTINCT salary) 去重求和,COUNT(salary) 原工资数量,COUNT(DISTINCT salary) 去重工资种类 
FROMteacher ;

2.2.3 COUNT 函数详解

COUNT() 函数除了可以统计指定字段非null 的行数,除了可以统计指定字段非null 的行数:

SELECT COUNT(*) 学生总数 FROM student;

另外,在 COUNT()参数中加一个常量值相当于在表中加了一列,然后统计这个列的记录数。比如:SELECT COUNT(1) FROM 表名;  或者SELECT COUNT(2)、SELECT COUNT('xxx')等,都是同样的意思。

但是,效率上,需要分具体的数据库引擎来看:

MYISAM 存储引擎下,COUNT(*)效率最高,因为其内部有一个计数器,会直接返回行号。

INNODB引擎下,COUNT(*) 和 COUNT(1) 效率差不多,但是比 COUNT(字段) 效率高,因为查询字段的 COUNT(column) 函数需要判断是否为null。 

因此,一般情况下,如果要进行全记录数量统计,直接使用 COUNT(*)  是最好的选择。

2.2.4 和分组函数一同查询的字段

由于分组函数查询结果都是一个值,因此不能和某些可以查询出多行的字段一同查询,比如:

SELECT AVG(salary), id FROM emp;   # 这条语句虽然不会报错,但是其结果不具备太大意义

这种SQL语句虽然不会报错,但是已经不具有什么意义了。因此,与分组函数可以一同查询的字段一般是 GROUP BY 后的字段。

综上,就是关于MySQL中高频函数的总结和测试,后期如果遇到更多的函数,也会在这里追加总结的。欢迎文末留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 高级 —— 复合索引简介(多列索引)

引言 复合索引是指包含多个数据列的索引&#xff0c;与之概念相对的是单列索引&#xff0c;仅包含一个数据列。在大多数情况下&#xff0c;建立多列索引的好处都要多于单列索引。另外&#xff0c;复合索引最多支持16个列&#xff0c;但请一定不要让复合索引包含太多的列&#…

MySQL 高级 —— 索引实现的思考

引言 最近看了一个公开课&#xff0c;是有关MySQL对索引设计的思考。详细讲解了几种索引实现的设计思考与利弊辨析&#xff0c;讨论了为什么MySQL默认情况下会使用B树索引&#xff0c;B树索引又对B树做了哪些结构改进。 本片博客通过个人的学习理解和总结&#xff0c;由几种简…

Git 初学札记(十)—— Reset 回退的三种状态解析

引言 工作中经常会涉及到需要本地代码覆盖更新的操作。有时候可能是从远端git 上直接覆盖更新&#xff0c;或者是其他本地分支覆盖更新当前分支等等。这个时候就需要用到 reset 操作。 reset 操作分为三种类型&#xff1a;Soft、Mixed、Hard。今天我们就来说说这三种类型究竟…

MySQL 高级 —— 深入理解 InnoDB 与 MyISAM

引言 在文件系统中&#xff0c;MySQL将每个数据库&#xff08;也可以称之为schema&#xff09;保存为数据目录下的一个子目录。创建表时&#xff0c;MySQL会在数据库子目录下创建一个与表同名的.frm文件保存表的定义。因为MySQL使用文件系统的目录和文件来保存数据库和表的定义…

关于 OutOfMemoryError 的总结与解决方法

引言 本文总结自周志明的《深入理解Java虚拟机》第二章部分内容。 这部分内容&#xff0c;可以为后续性能调优方面的工作起到铺垫作用。 一、什么是 OutOfMemoryError OurOfMemory 简称“OOM”&#xff0c; 直译为“内存耗尽”或“内存溢出”&#xff0c;当然&#xff0c;并…

Windows误关闭资源管理器重启的办法

引言 有时候Windows系统在开机后&#xff0c;在桌面底部的任务栏中无法正常加载必要的网络连接图标或音量图标等&#xff0c;导致无法手动操作音量或连接网络。这时候就会需要打开“任务管理器”重新启动“资源管理器”使其重新加载这些必要的控制图标。 但是由于操作失误&am…

MySQL高级 —— 高性能索引

引言 最近一直在抱着《高性能MySQL&#xff08;第三版&#xff09;》研究MySQL相关热点问题&#xff0c;诸如索引、查询优化等&#xff0c;这阶段的学习是前一段时间MySQL基础与官方的“阅读理解”的进一步延伸。 书中第五章详细阐述了如何设计高性能的索引&#xff0c;以及索…

MySQL高级 —— 查询性能优化

引言 承接《MySQL高级 —— 高性能索引》&#xff0c;本篇博客将围绕《高性能MySQL&#xff08;第三版&#xff09;》第六章内容进行总结和概括。 与索引的部分一样&#xff0c;SQL优化也是广大程序员深入MySQL的又一条必经之路。希望通过本篇博客的总结&#xff0c;能够为我…

Java常用设计模式————适配器模式

引言 由于无法直接使用某个类中的方法而采取的一种中间类转换的策略。将一个类的接口转换成另一个接口&#xff0c;让原本接口不兼容的类可以兼容。 适配器模式可以分为三种&#xff1a;类适配器、对象适配器、接口适配器。它们之间的区别主要体现在适配器角色与被适配角色之…

Java常用设计模式————桥接模式

引言 在实际的业务中&#xff0c;经常会遇到多维度的概念组合&#xff0c;公园的门票&#xff0c;颐和园有年票、月票、日票&#xff0c;故宫也有年票、月票、日票。那么不同的公园和票种类型就可以视为两种不同的纬度&#xff0c;它们之间会形成相互组合的关系。 在类的设计…

Java常用设计模式————装饰者模式

引言 装饰者模式&#xff0c;又叫装饰器模式。它可以动态的将新功能附加到对象上。在对象功能扩展方面&#xff0c;它比继承更灵活&#xff0c;同时装饰者模式也体现了OCP原则。 在客户端调用使用了装饰者模式的对象时&#xff0c;就好像在使用构造器层层包裹核心对象&#x…

Java常用设计模式————组合模式

引言 组合模式&#xff0c;是一种类似递归算法的结构性设计模式&#xff0c;通过以简单的 List &#xff0c;组合本类对象&#xff0c;实现树状对象结构的“部分、整体”的层次。 它可以让调用程序不需要关心复杂对象与简单对象的区别&#xff0c;而统一地实现处理逻辑。 对…

Java常用设计模式————外观模式

引言 外观模式&#xff08;Facade Pattern&#xff09;&#xff0c;又叫“过程模式”。外观模式为子系统中的一组接口提供一个一致的入口&#xff0c;此模式定义了一个高层接口&#xff0c;这个接口使得这一组子系统更加易用。 一、案例分析 生活中有很多类似的案例&#xf…

Java常用设计模式————享元模式

引言 享元模式&#xff0c;也叫蝇量模式&#xff08;Flyweight Pattern&#xff09;。运用共享技术有效地支持大量细粒度的对象。 享元模式常用于系统底层开发&#xff0c;解决系统的性能问题。例如数据库连接池&#xff0c;里面都是创建好的连接对象&#xff0c;在这些连接对…

IDEA——常用基础设置

一、设置入口 File—>Settings... 或者 在工具栏的“小扳手”图标。 二、主题设置 三、编辑通用设置 设置面板中的 Editor 3.1 自动导包 可以设置IDEA自动为程序导包&#xff0c;在书写时加入准确的导包&#xff0c;在书写时优化导包&#xff08;自动去掉未使用的&#…

IDEA——常用快捷键

引言 总结 IDEA 的常用快捷键&#xff0c;除了部分快捷键与 Eclipse 保持一致之外&#xff0c;枚举更多的实用快捷键。 一、如何设置快捷键 在 Settings -> Keymap 中&#xff0c;下拉框里选择 Eclipse &#xff0c;即可将 IDEA 的快捷键设置为与 Eclipse 保持一致。但并…

IDEA——常用代码模板

引言 IDEA 提供了一些内置的代码模板&#xff0c;可以让开发者快速方便的使用&#xff0c;当然 eclipse 中也是有的&#xff0c;比如输入 syso 快速生成输出语句&#xff0c;main 快速生成主函数等。 idea 的模板设置都在 Settings --> Live Templates 和 General-->Po…

IDEA——Git 的设置与使用

引言 在本机下载好 Git 之后&#xff0c;再去在 IDEA 中设置 Git 相关的参数。详细的 Git 操作和 Eclipse 大同小异&#xff0c;可以移步至&#xff1a;《Git必知必会》 一、设置Git执行程序路径 二、导入一个新的远程 git 托管项目 打开 File ——> New ——> Project…

IDEA——Maven的配置与使用

引言 简单介绍一下如何在 idea 中配置maven&#xff0c;以及如何去使用 maven 。 一、配置 Maven home Maven home 和 settings 文件一般都需要进行重新设置&#xff0c;关联到本机已经安装好的 maven 版本&#xff0c;settings 这里可以使用默认&#xff0c;也可以设置为 ma…

Spring Cloud Alibaba——Nacos实现服务治理

引言 本博客总结微服务开发中各个微服务调用的实现&#xff0c;并使用 Nacos 完成服务注册和发现。 文章中会涉及到 maven 的使用&#xff0c;以及 spring boot 的一些知识。开发工具采用 IDEA 2020.2。 设计一个电商订单和商品购买微服务&#xff0c;实现微服务的注册发现与…