MYSQL常用函数以及分组操作
ABS(X) 返回X的絕對(duì)值
CEIL(X) 向上取整? 1.5->2 -1.5->-1
FLOOR(X) 向下取整? 1.5->1 -1.5->-2
ROUND(X) 四舍五入取整
ROUND(X,D) 將X保留D位小數(shù),進(jìn)行四舍五入
`TRUNCATE`(X,D) 將X保留D位小數(shù),不進(jìn)行四舍五入
RAND() 返回隨機(jī)數(shù)
SIN(X) 返回x的符號(hào),x是負(fù)數(shù)、0、正數(shù)分別返回-1、0、1 SELECT SIGN(-10)--(-1)
POW(X,Y)? 返回x的y次冪
PI() 返回圓周率
[字符串函數(shù)]
LENGTH(str)? 返回字符串的長度,其中一個(gè)中文占三個(gè)長度
CHAR_LENGTH(str) 返回字符串的字符數(shù),其中一個(gè)中文只占一個(gè)字符
CONCAT(str1,str2,...) 拼接多個(gè)字符串
UPPER(str) 將字符串全部轉(zhuǎn)為大寫
LOWER(str) 將字符串全部轉(zhuǎn)為小寫
LEFT(str,n) 返回字符串的前N個(gè)字符
RIGHT(str,n) 返回字符串的后N個(gè)字符
TRIM(str) 去掉str左右兩邊的空格
REPLACE(str,s1,a2); 將字符串中所有的s1換成a2
SUBSTRING(str,pos[,len])截取字符串str 從pos個(gè)字符開始,截取len個(gè),如果省略len,則截取到最后
INSTR(s1,s2) 返回s1在字符串中的下標(biāo)
[字符串轉(zhuǎn)數(shù)字格式]
[常用日期函數(shù)]
CURDATE();返回當(dāng)前日期? 2017-06-20
CURTIME(); 返回當(dāng)前時(shí)間? 09:52:52
NOW(); 返回當(dāng)前的日期和時(shí)間 2017-06-20 09:53:45
DATEDIFF(date1,date2) 返回date1和date2之間的間隔天數(shù)
ADDDATE(datetime1,days) 返回datetime1加上days天后的日期
MONTH() 返回日期中的月份
YEAR() 返回日期中的年份
DAY() 返回日期中一個(gè)月中的第幾天
WEEKDAY() 返回一周中的第幾天,0 -> 周一
HOUR() 返回小時(shí)數(shù)
MINUTE() 返回分鐘數(shù)
SECOND() 返回秒數(shù)
DATE_FORMAT(date,format) 將date使用format要求的格式顯示
format中可用的占位符格式:
%Y年份, 數(shù)字形式,4位數(shù)
%y年份, 數(shù)字形式 (2位數(shù))
%M月份名稱 (January..December)
%m月份, 數(shù)字形式 (00..12)
%b月份的縮寫名稱? (Jan..Dec)
%c月份,數(shù)字形式(0..12)
%D帶有英語后綴的該月日期? (0th, 1st, 2nd, 3rd, ...)
%d該月日期, 數(shù)字形式 (00..31)
%e該月日期, 數(shù)字形式(0..31)
?
%H小時(shí)(00..23)
%h小時(shí)(01..12)
%k小時(shí)(0..23)
%l小時(shí)(1..12)
?
%i分鐘,數(shù)字形式 (00..59)
%S秒 (00..59)
%s秒 (00..59)
?
%W工作日名稱 (周日..周六)
%w一周中的每日 (0=周日..6=周六)
【系統(tǒng)信息函數(shù)】
VERSION() 取到當(dāng)前數(shù)據(jù)庫的版本號(hào)
DATABASE() 返回當(dāng)前數(shù)據(jù)庫的名字
USER() 返回當(dāng)前數(shù)據(jù)庫的用戶
CONNECTION_ID() 返回服務(wù)器的連接數(shù)
CHARSET(str) 返回字符串的字符集
LAST_INSERT_ID() 返回最后一個(gè)auto_increment的值
[加密函數(shù)]
1、PASSWORD() 對(duì)字符串進(jìn)行加密,常用于加密密碼
2、MD5():對(duì)字符串進(jìn)行MD5散列加密,常用于不需要解密的數(shù)據(jù)
3、ENCODE(str,pwd) 使用加密密碼pwd對(duì)字符串str進(jìn)行加密,加密之后的結(jié)果為二進(jìn)制,該字段需要使用BLOB類型保存
?? DECODE(mistr,pwd) 將ENCODE加密的二進(jìn)制進(jìn)行解密,解密密碼需要與ENCODE的加密密碼一致
?[多行函數(shù)]
SUM(expr) 求和 SELECT SUM(age) FROM tb1;
AVG();求平均值 SELECT AVG(age) FROM tb1;
MIN(expr); 求最小值
MAX(expr);求最大值
COUNT(1);? 求總個(gè)數(shù) SELECT COUNT(*) FROM tb1
{分組操作}
GROUP BY ----FROM <表名>
WIERE
GROUP BY
HAVING
上述代碼執(zhí)行難執(zhí)行流程
1線 SELECT.....FROM? 查詢所有數(shù)據(jù)
② 使用where 將數(shù)據(jù)源進(jìn)行帥選
③ 對(duì)wher帥選后的數(shù)據(jù),使用GTOUP BY進(jìn)行分組
?? 分組后,使用聚合函數(shù),將會(huì)產(chǎn)生n條數(shù)據(jù)
④ HAVING字句對(duì)產(chǎn)生的多條聚合數(shù)據(jù),進(jìn)行處理操作
注意事項(xiàng)
① 代碼順序必須是? WHERE GROUP BY? HAVING
② 有HAVING字句。必須有g(shù)roup BY,有g(shù)roup BY 并不一定有HAVING
③ WHERE和 HAVING 的區(qū)別
WHERE實(shí)在分組之前先篩選數(shù)據(jù)。HAVING是對(duì)分組后的數(shù)據(jù),新型篩選,農(nóng)行訂單
? HAVING語句中一定不能包含就、?函數(shù),having 是專門用來過濾
-- 求出,平進(jìn)均薪資大于1萬,門對(duì)的平均薪資
-- 注 各部門只統(tǒng)計(jì)出勤率大于15天的員工
SELECT AVG(薪資)? FROM 公司表 WHERE 出勤率>15
GROUP BY 部門 HAVING AVG(薪資)>10000;
[表連接]
?使用WHERE進(jìn)行多表連接
?與內(nèi)連接一致
USE mydb;
SELECT i.cusname"客戶名稱",o.ordmoney"訂單總額" -- 多表關(guān)聯(lián),字段前必須有表名
FROM cusorder AS o,cusinfo as i-- 為方便書寫,給表起別名
WHERE o.cusno = i.cusno -- 兩張表通過那個(gè)鍵關(guān)聯(lián)
?內(nèi)連接
?特點(diǎn) 相關(guān)聯(lián)的兩張表,總是以數(shù)據(jù)少的為準(zhǔn),另一張表中沒有被匹配的行,會(huì)被刪除不顯示
USE mydb;
SELECT i.cusname"客戶名稱",o.ordmoney"訂單總額" -- 多表關(guān)聯(lián),字段前必須有表名
FROM cusorder AS o INNER JOIN cusinfo as i-- 為方便書寫,給表起別名
ON o.cusno = i.cusno -- 兩張表通過那個(gè)鍵關(guān)聯(lián)
?
左鏈接 LEFT JOIN
特點(diǎn) 以左邊的表為準(zhǔn),
把左表的全部數(shù)據(jù)顯示,右表多的刪除不顯示,右表少的補(bǔ)null
USE mydb;
SELECT i.cusname"客戶名稱",o.ordmoney"訂單總額" -- 多表關(guān)聯(lián),字段前必須有表名
FROM cusorder AS o LEFT JOIN? cusinfo as i-- 為方便書寫,給表起別名
ON o.cusno = i.cusno -- 兩張表通過那個(gè)鍵關(guān)聯(lián)
右鏈接 right JOIN
特點(diǎn) 以右邊的表為準(zhǔn),
把右表的全部數(shù)據(jù)顯示,左表多的刪除不顯示,左表少的補(bǔ)null
USE mydb;
SELECT i.cusname"客戶名稱",o.ordmoney"訂單總額" -- 多表關(guān)聯(lián),字段前必須有表名
FROM cusorder AS o RIGHT JOIN cusinfo as i-- 為方便書寫,給表起別名
ON o.cusno = i.cusno -- 兩張表通過那個(gè)鍵關(guān)聯(lián)
自連接 同一張表與自己鏈接
USE mydb;
SELECT e1.ename,e2.ename
FROM emp e1 LEFT JOIN emp e2
ON e1.mgr = e2.empno;
[限制行數(shù)]
LIMIT n 表示的前N條數(shù)據(jù),相當(dāng)于LIMIT 0,n
LIMIT n,m 第n+1 到 第m條
@page = 1; -- 第幾頁
@rows = 5; -- 每頁幾條
分頁語句
各種限制語句的順序
SELECT * FROM cusorder WHERE NOT ISNULL(ordno) GROUP BY ordno HAVING SUM(ordmoney)>0 ORDER BY ordmoney DESC LIMIT 0,10;?
轉(zhuǎn)載于:https://www.cnblogs.com/LJYqq/p/7077952.html
總結(jié)
以上是生活随笔為你收集整理的MYSQL常用函数以及分组操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSS学习笔记 display属性
- 下一篇: linux下mysql开启远程访问权限及