注:本文僅作為查找函數(shù)和部分理解使用,希望能給大家?guī)?lái)幫助
以下函數(shù)均可以使用
SELECT NOW()等函數(shù) FROM DUAL;來(lái)測(cè)試 //其中dual是一個(gè)準(zhǔn)們用來(lái)測(cè)試的測(cè)試表
1.時(shí)間日期函數(shù)
1.1 獲取時(shí)間的函數(shù)
重點(diǎn)記憶前三個(gè)紅色標(biāo)注的函數(shù),
第一個(gè)函數(shù)返回值如2024-01-02的形式
第二個(gè)如 15:20:21
第三個(gè)則是兩者追加 如: 2024-01-02?15:20:21
1.2 年月日時(shí)分秒季度星期等函數(shù)?
注:注意DAYOFWEEK 和 WEEKDAY的區(qū)別
1.3 日期與時(shí)間戳之間的轉(zhuǎn)換函數(shù)(重點(diǎn))
1.4 日期的操作函數(shù)以及操作表
?
相當(dāng)于取date的某個(gè)單獨(dú)的字段?
?
1.5 時(shí)間與秒鐘轉(zhuǎn)換函數(shù)?
1.6 計(jì)算時(shí)間與日期函數(shù)
加減時(shí)間?
1.7 日期時(shí)間的格式化和解析
?
getformat的參數(shù)
比如 getformat(DATE,USA);
流程控制函數(shù)
類似于其他變成語(yǔ)言中的 if else? ?/? switch case
第一個(gè)函數(shù)類似于三目表達(dá)式,是就返回第一個(gè),不是就返回第二個(gè)
case when
可以當(dāng)成if else 還是 switch case 就看case和when之間有沒(méi)有變量存在,如果有,當(dāng)做switch case處理,否則當(dāng)做 if else 處理
小疑問(wèn):循環(huán)語(yǔ)句???
其實(shí)select遍歷表就自帶循環(huán)語(yǔ)句了(暫時(shí)這么解釋)?
加密解密函數(shù)
紅色框標(biāo)記的三個(gè)函數(shù)在mysql5.7版本可以使用,其實(shí)我們?cè)谂渲?.0環(huán)境的時(shí)候就會(huì)發(fā)現(xiàn)不能使用簡(jiǎn)單的密碼了,其實(shí)就是因?yàn)榧用芊绞绞褂玫氖且粋€(gè)sha加密算法
?
聚合查詢函數(shù)
這里介紹五個(gè)常用的聚合函數(shù)
這里count(1) 和 count(*) 也可以表示表中的字段條數(shù)
注:這里的count(字段)不會(huì)計(jì)算空字段
小問(wèn)題:這里count(字段) , count(1) count(*) 哪個(gè)的效率更高呢??
取決于使用的存儲(chǔ)引擎在MyISAM中使用 count(*) ,count(1),count(字段)的效率是相當(dāng)?shù)?/p>
但是使用InnoDB的話,count(1) 和 count(*) 的效率是高于count(字段)的
group by 的使用?
用于分組使用,一般是配合聚合函數(shù)來(lái)操作的
eg:將公司按照部門(mén)來(lái)分組,查詢每個(gè)部門(mén)的最大/平均工資....
注:select中的非聚合函數(shù)的參數(shù)一定要在group by中出現(xiàn)作為分組項(xiàng)
例:假設(shè)我想把每個(gè)部門(mén)每個(gè)工種的最大工資統(tǒng)計(jì)出來(lái),假設(shè)這里我們有兩個(gè)部門(mén),每個(gè)部門(mén)都有5個(gè)工種,理應(yīng)出現(xiàn)十條數(shù)據(jù),但是如果我們只按照兩個(gè)部門(mén)分組就只會(huì)出現(xiàn)2條數(shù)據(jù),這是不合理的.
with rollup
在分完組之后可以加一條記錄,算出總和
注:使用with rollup之后就不可以使用 order by 了,兩者相互沖突
having
?和where一樣作為篩選條件,但是是在分完組之后進(jìn)行篩選
having 和 where的對(duì)比
1.having的使用范圍更廣,甚至可以將過(guò)濾條件通通交給having
2.過(guò)濾條件中如果沒(méi)有聚合函數(shù),使用where的效率要高于having,因?yàn)閣here是先篩選再連接
having 是鏈接完了再篩選
SQL底層執(zhí)行原理
首先我們先談?wù)凷QL的執(zhí)行邏輯順序
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-819274.html
都是按照如上順序來(lái)操作的,先讀取表,連接表,進(jìn)行where篩選,分組,having篩選,最后是排序,分頁(yè)等等? 這也就說(shuō)明了為啥用where先過(guò)濾一波效率要更高文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-819274.html
到了這里,關(guān)于MySQL 時(shí)間日期函數(shù),流程控制函數(shù),加密解密函數(shù)以及聚合查詢函數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!