记录一次SQL函数和优化的问题

一、前言

上次在年前快要放假的时候记录的一篇安装SSL证书的内容,因为当时公司开始居家办公了,我也打算回个家
毕竟自己在苏州这半年一个人也是很想家的,所以就打算年过完来重新写博客。不巧的是,当时我2月中旬刚到苏州,
没想到苏州疫情爆发了,直接隔离十四天,自己平时就完成公司的开发任务以及自己的毕设,把写博客的事有点淡忘了,
最近也算自己手头的一些事都开始可以顺利进行了,想起也是时候去记录一下了。
很多新学的东西自己感觉就是入了个门,所以平时基本就直接放语雀上了,这次也是打算做一个简短的总结吧!

二、SQL函数

:以下基于官方文档理解( MySQL5.7文档

官方的内容,可以利用好CTRL+F,进行网页内搜索,随时查看各种函数用法,而且也会避免一些不规范的问题,比较官方的例子和要求最致密。

内置函数和运算符参考


2.1字符串函数


FIND_IN_SET(param1,param2)

这是一个字符串相关的函数

FIND_IN_SET(needle,haystack) 里面有两个参数,我们可以简单的看作find_in_set(param1,param2)

第一个参数param1:它是我们要查找的某一个具体的值

第二个参数param2:它是我们要查找的字符串列表

  • 当param2在param2这个列表中的话,函数返回一个正整数
  • 当param1不在param2中,或者param2这个列表是个NULL,函数返回0
  • 当两个参数param1或param2为NUll的时候,函数放回NULL

这里以LEFT JOIN举个“栗”子:

LEFT JOIN:说的简单点就是,左表记录会全部返回,同时如果与右表有记录相等的数据会返回右表的一些相关信息,如果没有,右表返回的记录就是NULL
(这个可以去参考CSDN此篇博客:Sql之left join(左关联)、right join(右关联)、inner join(自关联)的区别

这里假设有a和b两张表,a表中的id是个bigint类型,b表中的relate_a_id是个varchar类型,存放的是关联的a表中的id
(这里仅仅是举个栗子,表的设计一定要符合规范,比如这种关联的可以新增一张关联表的操作)
select a.id,
       a.name,
       IFNULL(b.id,0) AS flag,
       b.relate_a_id
       from a left join b on FIND_IN_SET(a.id,relate_a_id) and a.id = b.id
       
这样如果a.id在这个b表中relate_a_id这个字段的列表中的话就返回b.id,如果不在就放回0。这里起了个别名为flag作为判断量

单表的操作更简单,总而言之,这个函数就是为了判断一个值是否在一个字符串列表中的操作。

同理和NULL、NOT NULL一样,如果要判断不在当中就直接NOT FIND_IN_SET()就可以了

这里要提一点的就是,以上操作看起来和IN这个操作符很像,所以这里我的理解是

虽然
1 IN(1,2,3)  和  FIND_IN_SET(1,"1,2,3")  最终的结果是一样的,但是如下:
IN它是“值”对“值”,而FIND_IN_SET(param1,param2)是“值”对“一个列表”,而且FIND_IN_SET这个函数有自己的固定的两个参数
+ 不同点一:比较内容不同
+ 不同点二:函数格式不同

以上也是自己的一些浅见,如有错误,请各位大佬虚心赐教!

其他

字符串函数其实还有很多比较常见的,比如:

CONCAT(param1,param2,……)

这个函数里面也是有参数的,就是把两个或多个参数组合到一起的函数,当然还有CONCAT_WS(seperator,param1,param2,……)
根据第一个参数“分隔符”,来组合参数列表。

对于这个函数比较熟悉的就是写动态SQL的时候与LIKE操作符的应用,比如:
select a.name from a where a.is_delete =0
<if test="param.serachName!=''">
    and a.name like concat('%',#{param.serachName},'%')
</if>

这也是为了单纯写like去传参数的话,会出现SQL注入的风险,所以采用这种方式来防止SQL注入

REPLACE(str,oldStr,newStr)

这里要注意的是mysql扩展中REPLACE是个插入更新语句,但它没有where字句,具体可以自行搜索查看

举个例子:
REPLACE('aaa.yuyueq.cn''a''w')
结果为:www.yuyueq.cn

SUBSTRING(str,index)

它会从一个特定长度的位置开始,提取一个子字符串。

也可以写为SUBSTRING(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
高校学籍管理系统是基于SQL Server数据库的学生成绩管理系统,旨在方便高校管理学生的学籍信息并进行成绩管理。SQL Server是一种关系型数据库管理系统,可以通过SQL语言来进行数据的读取、插入、更新和删除操作。 在高校学籍管理系统中,可以利用SQL Server函数来进行一系列操作,以实现系统的功能需求。以下是一些常用的SQL Server函数: 1. 查询函数:使用SELECT语句结合函数来获取特定数据,例如COUNT()函数可以计算记录数量,SUM()函数可以计算某列数据的总和。 2. 聚合函数:用于对一组数据进行求值并返回单个值,常见的聚合函数有AVG()函数用于计算平均值,MAX()和MIN()函数用于获取最大和最小值。 3. 字符串处理函数:用于对字符串进行处理和操作,例如LEN()函数可以返回字符串的长度,LEFT()函数可以截取字符串的左边指定长度的部分。 4. 日期与时间函数:用于处理日期和时间数据,例如GETDATE()可以获取当前的日期和时间,DATEDIFF()函数可以计算两个日期之间的差距。 5. 数值处理函数:用于对数值进行处理和操作,例如ROUND()函数可以对数值进行四舍五入,ABS()函数可返回数的绝对值。 通过使用以上SQL Server函数,可以方便地对学生的学籍信息进行查询、统计和计算,满足高校学籍管理系统的需求。同时,SQL Server还提供了丰富的查询优化工具,可以提高系统的性能和效率,保证系统的稳定运行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值