MySQL的内置函数与复杂查询

目录

前言

一、聚合函数

1.1日期函数

1.2字符串函数

 1.3数学函数

1.4其它函数

二、关键字周边

2.1关键字的生效顺序

 2.2数据源

2.3可以使用聚合函数的关键字


前言

在前面几篇文章中,讲解了有关MySQL数据库、数据库表的创建、数据库表的数据操作等等。本文我们主要讲解MySQL中给我们内置好的,可以帮助我们完成一定功能的函数,以及一些复杂场景下的查询操作。这里不建议没有基础的同学进行阅读。


一、内置函数函数

1.1日期函数

日期函数
函数名称描述
current_date()当前日期
current_time()当前时间
current_timestamp()当前时间戳
date(datetime)按照datetime格式返回时间
date_add(date, interval d_value_type)

在date的基础上添加时间。

d_value_type可以是year、day、minute、second其中之一

date_sub(date, interval d_value_type)

在date的基础上减去时间。

d_value_type可以是year、day、minute、second其中之一

datediff(date1,date2)两个日期之差,单位是天
now()获取当前时间
图1        日期函数使用实例

1.2字符串函数

字符串函数
函数说明
charset()返回字段的字符集
concat(str1,str,...)连接字符串
instr(stringA,stringB)在stringA中查找是否存在stringB,存在则返回其所在位置,不存在则返回0
ucase(string)转换为大写
lcase(string)转换为小写
left(string,length)从string首部其去除length个字符
length(string)返回string的长度
replace(str,search_str,replace_str)在str中使用replace_str替换search_str
strcmp(stringA,stringB)逐字符比较stringA与stringB的大小
substring(str,position,length)从str的position位置取出length个字符

ltrim(string)

rtrim(string)

trim(string)

去除string中的左空格、右空格、左右空格
图2        查看dept表中的deptno字段的字符集
图3        剩余其它函数演示

 1.3数学函数

数学函数
函数名称说明
abs(number)对number进行绝对值运算
bin(decimal_number)十进制转换为二进制
hex(decimal_number)十进制转换为十六进制
conv(number,from_base,to_base)将number从from_base进制转换为to_base进制
ceiling(number)向上取整
floor(number)向下取整
format(number,decimal_places)格式化,保留小数位
rand()返回[0,1)之间的随机浮点数
mod(number,denominator)取模,求余
图4        数学函数验证

1.4聚合函数

聚合函数
函数名称说明
count()用来统计表中行的个数,使用count(*)可以统计所有行(包括值为null的列的行)的数量。
sum()用来统计数值列的总和,只能用于数值列。
avg()用来统计数值列的平均值,只能用于数值列。
max()用于获取指定列的最大值。可以用于数值、日期、字符串等类型的列。
min()用于获取指定列的最小值。与 MAX()类似,可以用于多种数据类型。
图5        聚合函数示例

1.5其它函数

其它函数
函数名称说明
user()查看当前登录用户的用户名
md5(str)对str生成一个32位的md5摘要
database()显示当前正在使用的数据库
ifnull(val1,val2)如果val1为null,返回val2,否则返回val1
图6        其他函数验证

二、关键字周边

2.1关键字的生效顺序

  • FROM:该关键字表示我们将从哪一个数据的表中获取数据,这也是最先生效的关键字。
  • WHERE:该关键字表示我们将按照一定的规则筛选表中的数据,将不满足条件的数据筛选掉。
  • GROUP BY:该关键字会将where条件筛选后的数据按照一定的规则进行分组。
  • HAVING:该关键字会对分组后的数据按照一定的规则进行筛选,筛选掉不符合的数据。
  • SELECT:讲过分组后筛选的数据就会被select挑选原则进行挑选,因为每一行数据可能有很多的字段并不是每一个字段都会被使用到。
  • ORDER BY:在选择好对应的数据后,将符合条件的数据按照一定的规则进行排序。
  • LIMIT/OFFSET:LIMIT用于限制返回结果的行数,OFFSET表示从第几行开始返回。这两个子句通常是一次查询最后执行的部分。
  • UNION:将多个包含相同列数的、SELECT的结果集进行去重后合并,UNION ALL与UNION类似,但是UNION ALL不会对进行去重操作。

 2.2数据源

        我们的from对数据的获取不仅可以从数据库表中获取,也可以从视图和子查询的结果中获取。

        实际上所谓的视图你可以理解为是一个子查询以视图的形式进行了保存,这意味着如果某个查询事务常常被执行,那么我们就可以创建一个视图,然后从这个视图里获取数据而不是从数据库中重新筛选获取。需要说明的是——视图不会掉电丢失。

