BigData-MySQL(高級-函數(shù)钞螟、查詢)

1.函數(shù)

1.1 單行函數(shù)
  • 數(shù)學(xué)函數(shù)

    # 絕對值
    abs()
    # 向上取整,最接近并且大于等于該值的整數(shù)值
    ceiling()/ceil()
    # 向下取整,最接近并且小于等于該值的整數(shù)值
    floor()
    # 取模運(yùn)算(取余)
    mode(m,n)
    # 求PI值
    PI()
    # 求冪運(yùn)算
    pow(m,n)
    # 隨機(jī)數(shù)
    rand()  
    # 四舍五入
    round(m,n)
    # 截取m小數(shù)點(diǎn)后n位
    truncate(m,n)
    
  • 字符函數(shù)

    # 獲取str的ascii碼值
    ascii(str)
    # 將字符串轉(zhuǎn)換為小寫
    lower(字段|表達(dá)式)
    # 將字符串轉(zhuǎn)換為大寫
    upper(字段|表達(dá)式)
    # 拼接字符串
    concat(str1,str2…)
    # 獲取字符串長度
    length(字段|表達(dá)式)
    # 截取字符串,pos開始位置兔甘,從1開始;len表示長度
    substr(str,pos,len)
    # 在str中搜索old鳞滨,使用new代替
    replace(str,old,new)
    # str長度不夠len洞焙,使用s左側(cè)填充
    lpad(str,len,s)
    # str長度不夠len,使用s右側(cè)填充
    rpad(str,len,s)
    # 去除左右兩側(cè)的空格
    trim()
    
  • 日期函數(shù)

    # 獲取當(dāng)前日期時(shí)間
    NOW()/SYSDATE()/CURRENT_TIMESTAMP()
    # 獲取當(dāng)前系統(tǒng)日期
    CURRENT_DATE()/CURDATE()
    # 獲取當(dāng)前系統(tǒng)時(shí)間
    CURRENT_TIME()/CURTIME()
    # 獲取天數(shù)
    DAY(date)
    # 獲取月份
    MONTH(date)
    # 獲取年份
    YEAR(date)
    # 返回一年中的周數(shù)
    week(date)
    # 返回一周中的第幾天(0-6)
    weekday(date)
    # 日期計(jì)算
    DATE_ADD(date,INTERVAL expr unit)
    
1.2 聚合函數(shù)
# 平均值
avg()
# 獲取總數(shù)
sum()
# 獲取最大值
max()
# 獲取最小值
min()
# 統(tǒng)計(jì)數(shù)目
count()
統(tǒng)計(jì)記錄數(shù)或者統(tǒng)計(jì)某個(gè)非空字段的個(gè)數(shù)
1.3 分組函數(shù)
GROUP BY
    用于將信息劃分為更小的組
    每一組行返回針對該組的單個(gè)結(jié)果
HAVING子句
    用于指定 GROUP BY 子句檢索行的條件
#查詢平均工資大于2000的部門編號
select deptno,avg(sal) avg from emp group by deptno having avg>=2000
1.4 加密函數(shù)
select md5('root');
select sha('root');
select password('root');
1.5 流程函數(shù)
如果expr1是真, 返回expr2, 否則返回expr3
IF(expr1,expr2,expr3)   

如果expr1不是NULL,返回expr1,否則返回expr2
IFNULL(expr1,expr2) 

如果value是真, 返回result1,否則返回default
CASE WHEN [value1] THEN[result1]… ELSE[default] END 

如果expr等于value1, 返回result1,否則返回default
CASE [expr] WHEN [value1] THEN[result1]… ELSE[default] END  

2.高級查詢

2.1 連接查詢
  • 笛卡爾積

    多張表中記錄組合所有可能有序?qū)?/p>

  • 內(nèi)連接

    多張表均匹配的記錄連接并展示在結(jié)果集

    無主從表之分,與連接順序無關(guān)

    # 查詢所有雇員及其部門信息
    select * from emp,dept where emp.deptno = dept.deptno;
    select * from emp inner join dept on emp.deptno = dept.deptno;
    select * from emp inner join dept using(deptno); #字段名稱必須一致,會(huì)自動(dòng)去除重復(fù)列
    
  • 自然連接

    自然連接都是等值連接

    表中字段名稱相等的字段進(jìn)行連接,會(huì)自動(dòng)去重重復(fù)列

    select * from emp natural join dept;
    
  • 外連接

    以驅(qū)動(dòng)表為依據(jù),依次在匹配表中進(jìn)行記錄匹配,如果匹配則連接并展示在結(jié)果集中,否則以null填充

    有主從表之分拯啦,與連接順序有關(guān)澡匪。

    left/right [outer] join ... on...

    select * from emp 
    LEFT JOIN dept
    on emp.deptno = dept.deptno
    
  • 自連接

    以本身為鏡像進(jìn)行連接(自身連接自身)

    # 查詢員工及其領(lǐng)導(dǎo)的名稱
    select e1.ename 名稱,e2.ename 領(lǐng)導(dǎo)
    from emp e1,emp e2
    where e1.mgr = e2.empno
    
2.2 子查詢

嵌套查詢,將一個(gè)查詢結(jié)果作為另一個(gè)查詢條件或組成部分的查詢

