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():整除
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章