MySQL之MySQL函數(shù)

五、MySQL函數(shù)

MySQL 5.7官方參考手冊(cè):https://dev.mysql.com/doc/refman/5.7/en/
SQL函數(shù)和運(yùn)算符操作:https://dev.mysql.com/doc/refman/5.7/en/sql-function-reference.html

1.常用函數(shù)(不常用)

1)數(shù)學(xué)運(yùn)算

SELECT ABS() --絕對(duì)值
SELECT CEILING() --向上取整
SELECT FLOOR() --向下取整
SELECT RAND() --返回一個(gè)0-1之間的隨機(jī)數(shù)
SELECT SIGN() --判斷一個(gè)數(shù)的符號(hào):0返回0,負(fù)數(shù)返回-1,正數(shù)返回1

2)字符串函數(shù)

SELECT CHAR_LENGTH(str) --字符串長度
SELECT CONCAT(str,str,…) --拼接字符串
SELECT INSERT(str,初始位置,替換長度,替代的str) --從某個(gè)位置開始替換某個(gè)長度
SELECT LOWER(str) --轉(zhuǎn)化成小寫字母
SELECT UPPER(str) --轉(zhuǎn)化成大寫字母
SELECT INSTR(str,子str) --返回第一次出現(xiàn)的子字符串的索引
SELECT REPLACE(str,出現(xiàn)的str,替換的str) --替換出現(xiàn)的指定字符串
SELECT SUBSTR(str,截取位置,截取長度) --返回指定的子字符串
SELECT REVERSE(str) --反轉(zhuǎn)字符串

例:查詢姓周的同學(xué),并將姓改成鄒。

SELECT REPLACE(StudentName,'周','鄒') FROM student
WHERE StudentName LIKE '周%'

3)時(shí)間和日期函數(shù)

--獲取當(dāng)前日期的三種方式
SELECT CURRENT_DATE()
SELECT CURDATE()
SELECT NOW()
SELECT LOCALTIME() --獲取本地時(shí)間
SELECT SYSDATE() --獲取系統(tǒng)時(shí)間
--分別獲取當(dāng)前日期的年、月、日、時(shí)、分、秒
SELECT YEAR(NOW())
SELECT MONTH(NOW())
SELECT DAY(NOW())
SELECT HOUR(NOW())
SELECT MINUTE(NOW())
SELECT SECOND(NOW())

4)系統(tǒng)

--獲取用戶的兩種方式
SELECT SYSTEM_USER() 
SELECT USER()
SELECT VERSION() --獲取版本號(hào)

2.聚合函數(shù)(常用)

函數(shù)名稱 描述
COUNT() 計(jì)數(shù)
SUM() 求和
AVG() 平均值
MAX() 最大值
MIN() 最小值
…… ……

1)count():使用其可查詢一個(gè)表中有多少記錄
例:查詢student表中的所有記錄

SELECT COUNT(`BornDate`) FROM student; --Count(字段),會(huì)忽略此字段中所有的null值的
SELECT COUNT(*) FROM student;
SELECT COUNT(1) FROM student;
-- Count(*)和Count(1),不會(huì)忽略含有null值的,本質(zhì)上都是計(jì)算行數(shù)

2)總和、平均、最大、最小四種函數(shù)
例:分別求學(xué)生成績的總和、平均分、最高分和最低分。

SELECT SUM(`StudentResult`) AS 總和 FROM result
SELECT AVG(`StudentResult`) AS 平均分 FROM result
SELECT MAX(`StudentResult`) AS 最高分 FROM result
SELECT MIN(`StudentResult`) AS 最低分 FROM result

補(bǔ)充:四、7.分組和過濾

例:查詢不同課程的平均分、最高分、最低分,平均分要大于80分。

SELECT SubjectName,AVG(StudentResult) AS 平均分,MAX(StudentResult) AS 最高分,
MIN(StudentResult) AS 最低分
FORM result r
INNER JOIN `subject` sub
ON r.`SubjectNo` = sub.`SubjectNo`
GROUP BY r.SubjectNo --指定結(jié)果通過什么字段來分組
HAVING 平均分>=80 --使用分組需指定結(jié)果滿足的條件,用HAVING而不是WHERE

3.數(shù)據(jù)庫級(jí)別的MD5加密(擴(kuò)展)

什么是MD5?
MD5信息摘要算法,一種被廣泛使用的密碼散列函數(shù),可以產(chǎn)生出一個(gè)128位(16字節(jié))的散列值,用于確保信息傳輸完整一致。
MD5由MD4、MD3、MD2改進(jìn)而來,主要增強(qiáng)算法復(fù)雜度和不可逆性。MD5算法因其普遍、穩(wěn)定、快速的特點(diǎn),仍廣泛應(yīng)用于普通數(shù)據(jù)的加密保護(hù)領(lǐng)域。
具體的值在MD5中是一樣的。
MD5破解網(wǎng)站的原理,背后有一個(gè)字典,查詢MD5加密后的值,查詢到了就返回加密前的值。
例:創(chuàng)建測試表,測試MD5加密。

CREATE TABLE `testmd5` (
  `id` INT(4) NOT NULL,
  `NAME` VARCHAR(20) NOT NULL,
  `pwd` VARCHAR(50) NOT NULL,
  PRIMARY KEY(`ID`)
)ENGINE=INNODB DEFAULT CHARSET=UTF8
--插入明文密碼
INSERT INTO testmd5 VALUES(1,'zhangsan','123456'),(2,'lisi','123456'),(1,'wangwu','123456')
--加密全部的密碼(可以用WHERE只加密一部分)
UPDATE testmd5 SET pwd=MD5(pwd)
--在插入的時(shí)候就加密
INSERT INTO testmd5 VALUES(4,'xiaoming',MD5('123456'))
--如何校驗(yàn):將用戶傳遞進(jìn)來的密碼,進(jìn)行md5加密,然后比對(duì)加密后的值
SELECT * FROM testmd5 WHERE `name`='xiaoming' AND pwd=MD5('123456')

補(bǔ)充:四、8.Select小結(jié)

注:順序很重要!
①select 去重 要查詢的字段 from 表
注意:表和字段可以取別名。
②XXX join 要連接的表 on 等值判斷
③where(具體的值,子查詢語句)
④Group By(通過哪個(gè)字段來分組)
⑤Having(過濾分組后的信息,條件和where是一樣的,位置不同)
⑥Order By…(通過哪個(gè)字段排序:升序\降序)
⑦Limit startindex,pagesize
業(yè)務(wù)層面:查詢:跨表、跨數(shù)據(jù)庫…

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容