类似C或者java 一样,为了方便用户使用,MySQL也提供了类似方法或者函数的方式,让数据的计算处理更加便捷。
一.前番回顾
基本DQL操作
主要掌握group by 分组,通过having关键字对分组后的数据进行条件筛选,之后或者进行order by 排序或者limit限制结果集条数等。对于like模糊查询需要掌握,虽然性能随着虎摸的程度越大,性能越低,但是特定业务场景必须用到。
二.基本函数
1.数学函数
abs -- 绝对值
sqrt -- 开方
pow(x,y) -- 求幂
ceil(x) -- 向上取整,即进一法
floor(x) -- 向下取整,即去尾法
round(x) -- 四舍五入
round(x,d) -- 四舍五入,d即保留小数位数
应用实例:求一个店铺的每日的交易量 (买入卖出的总和,加入买入用负数表示,卖出用正数表示),那么总的交易量应该是:
abs(买入)+abs(卖出)
,之前做过的股票的项目便是,分组求每一个客户的当日交易量,包括该用户当日卖出的股票和买入的股票,但是在数据库中字段的表示通过+
和-
来表示买入还是卖出,这就会用到abs函数。而round函数,ceil函数, floor函数则是对账户资产的操作多点(按照实际需求)。
2.字符函数
length -- 字符长度
upper -- 转大写
lower -- 转小写
concat(字符串1,字符串2) -- 字符串连接
substr(字符串,开始位置,长度) -- 字符串剪切
replace(字符串,子串,替换串) -- 字符串替换
lpad(字符串,填充个数,填充字符串) -- 左填充
rpad(字符串,填充个数,填充字符) -- 右填充
trim(字符串) -- 去首尾空格
应用场景:可能像upper,lowerlpad,rpad这样的函数用的比较少,那可能是没有那个应用场景,但是对于length,substr,replace这几个函数,我在一个对于视频认证的指标计算的时候用到过,主要当时视频认证结果描述字段存的是不是需要的数据,而且认证成功还是失败都必须通过这几个函数去取。contat函数的话,有时候行转列需要对行字段进行拼接,很自然就用到了。
3.日期函数
now() -- 获得当前时间
sysdate -- 获取当前系统时间
current_date -- 获取当前日期
current_time -- 获得当前的时间
current_timestamp -- 获得当前的时间戳
year(date类型的或字符串类型) -- 获取年份
month(date类型或者字符串类型) -- 月份
day(date类型或者字符串类型) -- 日
日期计算:
Date_add('2018-09-09',interval 2 week) -- 增加两周
Date_add('2018-09-09',interval 2 day) -- 增加两天
Date_add('2018-09-09',interval 2 day) -- 增加两月
Last_day('2019-02-08') -- 该月的最后一天
关于Last_day相信做过上一节后面练习的朋友肯定知道了,HR在查询某一个时间段月底某一天一天的入职的员工信息可能用到了(当然有其他方式)。另外,now()可以用来结合出生年月日求解年龄,sysdate系统作为日期时间字段默认值等。
二.聚合函数(重点)
max -- 最大值
min -- 最小值
count count(*) -- 统计记录数 count(字段) --统计字段数(非空的)
avg -- 平均值
sum() -- 统计总和
对于这类函数,在实际工作中,一般需要进行计算的话,count,avg和sum的应用场景比较多,max和min偏少,但是
不同的业务偏向可能不同。
三.分组函数(重点掌握)
having 是对group by 分组之后的结果进行条件的限制,having主要是用于分组之后再次检索
having 和where的区别:
顺序:having是在分组之后使用的
能否使用聚合函数:having可以使用聚合函数
四.加密函数(了解)
MD5(字符串) -- md5加密 (可以解密,以前用的多,但是现在很多都不是单纯的一层MD5加密了)
sha(字符串) -- sha加密 (现在一些软件会采用该加密方式)
password(字符串) -- password函数加密(MySQL默认对用户名的加密方式)
提示:下节 数据库完整性与运算符