图7        from数据源获取示例

2.3可以使用聚合函数的关键字

        关于这个问题,我们首先要了解聚合函数存在的意义是什么,聚合中的“聚”字代表有很多的数据,“合”字代表要将这些数据整合为一个值用来表示这些数据的一个整体的指标。

        例如,COUNT 函数用于统计行数,它会对表中的一组行进行计数,将这组行的数量聚合成一个数字;SUM 函数用于计算某一列数值的总和,是将该列的多个值聚合为一个总和值;AVG 函数计算平均值,是先将一组数值进行求和聚合,再除以数量得到一个平均值;MAX 和 MIN 函数则是从一组数据中找出最大值或最小值,也是一种聚合操作,将一组数据聚合成一个代表最大或最小的值。

        所以在where和group by阶段直接使用聚合函数是没有意义的,因为在where阶段我们往往是要确定筛选的条件,而不是使用聚合函数去得出一个能够描述全表数据特征的一个值,对于group by来说也是如此,但是对于select和having阶段就有所不同了,select关键字的意思很明显就是想查看值,如果我们想查看一个表的特征值这显然是合理的,having则是对经过分组后的数据添加约束条件,这就意味着如果我们此时使用聚合函数描述的是分组后的数据的特征值,显然我们可以根据分组特征值筛去一些不合理的分组。

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

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

相关文章

见多识广4:Buffer与Cache,神经网络加速器的Buffer

目录 前言传统意义上的Buffer与Cache一言以蔽之定义与主要功能BufferCache 数据存储策略二者对比 神经网络加速器的bufferInput BufferWeight BufferOutput Buffer与传统buffer的核心区别总结 前言 知识主要由Qwen和Kimi提供,我主要做笔记。 参考文献: …

内存的位运算

