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)警告沒(méi)結(jié)果。
- 使用該函數(shù)會(huì)將null不計(jì)算,不會(huì)出現(xiàn)加上null和為null的結(jié)果。
avg()
求查詢到結(jié)果的平均值。
select avg(列名/表達(dá)式) from 表名;#將該列所有值的平均數(shù)
- 必須是數(shù)字,不是數(shù)字會(huì)報(bào)警告沒(méi)結(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)警告沒(méi)結(jié)果。
- null不參與。
總結(jié)
| 函數(shù) | 說(shuō)明 |
|---|---|
| count (列名) | 返回查詢到的數(shù)據(jù)的 數(shù)量 |
| sum(列名) | 返回查詢到的數(shù)據(jù)的 總和,不是數(shù)字沒(méi)有意義 |
| avg(列名) | 返回查詢到的數(shù)據(jù)的 平均值,不是數(shù)字沒(méi)有意義 |
| max(列名) | 返回查詢到的數(shù)據(jù)的 最大值,不是數(shù)字沒(méi)有意義 |
| min(列名) | 返回查詢到的數(shù)據(jù)的 最小值,不是數(shù)字沒(méi)有意義 |
分組查詢
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)行條件過(guò)濾時(shí),不能使用 where語(yǔ)句,而需要用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)合起來(lái)查詢,將需要的信息一起取出來(lái)。
笛卡爾積
笛卡爾積就是將表中每行與其他表的行進(jìn)行全排列。
select .... from 表1,表2;
例如:

當(dāng)使用笛卡爾積的表含有主外鍵查詢時(shí),因?yàn)槭侨帕校厝粫?huì)產(chǎn)生無(wú)效數(shù)據(jù),我們就可以使用條件查詢,但是必須要使用 表名.列名。
通過(guò)指定列查詢精簡(jiǎn)結(jié)果集時(shí)也需要使用 表名.列名。
可以通過(guò)給表名起別名來(lái)精簡(jiǎn)SQL語(yǔ)句。
內(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è)的表完全顯示我們就說(shuō)是左外連接;
join右側(cè)的表完全顯示我們就說(shuō)是右外連接。
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語(yǔ)句中的select語(yǔ)句,也叫嵌套查詢。
select 列名 from 表名 where 列 = (select語(yǔ)句 );#例子
單行子查詢
作為條件的子查詢語(yǔ)句返回值只有一行數(shù)據(jù)。

多行子查詢
作為條件的子查詢語(yǔ)句返回值有多行行數(shù)據(jù)。
- 可以使用in來(lái)處理:

- 可以使用多列包含:
將where條件括號(hào)中與返回值一一進(jìn)行比較
- 使用[not] exists關(guān)鍵字
select 列名 from 表名 where exists (select語(yǔ)句);
后面查詢語(yǔ)句返回結(jié)果集為空就不執(zhí)行前面的查詢語(yǔ)句,反之不為空?qǐng)?zhí)行。

from子句使用子查詢
在from子句中使用子查詢:子查詢語(yǔ)句出現(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 Version確認(rèn)問(wèn)題(版本確認(rèn))
這篇文章主要介紹了MySQL Version確認(rèn)問(wèn)題(版本確認(rèn)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
MySQL 外鍵約束和表關(guān)系相關(guān)總結(jié)
一個(gè)項(xiàng)目中如果將所有的數(shù)據(jù)都存放在一張表中是不合理的,比如一個(gè)員工信息,公司只有2個(gè)部門,但是員工有1億人,就意味著員工信息這張表中的部門字段的值需要重復(fù)存儲(chǔ),極大的浪費(fèi)資源,因此可以定義一個(gè)部門表和員工信息表進(jìn)行關(guān)聯(lián),而關(guān)聯(lián)的方式就是外鍵。2021-06-06
關(guān)于MySQL外鍵的簡(jiǎn)單學(xué)習(xí)教程
這篇文章主要介紹了關(guān)于MySQL外鍵的簡(jiǎn)單學(xué)習(xí)教程,對(duì)InnoDB引擎下的外鍵約束做了簡(jiǎn)潔的講解,需要的朋友可以參考下2015-11-11
如何把本地mysql遷移到服務(wù)器數(shù)據(jù)庫(kù)
這篇文章主要介紹了如何把本地mysql遷移到服務(wù)器數(shù)據(jù)庫(kù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
MySQL服務(wù)無(wú)法啟動(dòng)且服務(wù)沒(méi)有報(bào)告任何錯(cuò)誤的解決辦法
在啟動(dòng)項(xiàng)目時(shí),發(fā)現(xiàn)昨天能夠跑的項(xiàng)目今天跑不了了,一看原來(lái)是mysql數(shù)據(jù)庫(kù)出現(xiàn)了問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于MySQL服務(wù)無(wú)法啟動(dòng)且服務(wù)沒(méi)有報(bào)告任何錯(cuò)誤的解決辦法,需要的朋友可以參考下2023-05-05
linux服務(wù)器清空MySQL的history歷史記錄 刪除mysql操作記錄
mysql歷史記錄上可能留下了很多敏感信息,比如密碼什么的,需及時(shí)清空歷史記錄,下面分享一下inux服務(wù)器清空MySQL的history歷史記錄的方法2014-01-01

