MySQL函数及条件查询相关用法
文章目录
前言
一、函数(可跳过)
1.字符串函数
2.数值函数
3.日期和时间函数
4.聚合函数(常用)
5.控制流函数
6.加密和压缩函数
7.系统信息函数
二、条件查询(select)
1.筛选条件子句where与having的区别
2.比较运算符
3.逻辑运算符
4.范围运算符
5.集和运算符
6.模糊匹配运算符
7.空值判断运算符
8.order by查询结果排序
9.limit限制查询结果数量
10.group by分组查询
11.查询的同时给固定列加别名
前言
前篇大概叙述了MySQL中对于表的各种基础操作,这次侧重select操作更为完善用法 。如有遗漏或者错误,欢迎大家在评论区补充。
一、函数(可跳过)
1.字符串函数
用于处理字符串数据,例如连接、截取、转换等操作。常见函数包括:
CONCAT(str1, str2, ...):拼接字符串。SUBSTRING(str, start, length):截取子字符串。UPPER(str)和LOWER(str):转换大小写。TRIM(str):去除首尾空格。
2.数值函数
用于数学运算和数值处理。常见函数包括:
ABS(x):返回绝对值。ROUND(x, d):四舍五入到指定小数位。CEIL(x)和FLOOR(x):向上或向下取整。RAND():生成随机数。
3.日期和时间函数
用于处理日期和时间数据。常见函数包括:
NOW():返回当前日期和时间。CURDATE()和CURTIME():返回当前日期或时间。DATE_FORMAT(date, format):格式化日期。DATEDIFF(date1, date2):计算日期差值。
4.聚合函数(常用)
用于对多行数据进行汇总计算(对于列的数据运算会经常用到)。常见函数包括:
COUNT():统计行数。SUM():计算总和。AVG():计算平均值。MAX()和MIN():返回最大或最小值。
5.控制流函数
用于条件判断和流程控制。常见函数包括:
IF(expr, true_val, false_val):条件判断。CASE WHEN ... THEN ... END:多条件分支。COALESCE(val1, val2, ...):返回第一个非 NULL 值。
6.加密和压缩函数
用于数据加密和压缩。常见函数包括:
MD5(str):计算 MD5 哈希值。SHA1(str):计算 SHA1 哈希值。COMPRESS(str)和UNCOMPRESS(str):压缩和解压数据。
7.系统信息函数
返回数据库或服务器信息。常见函数包括:
VERSION():返回 MySQL 版本。USER()和DATABASE():返回当前用户或数据库名。CONNECTION_ID():返回连接 ID。
二、条件查询(select)
1.筛选条件子句where与having的区别
| 筛选子句 | where | having |
| 作用阶段 | 作用于原始数据 | 作用于分组(group by)后的数据 |
| 使用场景 | 对单行记录进行筛选 | 对聚合结果的筛选 |
| 与聚合函数的关系 | where子句中不能直接使用聚合函数 | having必须搭配group by,且条件经常包含聚合函数 |
查询语句的书写顺序如下(重点):
select-->from-->where-->group by-->having-->order by-->limit
2.比较运算符
| 关系运算符 | 用法 |
| = | 等于 |
| <> or != | 不等于 |
| < | 小于 |
| > | 大于 |
| <= | 小于等于 |
| >= | 大于等于 |
| <=> | 用于空值(NULL)的相等比较 |
注意:如果有空值的比较,若用"="进行比较输出的则为false,"<=>"输出的则为true
此时如果输入"="则查询不出成绩为null的学生,"<=>"用于空值的比较
3.逻辑运算符
| 逻辑运算符 | 逻辑情况 | 作用情况 |
| and | 逻辑与 | 多个条件都为true,结果才为true |
| or | 逻辑或 | 有一个条件为true,结果就为true |
| not | 逻辑非 | (取反)条件为true=,结果为false |
查询数学大于语文并且物理大于英语的学生信息(两个条件必须同时满足)
查询数学大于语文或者物理大于英语的学生信息(两个条件满足一个即可)
4.范围运算符
between and:在某个范围内(包含边界)
not between and:不在某个范围内
查询语文成绩在91和100之间的学生信息(包含91)
5.集和运算符
in (value1,value2,...):匹配集合中的任意值
not in (value1,value2,...):不匹配集合中的任意值
查询数学成绩不在99,98,93的学生信息
6.模糊匹配运算符
like:模糊匹配
not like:不匹配模糊条件
模糊匹配一般搭配通配符使用(%与_)
%:匹配任意数量的字符(包括零个字符)
_:匹配单个任意字符
例:
a%:匹配以a为开头的字符串
%a:匹配以a为结尾的字符串
%a%:匹配含有a的字符串
ab_:匹配以ab开头字长为3的字符串
7.空值判断运算符
is null:判断是否为空(null)
is not null:判断是否不为空
实际情况与 <=> null 类似,但是"is null"用的更多
8.order by查询结果排序
select * from 表名 where 限制条件 order by 列名 (desc/asc);desc(降序排序):高的在上
asc(升序排序):低的在上
此处order by 后面的列名是排序关键,列名上的数值高低决定了表的顺序,列名也可以用别名或者表达式替换
此处则是根据数学+语文成绩的数值进行降序排列
此处则是按照英语成绩进行降序排列
9.limit限制查询结果数量
select * from 表名 where 限制条件 limit value1 offset value2;value1:限制查询结果的数量
value2:查询结果从该处下标开始(下标从零开始)
此处实现的是按照物理成绩降序来查询第一条数据即(查出最高物理成绩学生信息)
此处查询物理成绩第二的学生信息
排序后会对行虚拟化下标(顺序从上到下递归),offset 0 即就是顶上第一条数据下标,limit 1 offset 1就是查询下标为1的数据且只查询一行
10.group by分组查询
select 列名(聚合表达式),列名(聚合表达式) from 表名 group by 列名 having 条件限制;group by一般会和聚合函数(前面有介绍)以及having搭配使用,对于列的数据进行计算会用上聚合函数。
上图为一份工资表,如果对工资进行盲目的求平均值并不符合常理(不同职务的工资有着较大差别),因此我们要对表进行分组以后再进行求平均值。
此则在分组后进行求平均工资
having 后面加了条件role不等于"程序员",分完组以后将程序员给去掉了然后在进行求平局工资
11.查询的同时给固定列加别名
select 列名 (as) 别名,列名 (as) 别名,...from 表名;对每列取别名,其中as可以省略
