MySQL分組查詢與連接查詢


一,分組查詢

使用ORDER BY子句將表中的數據分成若干組(還是按行顯示)

語法:

SELECT 字段名[,聚集函數] FROM 表名    [WHERE子句]    GROUP BY    要分組的字段名    [ORDER BY子句]

需要注意的是:在GROUP BY子句后出現的字段名必須在SELECT后的查詢的字段中

1.分組查詢中篩選條件分為兩種:

類別 篩選數據源 在語句中的位置 使用的關鍵字
分組前篩選 原始數據表 GROUP BY子句前 WHERE
分組后篩選 分組后的結果集 GROUP BY子句后 HAVING

注意:
(1)能用分組前篩選(WHERE子句)完成查詢優先使用分組前篩選
(2)如果聚集函數做篩選條件,則條件一定是放在HAVING子句中

2.GROUP BY子句中同時按多個字段分組

此時,GROUP BY子句后的多個字段的各個值都相同的會合並成為一行記錄,就算兩行記錄前n-1個字段的值相同,而第n個字段的值不同也不會合並成一行而是兩個不同的行。

3.添加排序

直接在GROUP BY子句后添加排序子句ORDER BY

二,連接查詢

連接查詢又稱為多表查詢。

語法:

SELECT 查詢字段    FROM 表a  [別名]  [連接類型關鍵字]  JOIN  表b  [別名]  ON 連接條件
[WHERE 篩選條件]  [GROUP BY子句]  [HAVING 篩選條件]  [ORDER BY 排序字段]

1.按功能分類:

內連接:包括 等值連接、非等值連接、自連接
外連接:包括 左外連接、右外連接、全外連接
交叉連接:實際上就是多個表的笛卡兒積

等值連接:
在連接條件中使用符號 =

非等值連接:
在連接條件中使用除 = 外其他符號,如>,<,between...and...等

自連接:inner
表自身的連接查詢,一半這種情況下,很可能對表起兩次不同的別名

需要注意的是:為表起別名后,要對查詢字段進行表限定,則要使用別名去限定二不能再使用原表名了,這個和MySQL中解析SQL語句的順序有關。

左外連接:left [outer]
以左邊的表作為主表

右外連接:right [outer]
以右邊的表作為主表

全外連接full [outer]
其實在MySQL中不支持圈外連接。

交叉連接:cross
左右表的笛卡兒積

2.按SQL標准分

在SQL92標准中:僅僅支持內連接
在SQL99標准中:支持內連接+外連接(左外,右外)+交叉連接

3.總結

以上總共有七種連接查詢,我們用一張圖來形象區分:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM