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函数
关于时间的函数:
now()
curdate()
curtime()
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)
字符串拼接
concat()
concat_ws()分隔符可以是一个字符串也可以是一个参数
select concat_ws(',','11','22','33')==>11,22,33
select concat_ws(',','11','22',null)==>11,22
group_cancat()
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():整除