mysql函数,concat,日期处理,分组

group by
user表中有两个a,一个b,一个c用户(name),年龄分别为5,6,7
select name,count(*)  from usr  group by name;
	name  count(*)
      a     2
      b     1
      c     1
group by 字段 with rollup (可以根据某字段排序然后计算其他字段的和,平均数等)
select name,count(age) as age from usr  group by name with rollup
	name   age
      a     10
      b     6
      c     7
      null  23(总和)
	我们可以使用coalesce来设置一个取代null的名称,coalesce
	coalesce(a,b,c):a为空则取b,b为空则取c,c为空则为null,a不为空则取a
	select coalesce(name,'总数'),count(age) as age from usr  group by name with rollup
	name   age
      a     10
      b     6
      c     7
     总数   23
连接查询
外联接:
	1->A左外连B无where条件取左表A所有
	2->A左外连B有where条件(B is null) 取A除去B的部分
	3->A右外连B无where条件取右表B所有
	4->A右外连B有where条件(A is null) 取B除去A的部分
内连接:
	1->取A和B共有的部分
full outer join:
	1->无where条件取A和B的所有(相当于左外连和右外连接的结合取量表所有)
	2->有where条件(A is null OR B is null)取A,B所有除去A,B共有的部分(相当于A,B内连接的取反)
REGEXP正则
用法:
	where 字段 regexp '^d'
操作符:
	^		以什么开头
	$		以什么结尾
	xx		包含xx
	a|b|c	 例如'z|food' 能匹配 "z""food"'(z|f)ood' 则匹配 "zood""food"
mysql事务
mysql事务主要用于处理操作量大,复杂度高的数据,在一个人员管理系统中想要删除一个人员,需要删除他的邮箱,基本资料等,这些数据的操作语句就构成了一个事务.
mysql索引
索引分为单列索引和多列索引
MYSQL索引的建立对于mysql的高效运行是很重要的,索引可以大大提高mysql的检索速度.
实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录
过多的滥用会降低更新表的速度,如对表进行insert,update,delete.因为更新表的时候,mysql不仅要保存数据,还要保存一下索引文件.
MYSQL函数
关于时间的函数:
//获取当前的日期和时间(2020-06-01 14:16:59)
now()
//获取当前的日期(2020-06-01)
curdate()
//获取当前的时间(14:16:59)
curtime()
//获取时间的指定片段(unix可以是day,hour等,xxx指的是时间的字段)
extract(unix from xxx)
//格式化指定时间为日期格式
 date(xxx)
 //格式换时间格式
 from_unixtime(xxx,'%y-%m-%d')
 //格式换时间格式
  date_format(xxx,'%y-%m-%d')
 //向日期添加指定的时间间隔  
date_add(date,interval expre type)
 //向日期减去指定的时间间隔
 date_sub(xxx,interval expr type)
 //获取两个时间之间的差的天数
 datediff(xxx,xxx)
字符串拼接
//注意如果一个参数为null,则返回null
concat()
//注意分隔符为null则返回null,函数会忽略分隔符后面的null值
concat_ws()分隔符可以是一个字符串也可以是一个参数
	select concat_ws(',','11','22','33')==>11,22,33
 	select concat_ws(',','11','22',null)==>11,22
group_cancat()//默认为逗号分隔如需设置分隔符group_concat(字段 separator ';')
	mysql> select * from aa;
	+------+------+
	| id| name |
	+------+------+
	|1 | 10|
	|1 | 20|
	|1 | 20|
	|2 | 20|
	|3 | 200   |
	|3 | 500   |
	+------+------+
     select id group_concat(name order by name desc) from aa group by id
     +------+---------------------------------------+
	|1 | 20,20,10   |
	|2 | 20|
	|3 | 500,200|
	+------+---------------------------------------+	
复制repeat(字段,份数)
select repeat('ab',2);
+----------------+
| abab           |
+----------------+
字符串截取substring()
1:从左开始截取字符串
	left(截取的字段,截取的长度)
2:从右开始截取字符串
	right(截取的字段,截取的长度)
3:截取字符串
	substring(截取字段,从第几位开始,截取的长度)
4:按关键字截取字符串//注意如果出现得第几位为负数则从后面数
	substring_index(截取字段,关键字,关键字出现的第几位)
    +----------------+
	| abab           |
	+----------------+
    substring_index(字段,b,1)==>a
    substring_index(字段,b,2)==>aba
    substring_index(字段,b,3)==>abab
    substring_index(字段,b,-2)==>ab
数学函数
所有的数学函数在发生错误的情况下都返回null
ABS(x):返回x的绝对值
SIGN(x):返回参数是正数负数还是0;正数返回1,负数返回-1,0返回0
MOD(N,M)取模
FLOOR(x):返回不大于x的整数值
CEILING(x):返回不小于x的整数值
ROUND(X,D):将参数x四舍五入到最近的整数
DIV():整除

你可能感兴趣的