Mysql 基础-持续更新

去重 DISTINCT

DISTINCT 关键字的主要作用就是对数据表中一个或多个字段重复的数据进行过滤,只返回其中的一条数据给用户
注意点:

  1. DISTINCT 关键字只能在 SELECT 语句中使用。
  2. 在对一个或多个字段去重时,DISTINCT 关键字必须在所有字段的最前面。
  3. 如果 DISTINCT 关键字后有多个字段,则会对多个字段进行组合去重,也就是说,只有多个字段组合起来完全是一样的情况下才会被去重。

多字段排序 ORDER BY

错误写法
如果有连个字段需要排序 都是asc 可以省去第一个排序字段的desc,但是如果想倒序排,省略会出问题

SELECT  id,customer_id,money  from tms_wallet_detail ORDER BY customer_id,money desc

结果错误:
在这里插入图片描述

正确写法:

SELECT  id,customer_id,money  from tms_wallet_detail ORDER BY customer_id,money desc

在这里插入图片描述

多条件的查询语句 WHERE

mysql运算符的优先级
在这里插入图片描述

WHERE 关键词后可以有多个查询条件,这样能够使查询结果更加精确。多个查询条件时用逻辑运算符 AND(&&)、OR(||)或 XOR 隔开。

  1. AND:记录满足所有查询条件时,才会被查询出来。
  2. OR:记录满足任意一个查询条件时,才会被查询出来。
  3. XOR:记录满足其中一个条件,并且不满足另一个条件时,才会被查询出来。

XOR的使用

SELECT name,age,height FROM tb_students_info WHERE age>21 XOR height>=175;

在这里插入图片描述

模糊查询LIKE

  1. LIKE 关键字支持百分号“%”和下划线“_”通配符。
  2. 匹配的字符串必须加单引号或双引号

“%”是 MySQL 中最常用的通配符,它能代表任何长度的字符串,字符串的长度可以为 0。例如,a%b表示以字母 a 开头,以字母 b 结尾的任意长度的字符串。该字符串可以代表 ab、acb、accb、accrb 等字符串。

LIKE

在这里插入图片描述

NOT LIKE 表示字符串不匹配时满足条件。

带有“_”通配符的查询

“_”只能代表单个字符,字符的长度不能为 0。例如,a_b可以代表 acb、adb、aub 等字符串。

在这里插入图片描述

LIKE 区分大小写

默认情况下,LIKE 关键字匹配字符的时候是不区分大小写的。如果需要区分大小写,可以加入 BINARY 关键字。

在这里插入图片描述

使用通配符的注意事项和技巧

下面是使用通配符的一些注意事项:

  1. 注意大小写。MySQL 默认是不区分大小写的。如果区分大小写,像“Tom”这样的数据就不能被“t%”所匹配到。
  2. 注意尾部空格,尾部空格会干扰通配符的匹配。例如,“T% ”就不能匹配到“Tom”。
  3. 注意 NULL。“%”通配符可以到匹配任意字符,但是不能匹配 NULL。也就是说 “%”匹配不到 tb_students_info 数据表中值为 NULL 的记录。

下面是一些使用通配符要记住的技巧。

  1. 不要过度使用通配符,如果其它操作符能达到相同的目的,应该使用其它操作符。因为 MySQL 对通配符的处理一般会比其他操作符花费更长的时间。
  2. 在确定使用通配符后,除非绝对有必要,否则不要把它们用在字符串的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的。
  3. 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。

总之,通配符是一种极其重要和有用的搜索工具,以后我们会经常用到它。

最后
如果查询内容中包含通配符,可以使用“\”转义符。

#判断字段为null或为空
如果为空 则可以使用 col = ''clo != ''
null 则不能使用 =!= 需要使用 col is nullcol is not null

错误:

SELECT  id,remark  from tms_wallet_detail where remark = null 

在这里插入图片描述
正确:

SELECT  id,remark  from tms_wallet_detail where remark is null 

在这里插入图片描述

分组GROUP BY

GROUP BY单独使用