示例:提取和设置标志位 假设我们有一个32位的整数,其中不同的位代表不同的标志。例如: 位0:是否开启日志(0表示关闭,1表示开启) 位1:是否启用调试模式(0表示禁用&#…

linux -shell原理与运用

1---shell的工作方式和功能 shell的工作方式: shell本身也是一个应用程序,存储在/bin 或者是/user/bin中 登录的时候 会根据/etc/passwd文件载入shell默认执行 shell启动后,就会显示命令提示符,等待用户输入命令 命令的逻辑: 首先会判断时内部命令还是外部命令,如果是内部…

js获取uniapp获取webview内容高度

js获取uniapp获取webview内容高度 在uni-app中&#xff0c;如果你想要获取webview的内容高度&#xff0c;可以使用uni-app提供的bindload事件来监听webview的加载&#xff0c;然后通过调用webview的invokeMethod方法来获取内容的高度。 以下是一个示例代码&#xff1a; <te…

Windows系统升级Nodejs版本

什么是nodejs Node.js 是一个免费、开源、跨平台的 JavaScript 运行时环境, 它让开发人员能够创建服务器 Web 应用、命令行工具和脚本。 NodeJs官网 网址&#xff1a;Node.js — 在任何地方运行 JavaScript 可以通过网址下载安装&#xff0c;通过官网可以看到现在最新版本为22…

Relay算子注册(在pytorch.py端调用)

1. Relay算子注册 (C层) (a) 算子属性注册 路径: src/relay/op/nn/nn.cc RELAY_REGISTER_OP("hardswish").set_num_inputs(1).add_argument("data", "Tensor", "Input tensor.").set_support_level(3).add_type_rel("Identity…

【JavaEE】网络原理之初识(1.0)

目录 ​编辑 局域网与广域网 IP地址和端口号 实现简单的服务器客户端交互 简单理解socket TCP和UDP的差别&#xff08;初识&#xff09; socket面对udp DatagramSocket API DatagramSocket 构造方法 DatagramSocket 方法&#xff1a; DatagramPacket API Data…

Redis数据结构ZipList,QuickList,SkipList

目录 1.ZipList 1.2.解析Entry&#xff1a; 1.3Encoding编码 1.4.ZipList连锁更新问题 2.QuickList SkipList跳表 RedisObject 五种数据类型 1.ZipList redis中的ZipList是一种紧凑的内存储存结构&#xff0c;主要可以节省内存空间储存小规模数据。是一种特殊的双端链表…

laravel 12 监听syslog消息,并将消息格式化后存入mongodb

在Laravel 12中实现监听Syslog消息并格式化存储到MongoDB&#xff0c;需结合日志通道配置、Syslog解析和MongoDB存储操作。以下是具体实现方案&#xff1a; 一、环境配置 安装MongoDB扩展包 执行以下命令安装必要的依赖&#xff1a; composer require jenssegers/mongodb ^4.0确…

【STM32项目实战】一文了解单片机的SPI驱动外设功能

前言&#xff1a;在前面我有文章介绍了关于单片机的SPI外设CUBEMX配置&#xff0c;但是要想使用好SPI这个外设我们还必须对其原理性的时序有一个详细的了解&#xff0c;所以这篇文章就补充一下SPI比较偏向底层的时序性的逻辑。 1&#xff0c;SPI简介 SPI是MCU最常见的对外通信…

【挖洞利器】GobyAwvs解放双手

【渗透测试工具】解放双手&Goby配合Awvs渗透测试利器\x0a通过Goby和Awvs 解放双手https://mp.weixin.qq.com/s/SquRK8C5cRpWmfGbIOqxoQ

LangChain4j(15)——RAG高级之跳过检索

之前的文章中&#xff0c;我们介绍了RAG的使用&#xff0c;但是&#xff0c;每次提问时&#xff0c;都会通过RAG进行检索。有时&#xff0c;检索是不必要执行的&#xff0c;比如&#xff0c;当用户只是说“你好”时。于是&#xff0c;我们需要有条件的跳过检索过程。 跳过决策…

【SDRS】面向多模态情感分析的情感感知解纠缠表征转移

abstract 多模态情感分析(MSA)旨在利用多模态的互补信息对用户生成的视频进行情感理解。现有的方法主要集中在设计复杂的特征融合策略来整合单独提取的多模态表示,忽略了与情感无关的信息的干扰。在本文中,我们提出将单模表征分解为情感特定特征和情感独立特征,并将前者融…

Sui 上线两周年,掀起增长「海啸」

两年前的 5 月 3 日&#xff0c;Sui 的主网正式发布&#xff0c;将在开发网和测试网上验证过的下一代技术承诺变为现实。这一新兴网络旨在优化现有区块链技术&#xff0c;结合高性能计算环境与安全性、可验证性及韧性。 随着 Sui 迎来两周年&#xff0c;这股浪潮已成长为「海啸…

深入理解 mapper-locations

mybatis-plus.mapper-locations: classpath*:/mapper/**/*.xml 是 MyBatis/MyBatis-Plus 在 Spring Boot 配置文件&#xff08;如 application.yml 或 application.properties&#xff09;中的一项关键配置&#xff0c;用于指定 MyBatis Mapper XML 文件的存放路径。以下是详细…

电容的作用

使用多个电容是从电容的实际等效模型去考虑的(也就是从SI&#xff0c;信号完整性方面&#xff09;。只考虑一个实际电容时&#xff0c;它的阻抗曲线是一个类似于倒三角形的形状&#xff0c;只在谐振频率点(与等效串联电感形成)处的阻抗最小。因此相当于只在这一个频率点处及附近…

移植的本质是什么

有断时间我就在想&#xff0c;为什么freertos&#xff0c;lvgl等等的移植都是把库文件放进来&#xff0c;直接点击编译&#xff0c;然后把bug都处理完成就移植成功了&#xff0c;为什么呢&#xff1f; 明明我一个函数都没调用&#xff0c;为什么会有一堆错误&#xff0c;莫名其…

广告场景下的检索平台技术

检索方向概述 数据检索领域技术选型大体分为SQL事务数据库、NoSQL数据库、分析型数据库三个类型。 SQL数据库的设计思路是采用关系模型组织数据&#xff0c;注重读写操作的一致性&#xff0c;注重数据的绝对安全。为了实现这一思路&#xff0c;SQL数据库往往会牺牲部分性能&…

高频PCB设计如何选择PCB层数?

以四层板为例&#xff0c;可以第一层和第二层画信号&#xff0c;作为信号层。 第三层可以走电源&#xff0c;然后第四层走GND 但是更可以第一层和第三层画信号。第二层可以走电源&#xff0c;然后第四层走GND 用中间的电源层以及地层可以起到屏蔽的作用&#xff0c;有效降低寄…

[Linux_69] 数据链路层 | Mac帧格式 | 局域网转发 | MTU MSS

目录 0.引入 1.以太网帧格式 2.重谈局域网转发的原理(基于协议) 小结 3.认识MTU 3.1MTU对IP协议的影响 3.2MTU对UDP协议的影响 3.3MTU对于TCP协议的影响 0.引入 在去年的这篇文章中&#xff0c;我们有对网络进行过一个概述[Linux#47][网络] 网络协议 | TCP/IP模型 | 以…