MySQL 数据库 day04
一、mysql函数
1、字符串处理函数
(1)char_length('a中') 字符数。一个中文是一个字符
select char_length('a中');
(2)length('a中') 字节数。要看是什么编码,如果是gbk,中文是2个编码;如果是utf8,中文是3个编码
(3)concat('a','b','cdf','fff') 字符串连接,其他数据库可用||连接字符串,'abc'||'def'
(4)concat_ws(';','a','b','cdf','fff') 用分隔符连接字符串。分隔符可以替换成其他连接字符串
select concat_ws(';','a','b','cdf','fff');
(5)instr('abcdefgdef','def') 返回第一个子串的位置,从1开始,找不到返回0
(6)locate('abc','---abc---abc') 返回第一个子串的位置,从1开始,找不到返回0
(7)locate('abc','---abc---abc',5) 从指定位置向后找
(8)insert('abceefghijklmn',2,11,'---') 用子串取代从2位置开始的11个字符
(9)lower('AdFLaK') 变为小写
(10)upper('AdFLaK') 变为大写
(11)left('AdFfLJf',3) 返回最左边的三个字符
(12)right('AdFfLJf',3) 返回最右边的三个字符
(13)lpad('abc',8,'*') 左侧填充,指定长度比源字符串少,相当于left
(14)rpad('abc',8,'*') 右侧填充,指定长度比源字符串少,相当于left
(15)trim(' a bc ') 去除两端空格
(16)substring('abcdefghijklmn',3) 从3位置开始的所有字符串
(17)substring('abcdefghijklmn',3,6) 从3位置开始的6个字符串
(18)repeat('abc',3) 重复三遍abc
(19)replace('Hello MySql','My','You') 子串替换
(20)reverse('Hello') 翻转字符串
(21)space(10) 返回10个空格
2、数字函数
(1)ceil(-3.14) -- -3 向上取整
(2)floor(3.94) -- 4 向下取整
(3)format(391.536,2) 数字格式化为字符串,四舍五入,第二个参数为小数位数
(4)round(673.4974) 四舍五入
(5)round(673.4974,2) 四舍五入到小数点后两位
(6)round(673.4974,-2) 四舍五入到百,参数为-1,表示四舍五入到十位
(7)truncate(234.31,1) 舍去至小数点后一位,【没有四舍五入】
(8)abs(-12) 绝对值,得到12
3、日期函数
(1)now() 返回当前的日期和时间
(2)curdate() 返回当前系统的日期
(3)curtime() 返回当前系统的时间
(4)date(时间) 提取日期或日期/时间表达式的日期部分
(5)time(时间) 提取日期或日期/时间表达式的时间部分
(6)extract(字段 from 日期) 返回日期/时间的单独部分
字段的合法值:second/minute/hour/day/week/month/quarter/year ......
(7)date_add(日期,interval 数量 字段) 给日期添加指定的时间间隔
字段的合法值同上
(8)date_sub(日期,interval 数量 字段) 从日期减去指定的时间间隔
(9)datediff(日期1,日期2) 返回两个日期之间的天数
(10)date_format(日期,格式) 用不同的格式显示日期/时间
格式字符:%Y-%m-%d%H:%i:%s
%d/%m/%year
%y年%m月%d日
...
...
(11)last_day(日期) 返回当月最后一天
二、null相关
1、ifnull(数据1,数据2) 数据1是null返回数据2;不是null返回数据1
2、coalesce(数据,数据2,数据3,......) 从左向右第一个不是null的数据
三、加密
1、md5() 常用密码加密方式。返回32个长度的16进制数字字符串
2、sha() 比md5更安全
四、多行函数:
多行数据,运算产生一个结果;
多行函数不能与其他字段一起查询;
多行函数会忽略null值
1、count() 行数
2、sum() 求和
3、avg() 求平均
4、max() 最大值
5、min() 最小值
数据行数:count(*)
数据量非常大时,count(*)效率很低
可以把行数另存在一张表中,定期更新
五、分页查询(limit)
1、没有标准sql,不同数据库提供不同的分页查询方式
MySQL 提供一个limit语法
2、 limit 5 --前5行
limit 0,5 --0行(第一行)开始的5行
limit 5,5 --第六行开始的5条
limit 11,5 --第十一行开始的5条
3、在数据量非常大时
limit a,b 效率非常低
limit a 效率较高
4、 程序中计算起始行:(页数-1)*每页行数
最大页数:(count(*)/每页行数)再向上取整
六、group by子句、having子句
1、group by子句
多行函数的分组计算
只在求多行函数运算时,使用group by
2、having子句
对多行函数计算结果进行过滤
3、where和having区别:
where 过滤普通条件
having 过滤多行函数结果
4、having必须前面group by后面
七、select 查询语句的结构
select
distinct --去除重复
from
where
group by --分组求多行函数
having --多行函数过滤
order by
八、子查询:在查询语句中,嵌套的查询
1、where 后面的子查询
2、from 后面的子查询
3、select 查询列表中的子查询
4、条件子查询
子查询的查询结果,作为另一个查询的过滤条件
(1)单值子查询:
=
> >=
< =<
(2)多值子查询
in
> all 比最大的大
> any 比最小的大
(3)多列子查询
(a,b) =
(a,b) in
未完待续......