六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

MySQL查詢語句之復雜查詢

[摘要]MySQL是一種關系數據庫管理系統,關系數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度并提高了靈活性。在MySQL中經常會有很多復雜的查詢,為了節約大家的時間,小編...
MySQL是一種關系數據庫管理系統,關系數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度并提高了靈活性。在MySQL中經常會有很多復雜的查詢,為了節約大家的時間,小編總結了一些經常用到的復雜查詢。

MySQL復雜查詢

一、分組查詢:

1、關鍵字:GROUP BY

2、用法:GROUP BY 語句用于結合合計函數 (比如 SUM) ,根據一個或多個列對結果集進行分組,合計函數常常需要添加 GROUP BY 語句。

下面的給了兩張表 一張是emp,一張是dept,下面的查詢我們都對這兩張表進行操作,如下圖:

第一張:emp

MySQL查詢語句之復雜查詢

第二張:dept

MySQL查詢語句之復雜查詢

現在我們查詢emp每個部門的工資總和,語句如下:

SELECT deptno,SUM(sal)FROM emp GROUP BY deptno;

結果如下:

MySQL查詢語句之復雜查詢

:這里我們查詢每個部門的工資(sal)總和,所以應該按照部門標號(deptno)進行分組,求和所以用了sum();

3、having:

where 和 having 都是做條件判斷,在介紹having前我們看下where 和 having的區別

where的作用是在對查詢結果進行分組前,將不符合where條件的行去掉,即在分組之前過濾數據,條件中不能包含聚合函數,使用where條件顯示特定的行。

having的作用是篩選滿足條件的組,即在分組之后過濾數據,條件中經常包含聚合函數,使用having 條件顯示特定的組,也可以使用多個分組標準進行分組。

例如:我們要查詢emp表中工資總和大于10000的部門編號,語句如下:

SELECT deptno,SUM(sal)FROM emp GROUP BY deptno HAVING SUM(sal)>10000;

結果如下:

MySQL查詢語句之復雜查詢

這樣就查出了工資總和大于10000的部門編號為20,(為了理解也把工資總和顯示出來了)。

二、連表查詢:

根據兩個或多個表中的列之間的關系,從這些表中查詢數據.

1、inner join(內連接):

語法:select 字段名1,字段名2 from table1 [INNER] join table2 ON table1.字段名=table2.字段名;

注:內連接是從結果中刪除其他被連接的表中沒有匹配行的所有行,只能查詢出連接的表中都擁有的信息,所以內連接可能會丟失信息,還有inner可以省略。

例如:我們連接emp 和 dept兩張表,查詢ename 和deptno,語句如下:

SELECT emp.ename,dept.deptno FROM emp INNER JOIN dept ON emp.deptno=dept.deptno;

還有種寫法:SELECT emp.ename,dept.deptno from emp,dept where emp.deptno=dept.deptno;


MySQL查詢語句之復雜查詢


注意:原來dept表中有deptno為40的,但查詢出來就沒有了,這里是因為emp中deptno字段中沒有值為40,所以使用innner join連接時就自動刪除了dept表中deptno字段值為40的記錄。

2、外連接:

2.1:左外連接:結果集保留左表的所有行,但只包含第二個表與第一表匹配的行。第二個表相應的空行被放入NULL值。

2.2:右外連接:結果集保留右表的所有行,但只包含第二個表與第一表匹配的行。第二個表相應的空行被放入NULL值。

左外連接和右外連接交換兩個表的位置就可以達到相同的效果。

現在我們進行分組和連表一起用的查詢

例如:我們要查詢emp每個部門的工資總和并且對應dept表中的部門名稱

解析這句話: 查詢的字段是 emp中的每個部門sal(工資總和),這里就要用到分組查詢,但是還要查詢到對應部門的部門名稱(dname),由于dname

是在dept表中,所以就應該連接emp和dept兩張表.

思路1:我們先查詢出我們需要的所有字段再進行分組,所以先連接再分組,語句如下:

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)

第二種寫法:

SELECT e.deptno,d.dname,SUM(e.sal) FROM emp e,dept d WHEREe.deptno=d.deptno GROUP BY d.deptno;

這兩種寫法的結果都是一樣,如下:


MySQL查詢語句之復雜查詢


思路2:我們要查詢emp每個部門的工資總和,把這個結果集當作一個表(這里稱為表1),再讓表1去連接dept表查詢出對應的部門名稱(dname);

分步1:SELECT deptno,SUM(sal) FROM emp GROUP BY deptno;這個語句就查詢出了emp表中每個部門的工資總和,現在我們再與dept

表連接:

分步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;這樣就查詢出了想要的結果,注意這里的xin 是別名,結果如下:


MySQL查詢語句之復雜查詢


這里的代碼看起來很長,其實思路是很明確的,就是把第一個查詢結果當作一張表去連接另一張表,這樣的思路不容易出錯,多練習寫起來就

很熟練了。

三、分頁:

關鍵字:LIMIT

語法:select * from tableName 條件 limit 當前頁碼*頁面容量-1 , 頁面容量;

一般limit 都和 order by 連用

例如 我們要查詢emp表中按部門編號升序排列的5-10的記錄,每頁顯示5條記錄,語句如下:

SELECT *FROM emp ORDER BY deptno LIMIT 4,5;

這樣就可以查詢出想要的結果了,注意最后一個參數5是頁面容量,也就是本頁要顯示的行數(即本頁開始行到結束行的記錄條數)。

比如我們要查詢17頁的記錄,每頁顯示10條記錄:

LIMIT 17*10-1,10;

四:IN

關鍵字:In

子查詢的返回值結果不只一個條件就必須用IN 不能用"=";

注:LIMIT 都是放在最后的。

相關推薦:

MySQL5.7缺少my.ini文件如何解決

關于mysql max 與 where 間的執行問題小結

MySQL統計信息的詳細概述

以上就是MySQL查詢語句之復雜查詢的詳細內容,更多請關注php中文網其它相關文章!


學習教程快速掌握從入門到精通的SQL知識。




主站蜘蛛池模板: 色成人综合网 | 午夜免费啪在线观看视频网站 | 香蕉久人久人青草青草 | 永久视频免费 | 日本小视频在线 | 天天操狠狠 | 日日噜噜夜夜躁躁狠狠 | 午夜 福利 视频 | 人人澡天天澡夜夜澡 | 欧美一级大黄 | 午夜免费剧场 | 青草国产精品久久久久久久久 | 亚洲97i蜜桃网 | 日本成片免费高清 | 情不自禁完整版在线观看免费 | 色呦呦在线看 | 三级在线观看免播放网站 | 日本视频a| 青草青草久热精品观看 | 日本高清视频不卡 | 色综合成人丁香 | 最近韩国日本免费 | 亚洲成a人v大片在线观看 | 青春草在线免费观看 | 全黄a一级毛片 | 热99re久久国超精品首页 | 日本高清视频在线观看 | 青娱乐欧美视频 | 一级床片40分钟免费视频 | 青春草在线观看播放免费视频 | 日本欧美一区二区三区视频麻豆 | 一级毛片一级毛片一级毛片一级毛片 | 视频大全在线观看免费 | 亚洲第一区二区快射影院 | 性色午夜视频免费男人的天堂 | 日韩人成免费网站大片 | 中文字幕在线观看日本 | 亚洲欧美韩日 | 欧美一区网站 | 午夜精品福利在线观看 | 日韩专区视频 |