這篇文章主要介紹MySQL查詢(xún)語(yǔ)句之復(fù)雜查詢(xún)的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)建站于2013年創(chuàng)立,先為崇川等服務(wù)建站,崇川等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢(xún)服務(wù)。為崇川企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
MySQL是一種關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),關(guān)系數(shù)據(jù)庫(kù)將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個(gè)大倉(cāng)庫(kù)內(nèi),這樣就增加了速度并提高了靈活性。在MySQL中經(jīng)常會(huì)有很多復(fù)雜的查詢(xún),比如:
MySQL復(fù)雜查詢(xún)
一、分組查詢(xún):
1、關(guān)鍵字:GROUP BY
2、用法:GROUP BY 語(yǔ)句用于結(jié)合合計(jì)函數(shù) (比如 SUM) ,根據(jù)一個(gè)或多個(gè)列對(duì)結(jié)果集進(jìn)行分組,合計(jì)函數(shù)常常需要添加 GROUP BY 語(yǔ)句。
下面的給了兩張表 一張是emp,一張是dept,下面的查詢(xún)我們都對(duì)這兩張表進(jìn)行操作,如下圖:
第一張:emp表
第二張:dept表
現(xiàn)在我們查詢(xún)emp每個(gè)部門(mén)的工資總和,語(yǔ)句如下:
SELECT deptno,SUM(sal)FROM emp GROUP BY deptno;
結(jié)果如下:
注:這里我們查詢(xún)每個(gè)部門(mén)的工資(sal)總和,所以應(yīng)該按照部門(mén)標(biāo)號(hào)(deptno)進(jìn)行分組,求和所以用了sum();
3、having:
where 和 having 都是做條件判斷,在介紹having前我們看下where 和 having的區(qū)別
where的作用是在對(duì)查詢(xún)結(jié)果進(jìn)行分組前,將不符合where條件的行去掉,即在分組之前過(guò)濾數(shù)據(jù),條件中不能包含聚合函數(shù),使用where條件顯示特定的行。
having的作用是篩選滿(mǎn)足條件的組,即在分組之后過(guò)濾數(shù)據(jù),條件中經(jīng)常包含聚合函數(shù),使用having 條件顯示特定的組,也可以使用多個(gè)分組標(biāo)準(zhǔn)進(jìn)行分組。
例如:我們要查詢(xún)emp表中工資總和大于10000的部門(mén)編號(hào),語(yǔ)句如下:
SELECT deptno,SUM(sal)FROM emp GROUP BY deptno HAVING SUM(sal)>10000;
結(jié)果如下:
這樣就查出了工資總和大于10000的部門(mén)編號(hào)為20,(為了理解也把工資總和顯示出來(lái)了)。
二、連表查詢(xún):
根據(jù)兩個(gè)或多個(gè)表中的列之間的關(guān)系,從這些表中查詢(xún)數(shù)據(jù).
1、inner join(內(nèi)連接):
語(yǔ)法:select 字段名1,字段名2 from table1 [INNER] join table2 ON table1.字段名=table2.字段名;
注:內(nèi)連接是從結(jié)果中刪除其他被連接的表中沒(méi)有匹配行的所有行,只能查詢(xún)出連接的表中都擁有的信息,所以?xún)?nèi)連接可能會(huì)丟失信息,還有inner可以省略。
例如:我們連接emp 和 dept兩張表,查詢(xún)ename 和deptno,語(yǔ)句如下:
SELECT emp.ename,dept.deptno FROM emp INNER JOIN dept ON emp.deptno=dept.deptno;
還有種寫(xiě)法:SELECT emp.ename,dept.deptno from emp,dept where emp.deptno=dept.deptno;
注意:原來(lái)dept表中有deptno為40的,但查詢(xún)出來(lái)就沒(méi)有了,這里是因?yàn)閑mp中deptno字段中沒(méi)有值為40,所以使用innner join連接時(shí)就自動(dòng)刪除了dept表中deptno字段值為40的記錄。
2、外連接:
2.1:左外連接:結(jié)果集保留左表的所有行,但只包含第二個(gè)表與第一表匹配的行。第二個(gè)表相應(yīng)的空行被放入NULL值。
2.2:右外連接:結(jié)果集保留右表的所有行,但只包含第二個(gè)表與第一表匹配的行。第二個(gè)表相應(yīng)的空行被放入NULL值。
左外連接和右外連接交換兩個(gè)表的位置就可以達(dá)到相同的效果。
現(xiàn)在我們進(jìn)行分組和連表一起用的查詢(xún)
例如:我們要查詢(xún)emp每個(gè)部門(mén)的工資總和并且對(duì)應(yīng)dept表中的部門(mén)名稱(chēng)
解析這句話: 查詢(xún)的字段是 emp中的每個(gè)部門(mén)sal(工資總和),這里就要用到分組查詢(xún),但是還要查詢(xún)到對(duì)應(yīng)部門(mén)的部門(mén)名稱(chēng)(dname),由于dname
是在dept表中,所以就應(yīng)該連接emp和dept兩張表.
思路1:我們先查詢(xún)出我們需要的所有字段再進(jìn)行分組,所以先連接再分組,語(yǔ)句如下:
SELECT e.deptno,d.dname,SUM(e.sal) FROM emp e INNER JOIN dept d ON e.deptno=d.deptno GROUP BY d.deptno;)(注意這里使
用了別名 emp的別名是 e,dept的別名是 d)
第二種寫(xiě)法:
SELECT e.deptno,d.dname,SUM(e.sal) FROM emp e,dept d WHEREe.deptno=d.deptno GROUP BY d.deptno;
這兩種寫(xiě)法的結(jié)果都是一樣,如下:
思路2:我們要查詢(xún)emp每個(gè)部門(mén)的工資總和,把這個(gè)結(jié)果集當(dāng)作一個(gè)表(這里稱(chēng)為表1),再讓表1去連接dept表查詢(xún)出對(duì)應(yīng)的部門(mén)名稱(chēng)(dname);
分步1:SELECT deptno,SUM(sal) FROM emp GROUP BY deptno;這個(gè)語(yǔ)句就查詢(xún)出了emp表中每個(gè)部門(mén)的工資總和,現(xiàn)在我們?cè)倥cdept
表連接:
分步2:SELECT xin.*,d.dname FROM(SELECT deptno,SUM(sal) FROM emp GROUP BY deptno) xin INNER JOIN dept d ON xin.deptno
=d.deptno;這樣就查詢(xún)出了想要的結(jié)果,注意這里的xin 是別名,結(jié)果如下:
這里的代碼看起來(lái)很長(zhǎng),其實(shí)思路是很明確的,就是把第一個(gè)查詢(xún)結(jié)果當(dāng)作一張表去連接另一張表,這樣的思路不容易出錯(cuò),多練習(xí)寫(xiě)起來(lái)就
很熟練了。
三、分頁(yè):
關(guān)鍵字:LIMIT
語(yǔ)法:select * from tableName 條件 limit 當(dāng)前頁(yè)碼*頁(yè)面容量-1 , 頁(yè)面容量;
一般limit 都和 order by 連用
例如 我們要查詢(xún)emp表中按部門(mén)編號(hào)升序排列的5-10的記錄,每頁(yè)顯示5條記錄,語(yǔ)句如下:
SELECT *FROM emp ORDER BY deptno LIMIT 4,5;
這樣就可以查詢(xún)出想要的結(jié)果了,注意最后一個(gè)參數(shù)5是頁(yè)面容量,也就是本頁(yè)要顯示的行數(shù)(即本頁(yè)開(kāi)始行到結(jié)束行的記錄條數(shù))。
比如我們要查詢(xún)17頁(yè)的記錄,每頁(yè)顯示10條記錄:
LIMIT 17*10-1,10;
四:IN
關(guān)鍵字:In
子查詢(xún)的返回值結(jié)果不只一個(gè)條件就必須用IN 不能用"=";
注:LIMIT 都是放在最后的。
以上是“MySQL查詢(xún)語(yǔ)句之復(fù)雜查詢(xún)的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
標(biāo)題名稱(chēng):MySQL查詢(xún)語(yǔ)句之復(fù)雜查詢(xún)的示例分析
分享地址:http://www.ekvhdxd.cn/article28/pooecp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)、品牌網(wǎng)站制作、Google、網(wǎng)站改版、網(wǎng)站導(dǎo)航、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)