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 by2、having子句
对多行函数计算结果进行过滤3、where和having区别: where 过滤普通条件 having 过滤多行函数结果 4、having必须前面group by后面 七、select 查询语句的结构select
distinct --去除重复fromwheregroup by --分组求多行函数having --多行函数过滤order by八、子查询:在查询语句中,嵌套的查询
1、where 后面的子查询2、from 后面的子查询3、select 查询列表中的子查询4、条件子查询
子查询的查询结果,作为另一个查询的过滤条件(1)单值子查询: = > >= < =<(2)多值子查询 in > all 比最大的大 > any 比最小的大(3)多列子查询 (a,b) = (a,b) in未完待续......