最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL數(shù)據(jù)庫聚合查詢和聯(lián)合查詢詳解

 更新時間:2024年03月06日 10:13:32   作者:晚餐是PM  
聚合查詢就是在一個表里通過聚合函數(shù)進(jìn)行查詢操作,通常是求和,求平均值等操作,這篇文章主要介紹了MySQL聚合查詢和聯(lián)合查詢的相關(guān)資料,需要的朋友可以參考下

聚合查詢:

下文中的所有聚合查詢的示例操作都是基于此表:

聚合函數(shù)

聚合函數(shù)都是行與行之間的運(yùn)算。

count()

select count(列名) from 表名;

統(tǒng)計該表中該列的行數(shù),但是 null 值不會統(tǒng)計在內(nèi),但是如果寫為 count(*) 那么 null 也會算進(jìn)去(就算一整行都是 null 也會算進(jìn)去

例如我們暫時使用這個表進(jìn)行演示:

此表有一行全為空

sum()

select sum(列名) from 表名;

只能針對數(shù)字類型使用,也可以對多列進(jìn)行相加求一個總和;

對該表中的math列的值進(jìn)行求和。

注:會將 null 值排除在外,不予計算。

avg()

select avg(列名) from 表名;

對該表中的該列進(jìn)行求平均值。

只能針對數(shù)字類型使用

注:會將 null 值排除在外,不予計算。

max()

select max(列名) from 表名;

求出該表中該列的最大值。

只能針對數(shù)字類型使用

注:會將 null 值排除在外,不予計算。

min()

select min(列名) from 表名;

求出該表中該列的最小值。

只能針對數(shù)字類型使用

注:會將 null 值排除在外,不予計算。

group by

group by 可以實現(xiàn)對數(shù)據(jù)進(jìn)行分組

一般的使用方法都是先用  group by 進(jìn)行分組,然后再利用聚合函數(shù)進(jìn)行聚合查詢。

select * from 表名 group by 列名;

group by 會將該列中值相同的分為一組。因為沒有使用order by 進(jìn)行排序操作所以MySQL并不會對查詢結(jié)果的順序做出保證。

此時我們在原有表的基礎(chǔ)上再加一行數(shù)據(jù)。

加入該條數(shù)據(jù)后該表變成了:

此時再進(jìn)行分組查詢操作:

此時因為沒有使用聚合函數(shù)所以 張三這一行 只是在張三這一組中選了一個代表。

如果加入聚合函數(shù)就可以很清楚的看到,聚合函數(shù)會以每組為單位進(jìn)行操作。

此時如果我們不想讓某行(某幾行)參與分組就可以在 group by 之前加入 where 進(jìn)行條件篩選。

select * from 表名 where 條件 group by 列名;

例:此時我們不想讓 null 這個空值和 math=100 的行參與分組 

注意:where 條件 必須在 group by 之前

在后面就會報錯。

having

having 其實和 where 差不多都是進(jìn)行條件篩選的語句。

group by 子句進(jìn)行分組以后,需要對分組結(jié)果再進(jìn)行條件過濾時,不能使用 where 語句,而需要用 having

having是對分組之后的數(shù)據(jù)進(jìn)行篩選的。

例:此時我們不想讓 null 這個空值和 成績=100 的行參與分組 

此時的語句執(zhí)行順序為:

所以 having 子句中的條件一定要和 select 中的對應(yīng)

注:having 必須寫在 group by 子句之后。

聯(lián)合查詢:

實際開發(fā)中往往數(shù)據(jù)來自不同的表,所以需要多表聯(lián)合查詢。

多表查詢的關(guān)鍵是對多張表的數(shù)據(jù)取笛卡爾積:

下面我先簡單介紹一下笛卡爾積,假設(shè)我們現(xiàn)在有如下的兩張表。而對他們的數(shù)據(jù)取笛卡爾積就是用第一個表的每行數(shù)據(jù)分別與第二張表的每行數(shù)據(jù)進(jìn)行組合。 

這兩張表進(jìn)行笛卡爾積之后就變成了一個 9 行 4 列的新表,如圖所示

這就是對兩個表進(jìn)行去取笛卡爾積的結(jié)果。

但是,我們很容易就可以發(fā)現(xiàn)這里面有非常多的所謂的非法數(shù)據(jù),

從圖中我們可以看到只有三條數(shù)據(jù)是合法的,而我們再進(jìn)行數(shù)據(jù)庫操作的時候肯定不能允許有這么多的非法數(shù)據(jù)出現(xiàn)在查詢結(jié)果中,此時我們就可以通過尋找兩張表的關(guān)聯(lián)屬性來通過 where 條件來進(jìn)行篩選,比如上面的表就可以通過設(shè)置兩張表的班級相同來進(jìn)行篩選。

內(nèi)連接

內(nèi)連接其實就是在多張表中求交集(或者說就是最終查詢的結(jié)果中的每條數(shù)據(jù)的鏈接條件都存在于原本的多張表中)。

此處為了更好的演示,我先創(chuàng)建了三張表

內(nèi)連接的語句就這兩條: 

select 字段 from 表1  [inner] join 表2  on 連接條件 and 其他條件;

select 字段 from 表1 ,表2  where 連接條件 and 其他條件;

上面這些格式看著很復(fù)雜其實完全沒有必要記這些。只要按照下面這些步驟一步一步的多練習(xí)幾次就能掌握。

內(nèi)連接本質(zhì)上分為以下幾步:

例:查詢凌華的各科成績。

第一步:先求出笛卡爾積

select * from 表一,表二,……

通過上述語句就可以求出多張表的笛卡爾積。

此時一共輸出了27條數(shù)據(jù)。

第二步:加上連接條件,篩選出合法信息

此處推薦再寫where中的條件時,使用 表名 點 列名 的寫法因為表中可能會有相同的列名。

第三步:結(jié)合需求進(jìn)一步增加條件,對結(jié)果進(jìn)行篩選;

此處需要增加的條件就是名字是凌華。

第四步:對列進(jìn)行精簡,篩選出需要展示的列

此時你再對照開頭的表達(dá)式就會發(fā)現(xiàn)一摸一樣,基本上所有的內(nèi)連接都可以套用這四大步。

select 字段 from 表1  [inner] join 表2  on 連接條件 and 其他條件;

select 字段 from 表1 ,表2  where 連接條件 and 其他條件;

注:第一條語句中的 [inner] join 中的 inner 之所以用 [] 括起來是因為可以省略不寫。

外連接

如果多張表中的信息都存在對應(yīng)關(guān)系那么內(nèi)連接和外連接的結(jié)果就都是一樣的,如果表中的數(shù)據(jù)不對應(yīng)內(nèi)外連接就會出現(xiàn)差別。

外連接分為左外連接和右外連接。

例:有如下兩張數(shù)據(jù)沒有完全對應(yīng)的表

左外連接

select 字段 from 表1  left join 表2 on 連接條件 and 其他條件;

這個表達(dá)式除了 left 之外和內(nèi)連接都是相同的。

左外連接就是以左表為基礎(chǔ),如果左表有右表沒有那么就用 null 代替。

右外連接

select 字段 from 表1  right join 表2 on 連接條件 and 其他條件;

這個表達(dá)式除了 right 之外和左外連接都是相同的。

右外連接就是以右表為基礎(chǔ),如果右表有左表沒有那么就用 null 代替。

自連接

自連接就是自己和自己取笛卡爾積,和內(nèi)連接的解題方法相同。

注:在自連接中必須要給表取別名否則會報錯。

自連接的優(yōu)點:可以將行與行之間的關(guān)系轉(zhuǎn)換成列與列。

例:在上述表中查詢出 C++ 成績大于單片機(jī)成績的人。

子查詢

子查詢本質(zhì)上就是‘套娃’,就是將多個簡單的sql語句嵌套成一個復(fù)雜的sql語句。 

例:查找出名為可莉的學(xué)生在幾年級。

1.先找出可莉的班級號

2.根據(jù)班級號在班級表中找到班級名

而子查詢就是將這兩句sql語句嵌套起來

合并查詢

合并查詢是通過 union 來實現(xiàn)的

在MySQl中可以通過 union 來將多個表的查詢結(jié)果合并成一張表。

注:合并的兩個結(jié)果的對應(yīng)列之間列數(shù)和數(shù)據(jù)類型必須相同(列名系統(tǒng)會自動按照第一個表的列名),union 會去掉結(jié)果中的重復(fù)項。

例如查詢這兩張表中的 id 和 name 結(jié)果返回一張表;

在這張結(jié)果中只有一個 id = 1 的學(xué)生。

如果你不想對結(jié)果進(jìn)行去重處理,就可以使用 union all 

如果對同一張表使用 union 那么它的結(jié)果會和使用 or 相同。

總結(jié) 

到此這篇關(guān)于MySQL數(shù)據(jù)庫聚合查詢和聯(lián)合查詢的文章就介紹到這了,更多相關(guān)MySQL聚合查詢和聯(lián)合查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Linux環(huán)境下安裝mysql5.7.36數(shù)據(jù)庫教程

    Linux環(huán)境下安裝mysql5.7.36數(shù)據(jù)庫教程

    大家好,本篇文章主要講的是Linux環(huán)境下安裝mysql5.7.36數(shù)據(jù)庫教程,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • MySQL的optimize table使用詳解

    MySQL的optimize table使用詳解

    OPTIMIZETABLE是MySQL用于優(yōu)化表性能與空間利用的重要語句,通過回收磁盤空間、提升查詢性能和修復(fù)統(tǒng)計信息,適用于頻繁刪改或數(shù)據(jù)插入順序混亂的表,本文介紹MySQL的optimize table使用,感興趣的朋友跟隨小編一起看看吧
    2026-04-04
  • MySQL索引的原理與性能優(yōu)化設(shè)計教程(圖文代碼)

    MySQL索引的原理與性能優(yōu)化設(shè)計教程(圖文代碼)

    本文詳細(xì)介紹了索引的分類、功能和實現(xiàn)方式,包括主鍵索引、唯一索引、常規(guī)索引、全文索引以及聚簇索引和非聚簇索引,文章還探討了索引設(shè)計的最佳實踐,包括主鍵選擇、索引覆蓋等優(yōu)化策略,為數(shù)據(jù)庫性能優(yōu)化提供了理論基礎(chǔ)
    2026-01-01
  • centos7安裝mysql5.7的踩坑記錄

    centos7安裝mysql5.7的踩坑記錄

    最近在做項目中發(fā)現(xiàn)CentOS 7下升級MySQL5.7的一個坑,所以下面這篇文章主要給大家介紹了關(guān)于centos7安裝mysql5.7的踩坑記錄,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • mysql中的concat()函數(shù)模糊查詢代替${}問題

    mysql中的concat()函數(shù)模糊查詢代替${}問題

    這篇文章主要介紹了mysql中的concat()函數(shù)模糊查詢代替${}問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • MySQL?聚合函數(shù)、分組、聯(lián)合查詢詳解

    MySQL?聚合函數(shù)、分組、聯(lián)合查詢詳解

    本文介紹了MySQL中的聚合函數(shù)、分組查詢和聯(lián)合查詢,并通過多個示例題目進(jìn)行鞏固,聚合函數(shù)用于計算匯總統(tǒng)計值,分組查詢用于將數(shù)據(jù)分成組并應(yīng)用聚合函數(shù),聯(lián)合查詢用于從多個表中組合數(shù)據(jù),通過實例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • MySQL Count函數(shù)使用教程

    MySQL Count函數(shù)使用教程

    這篇文章主要介紹了MySQL Count函數(shù),COUNT()是一個聚合函數(shù),返回指定匹配條件的行數(shù)。開發(fā)中常用來統(tǒng)計表中數(shù)據(jù),全部數(shù)據(jù),不為NULL數(shù)據(jù),或者去重數(shù)據(jù)
    2022-12-12
  • MySQL如何配置my.ini文件

    MySQL如何配置my.ini文件

    文章介紹了如何修改my.ini文件以解決數(shù)據(jù)庫忘記密碼或其他基礎(chǔ)問題,首先,需要停止數(shù)據(jù)庫服務(wù),然后創(chuàng)建并編輯my.ini文件,設(shè)置數(shù)據(jù)庫字符集、緩沖池大小等參數(shù),接著,刪除舊的data文件夾并重新生成,配置my.ini文件時要注意命名規(guī)范
    2025-01-01
  • MySql 8.0.11安裝配置教程

    MySql 8.0.11安裝配置教程

    這篇文章給大家介紹了MySql 8.0.11安裝配置教程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,感興趣的朋友一起看看吧
    2018-05-05
  • mysql中取系統(tǒng)當(dāng)前時間,當(dāng)前日期方便查詢判定的代碼

    mysql中取系統(tǒng)當(dāng)前時間,當(dāng)前日期方便查詢判定的代碼

    今天在寫一段查詢語句的時候,需要判定結(jié)束日期是不是大于當(dāng)前日期,一般情況下都是通過php判定日期,然后查詢。
    2011-12-12

最新評論

娄底市| 南郑县| 尚义县| 吴桥县| 安泽县| 隆尧县| 鹰潭市| 墨玉县| 日照市| 新田县| 青龙| 闽清县| 安陆市| 上饶市| 北票市| 晋江市| 扶绥县| 桐乡市| 贵溪市| 固镇县| 平远县| 黔西县| 射洪县| 维西| 道孚县| 商洛市| 改则县| 朝阳区| 英德市| 盘锦市| 永修县| 通化县| 华池县| 大足县| 荃湾区| 景泰县| 刚察县| 平安县| 宣城市| 兴仁县| 剑河县|