单独使用 GROUP BY 关键字时,查询结果会只显示每个分组的第一条记录。
![在这里插入图片描述](https://img-blog.csdnimg.cn/19c2cd49e50145cc850ea552a

GROUP BY 与 GROUP_CONCAT()

GROUP BY 关键字可以和 GROUP_CONCAT() 函数一起使用。GROUP_CONCAT() 函数会把每个分组的字段值都显示出来。

例如:

SELECT  phone,GROUP_CONCAT(`username`)  from site_wallet GROUP BY phone

在这里插入图片描述

GROUP BY 与聚合函数

在数据统计时,GROUP BY 关键字经常和聚合函数一起使用。

聚合函数包括 COUNT()SUM()AVG()MAX()MIN()。其中,COUNT() 用来统计记录的条数;SUM() 用来计算字段值的总和;AVG() 用来计算字段值的平均值;MAX() 用来查询字段的最大值;MIN() 用来查询字段的最小值。

GROUP BY 与 WITH ROLLUP

WITH POLLUP 关键字用来在所有记录的最后加上一条记录,这条记录是上面所有记录的总和,即统计记录数量。
在这里插入图片描述

过滤分组 HAVING

HAVING 关键字和 WHERE 关键字都可以用来过滤数据,且 HAVING 支持 WHERE 关键字中所有的操作符和语法。

但是 WHERE 和 HAVING 关键字也存在以下几点差异:

  1. 一般情况下,WHERE 用于过滤数据行,而 HAVING 用于过滤分组。
  2. WHERE 查询条件中不可以使用聚合函数,而 HAVING 查询条件中可以使用聚合函数。
  3. WHERE 在数据分组前进行过滤,而 HAVING 在数据分组后进行过滤 。
  4. WHERE 针对数据库文件进行过滤,而 HAVING 针对查询结果进行过滤。也就是说,WHERE 根据数据表中的字段直接进行过滤,而 HAVING 是根据前面已经查询出的字段进行过滤。
  5. WHERE 查询条件中不可以使用字段别名,而 HAVING 查询条件中可以使用字段别名。
  6. HAVING 必须在GROUP BY 后面
select name,id_no,count(*) as total  from sys_id_card_license GROUP BY id_no  HAVING total >1

在这里插入图片描述

#运算符的优先级

优先级由低到高排列运算符
1=(赋值运算)、:=
2II、OR
3XOR
4&&、AND
5NOT
6BETWEEN、CASE、WHEN、THEN、ELSE
7=(比较运算)、<=>、>=、>、<=、<、<>、!=、 IS、LIKE、REGEXP、IN
8|
9&
10<<、>>
11-(减号)、+
12*、/、%
13^
14-(负号)、〜(位反转)
15!

#MySQL常用函数

MySQL | 数值型函数

函数名称作 用

ABS | 求绝对值
SQRT | 求二次方根
MOD | 求余数
CEIL 和 CEILING | 两个函数功能相同,都是返回不小于参数的最小整数,即向上取整
FLOOR | 向下取整,返回值转化为一个BIGINT
RAND | 生成一个0~1之间的随机数,传入整数参数是,用来产生重复序列
ROUND | 对所传参数进行四舍五入
SIGN | 返回参数的符号
POW 和 POWER | 两个函数的功能相同,都是所传参数的次方的结果值
SIN | 求正弦值
ASIN | 求反正弦值,与函数 SIN 互为反函数
COS | 求余弦值
ACOS | 求反余弦值,与函数 COS 互为反函数
TAN | 求正切值
ATAN | 求反正切值,与函数 TAN 互为反函数
COT | 求余切值

MySQL | 字符串函数

函数名称 作
LENGTH计算字符串长度函数,返回字符串的字节长度
CONCAT合并字符串函数,返回结果为连接参数产生的字符串,参数可以使一个或多个
INSERT替换字符串函数
LOWER将字符串中的字母转换为小写
UPPER将字符串中的字母转换为大写
LEFT从左侧字截取符串,返回字符串左边的若干个字符
RIGHT从右侧字截取符串,返回字符串右边的若干个字符
TRIM删除字符串左右两侧的空格
REPLACE字符串替换函数,返回替换后的新字符串
SUBSTRING截取字符串,返回从指定位置开始的指定长度的字符换
REVERSE字符串反转(逆序)函数,返回与原始字符串顺序相反的字符串
MySQL日期和时间函数
函数名称作 用
CURDATE 和 CURRENT_DATE两个函数作用相同,返回当前系统的日期值
CURTIME 和 CURRENT_TIME两个函数作用相同,返回当前系统的时间值
NOW
UNIX_TIMESTAMP获取UNIX时间戳函数,返回一个以 UNIX 时间戳为基础的无符号整数
FROM_UNIXTIME将 UNIX 时间戳转换为时间格式,与UNIX_TIMESTAMP互为反函数
MONTH获取指定日期中的月份
MONTHNAME获取指定日期中的月份英文名称
DAYNAME获取指定曰期对应的星期几的英文名称
DAYOFWEEK获取指定日期对应的一周的索引位置值
WEEK获取指定日期是一年中的第几周,返回值的范围是否为 0〜52 或 1〜53
DAYOFYEAR获取指定曰期是一年中的第几天,返回值范围是1~366
DAYOFMONTH获取指定日期是一个月中是第几天,返回值范围是1~31
YEAR获取年份,返回值范围是 1970〜2069
TIME_TO_SEC将时间参数转换为秒数
SEC_TO_TIME将秒数转换为时间,与TIME_TO_SEC 互为反函数
DATE_ADD ADDDATE两个函数功能相同,都是向日期添加指定的时间间隔
DATE_SUB SUBDATE两个函数功能相同,都是向日期减去指定的时间间隔
ADDTIME时间加法运算,在原始时间上添加指定的时间
SUBTIME时间减法运算,在原始时间上减去指定的时间
DATEDIFF获取两个日期之间间隔,返回参数 1 减去参数 2 的值
DATE_FORMAT格式化指定的日期,根据参数返回指定格式的值
WEEKDAY获取指定日期在一周内的对应的工作日索引

MySQL | 聚合函数

函数名称作用
MAX查询指定列的最大值
MIN查询指定列的最小值
COUNT统计查询结果的行数
SUM求和,返回指定列的总和
AVG求平均值,返回指定列数据的平均值

MySQL | 流程控制函数

函数名称作用
IF判断,流程控制
IFNULL判断是否为空
CASE搜索语句
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值