MYSQL聚合查詢、分組查詢、聯(lián)合查詢舉例詳解
聚合查詢
聚合查詢就是針對(duì)表中行與行之間的查詢。
聚合函數(shù)
count()
count(列名):查詢當(dāng)前列下面有多少條數(shù)據(jù)。
select count(*) from 表名;#查詢當(dāng)前表有多少行 select count(列名) from 表名;#查詢?cè)摿杏卸嗌傩?
- count(1),里面加個(gè)數(shù)字常量也可以達(dá)到count(*)的效果,推薦寫count(*)。
- 使用count(列名)查詢到null時(shí)不算入行數(shù)。
sum()
把查詢到的結(jié)果相加。
select sum(列名) from 表名;#將該列所有值相加
- 必須是數(shù)字,不是數(shù)字會(huì)報(bào)警告沒結(jié)果。
- 使用該函數(shù)會(huì)將null不計(jì)算,不會(huì)出現(xiàn)加上null和為null的結(jié)果。
avg()
求查詢到結(jié)果的平均值。
select avg(列名/表達(dá)式) from 表名;#將該列所有值的平均數(shù)
- 必須是數(shù)字,不是數(shù)字會(huì)報(bào)警告沒結(jié)果。
- 使用該函數(shù)會(huì)將null那行不計(jì)算,比如1,2,null平均值為(1 + 2)/
2
= 1.5000。
max()和min()
分別返回查到的最大值和最小值。
select max(列名) from 表名;#返回該列最大值 select min(列名) from 表名;#返回該列最小值
- 必須是數(shù)字,不是數(shù)字會(huì)報(bào)警告沒結(jié)果。
- null不參與。
總結(jié)
函數(shù) | 說明 |
---|---|
count (列名) | 返回查詢到的數(shù)據(jù)的 數(shù)量 |
sum(列名) | 返回查詢到的數(shù)據(jù)的 總和,不是數(shù)字沒有意義 |
avg(列名) | 返回查詢到的數(shù)據(jù)的 平均值,不是數(shù)字沒有意義 |
max(列名) | 返回查詢到的數(shù)據(jù)的 最大值,不是數(shù)字沒有意義 |
min(列名) | 返回查詢到的數(shù)據(jù)的 最小值,不是數(shù)字沒有意義 |
分組查詢
group by 子句
查詢(select) 中使用 group by子句可以對(duì)指定列進(jìn)行分組查詢。
功能就是將查詢到的結(jié)果中 group by 子句后的列完全相同的合并在一起。
select 列名.... from 表名 group by 列名1, 列名2;
group by 子句后也可以跟 order by子句排序。
having 子句
group by 子句進(jìn)行分組以后,需要對(duì)分組結(jié)果再進(jìn)行條件過濾時(shí),不能使用 where語句,而需要用having。
因?yàn)榉纸M結(jié)果在結(jié)果集中是臨時(shí)表,不是真是的數(shù)據(jù),where處理的事是真實(shí)數(shù)據(jù)。
select 列名.... from 表名 group by 列名1, 列名2 having 條件;
聯(lián)合查詢
聯(lián)合查詢就是將多張表聯(lián)合起來查詢,將需要的信息一起取出來。
笛卡爾積
笛卡爾積就是將表中每行與其他表的行進(jìn)行全排列。
select .... from 表1,表2;
例如:
當(dāng)使用笛卡爾積的表含有主外鍵查詢時(shí),因?yàn)槭侨帕?,必然?huì)產(chǎn)生無效數(shù)據(jù),我們就可以使用條件查詢,但是必須要使用 表名.列名。
通過指定列查詢精簡(jiǎn)結(jié)果集時(shí)也需要使用 表名.列名。
可以通過給表名起別名來精簡(jiǎn)SQL語句。
內(nèi)連接
兩種寫法:
select 列名 from 表1 as 別名1,表2 as 別名2 where 條件 and 其他條件; select 列名 from 表1 as 別名1 join 表2 as 別名 on 條件 and 其他條件;
外連接
外連接分為左外連接和右外連接。
如果聯(lián)合查詢,join 左側(cè)的表完全顯示我們就說是左外連接;
join右側(cè)的表完全顯示我們就說是右外連接。
select 列名 from 表1 as 別名1 right join 表2 as 別名2 on 條件;#右外連接,表2全顯示 select 列名 from 表1 as 別名1 left join 表2 as 別名2 on 條件;#左外連接,表1全顯示
自連接
自連接是指在同一張表連接自身進(jìn)行查詢。
但是必須要對(duì)表進(jìn)行起不同的別名。
select 列名 from 表名 as 別名1,表名 as 別名2 where 條件 and 其它條件; select 列名 from 表名 as 別名1 join 表名 as 別名2 on 條件 and 其它條件;
子查詢
子查詢是指嵌入在其他sql語句中的select語句,也叫嵌套查詢。
select 列名 from 表名 where 列 = (select語句 );#例子
單行子查詢
作為條件的子查詢語句返回值只有一行數(shù)據(jù)。
多行子查詢
作為條件的子查詢語句返回值有多行行數(shù)據(jù)。
- 可以使用in來處理:
- 可以使用多列包含:
將where條件括號(hào)中與返回值一一進(jìn)行比較 - 使用[not] exists關(guān)鍵字
select 列名 from 表名 where exists (select語句);
后面查詢語句返回結(jié)果集為空就不執(zhí)行前面的查詢語句,反之不為空?qǐng)?zhí)行。
from子句使用子查詢
在from子句中使用子查詢:子查詢語句出現(xiàn)在from子句中。
把一個(gè)子查詢當(dāng)做一個(gè)臨時(shí)表使用。
合并查詢
為了合并多個(gè)select的執(zhí)行結(jié)果,可以使用集合操作符 union,union all。
使用union 和union all時(shí),前后查詢的結(jié)果集中,字段需要一致。
- union操作符用于取得兩個(gè)結(jié)果集的并集。當(dāng)使用該操作符時(shí),
會(huì)自動(dòng)去掉結(jié)果集中的重復(fù)行。 - union all 操作符用于取得兩個(gè)結(jié)果集的并集。當(dāng)使用該操作符時(shí),不會(huì)去掉結(jié)果集中的重復(fù)行。
總結(jié)
到此這篇關(guān)于MYSQL聚合查詢、分組查詢、聯(lián)合查詢的文章就介紹到這了,更多相關(guān)MYSQL聚合查詢、分組查詢、聯(lián)合查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
登錄MySQL時(shí)出現(xiàn)SSL connection error: unknown
這篇文章主要介紹了登錄MySQL時(shí)出現(xiàn)SSL connection error: unknown error number錯(cuò)誤的解決方法,文中通過圖文結(jié)合的形式講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-12-12MySQL中字符串與Num類型拼接報(bào)錯(cuò)的解決方法
在使用mysql的時(shí)候經(jīng)常要用到拼接的功能,最近的工作就遇到拼接的問題,在將字符串拼接Num類型的時(shí)候發(fā)現(xiàn)居然報(bào)錯(cuò),下面通過這篇文章來看看解決的方法吧,有需要的朋友們可以參考借鑒。2016-10-10MySQL對(duì)數(shù)據(jù)庫數(shù)據(jù)進(jìn)行復(fù)制的基本過程詳解
這篇文章主要介紹了MySQL對(duì)數(shù)據(jù)庫數(shù)據(jù)進(jìn)行復(fù)制的基本過程,解讀了Slave的一些相關(guān)配置,需要的朋友可以參考下2015-11-11給MySQL表中的字段設(shè)置默認(rèn)值的兩種方法
在MySQL中,我們可以為表的字段設(shè)置默認(rèn)值,以確保在插入新記錄時(shí),如果沒有為該字段指定值,將使用默認(rèn)值,要為MySQL表中的字段設(shè)置默認(rèn)值,我們可以在創(chuàng)建表時(shí)或者在已存在的表上使用ALTER TABLE語句進(jìn)行修改,下面將展示兩種設(shè)置默認(rèn)值的方法,需要的朋友可以參考下2023-11-11Mysql Binlog快速遍歷搜索記錄及binlog數(shù)據(jù)查看的方法
這篇文章主要介紹了Mysql Binlog快速遍歷搜索記錄及binlog數(shù)據(jù)查看的方法的相關(guān)資料,需要的朋友可以參考下2016-01-01