# 單行子查詢
  #查詢工資大于7788號員工的所有員工信息
  select * from emp where sal >(select sal from emp where empno =7788);
# 多行子查詢
  返回多值可以使用any或all來修飾褒链。
  =any相當(dāng)于in,<any小于最大值唁情,>any大于最小值;
  <>all相當(dāng)于not in,>all大于最大值甫匹,<all小于最小值甸鸟。
  
# 查詢超過所在部門平均工資的員工信息
select * from emp e1 where sal > 
(select avg(sal) from emp e2 where e1.deptno = e2.deptno);

#查詢薪水大于2000的部門名稱
select dname from dept d where deptno in
(select deptno from emp e where sal > 2000);
    或
select dname from dept d where EXISTS 
(select * from emp e where sal > 2000 and d.deptno=e.deptno);
# in和exists的區(qū)別
in先執(zhí)行子查詢,在執(zhí)行主查詢;exists先執(zhí)行主查詢;
exists子查詢不返回具體結(jié)果兵迅,返回true值出現(xiàn)在結(jié)果集抢韭,否則不出現(xiàn)。
2.3 聯(lián)合查詢

union: 并集恍箭,所有的內(nèi)容都查詢刻恭,重復(fù)的顯示一次
union all: 并集,所有的內(nèi)容都顯示季惯,包括重復(fù)的

select * from emp where deptno = 20
UNION ALL
select * from emp where sal <=2000

1. 列出員工表中每個(gè)部門的員工數(shù)(員工數(shù)必須大于 3),和部門名稱.

SELECT emp.deptno,dept.dname,COUNT(*) FROM emp,dept WHERE emp.deptno=dept.deptno GROUP BY emp.deptno,dept.dname HAVING COUNT(*)>3吠各;

2. 找出工資比 jones 多的員工信息。

SELECT * FROM emp
WHERE sal>(SELECT sal FROM emp WHERE ename='JONES');

3. 列出所有員工的姓名和其上級的姓名勉抓。

SELECT e1.ename,e2.ename FROM emp e1,emp e2
WHERE e1.mgr = e2.empno;

4. 查詢大于30號部門平均工資并且不在30號部門的員工信息和部門名稱贾漏。

SELECT emp.*,dept.dname FROM emp,dept
WHERE emp.deptno = dept.deptno
AND sal>(SELECT AVG(sal) FROM emp WHERE deptno=30)
AND emp.deptno !=30;

5. 查詢每個(gè)月工資總數(shù)最少的那個(gè)部門的部門編號,部門名稱藕筋,部門位置纵散。

SELECT dept.* FROM dept,(SELECT sum(sal),deptno FROM emp GROUP BY deptno ORDER BY sum(sal) ASC
LIMIT 1) a WHERE dept.deptno=a.deptno;

6. 查詢員工編號為7369的員工姓名和所在部門的部門名稱。

SELECT emp.ename,dept.dname FROM dept,emp
WHERE emp.empno = 7369
AND emp.deptno=dept.deptno;

7. 查詢超過其所在部門平均工資的員工信息。

SELECT * FROM emp,(SELECT deptno dn,avg(sal) avsa FROM emp GROUP BY deptno) ag
WHERE sal>ag.avsa AND emp.deptno=ag.dn;

8. 查詢大于30號部門平均工資并且不在30號部門的員工信息

SELECT emp.* FROM emp
WHERE sal>(SELECT avg(sal) FROM emp WHERE deptno=30)
AND emp.deptno!=30;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末伍掀,一起剝皮案震驚了整個(gè)濱河市掰茶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蜜笤,老刑警劉巖濒蒋,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異把兔,居然都是意外死亡沪伙,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門县好,熙熙樓的掌柜王于貴愁眉苦臉地迎上來围橡,“玉大人,你說我怎么就攤上這事缕贡∥淌冢” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵晾咪,是天一觀的道長收擦。 經(jīng)常有香客問我,道長禀酱,這世上最難降的妖魔是什么炬守? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮剂跟,結(jié)果婚禮上减途,老公的妹妹穿的比我還像新娘。我一直安慰自己曹洽,他們只是感情好鳍置,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著送淆,像睡著了一般税产。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上偷崩,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天辟拷,我揣著相機(jī)與錄音,去河邊找鬼阐斜。 笑死衫冻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谒出。 我是一名探鬼主播隅俘,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼邻奠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了为居?” 一聲冷哼從身側(cè)響起碌宴,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蒙畴,沒想到半個(gè)月后贰镣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡膳凝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年八孝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸠项。...
    茶點(diǎn)故事閱讀 40,117評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖子姜,靈堂內(nèi)的尸體忽然破棺而出祟绊,到底是詐尸還是另有隱情,我是刑警寧澤哥捕,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布牧抽,位于F島的核電站,受9級特大地震影響遥赚,放射性物質(zhì)發(fā)生泄漏扬舒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一凫佛、第九天 我趴在偏房一處隱蔽的房頂上張望讲坎。 院中可真熱鬧,春花似錦愧薛、人聲如沸晨炕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瓮栗。三九已至,卻和暖如春瞄勾,著一層夾襖步出監(jiān)牢的瞬間费奸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工进陡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留愿阐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓四濒,卻偏偏與公主長得像换况,于是被迫代替她去往敵國和親职辨。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評論 2 355