欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

聚合查詢:

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

聚合函數(shù)

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

count()

select count(列名) from 表名;

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

例如我們暫時使用這個表進行演示:

此表有一行全為空

sum()

select sum(列名) from 表名;

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

對該表中的math列的值進行求和。

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

avg()

select avg(列名) from 表名;

對該表中的該列進行求平均值。

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

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

max()

select max(列名) from 表名;

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

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

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

min()

select min(列名) from 表名;

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

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

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

group by

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

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

select * from 表名 group by 列名;

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

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

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

此時再進行分組查詢操作:

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

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

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

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

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

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

在后面就會報錯。

having

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

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

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

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

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

所以 having 子句中的條件一定要和 select 中的對應

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

聯(lián)合查詢:

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

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

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

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

這就是對兩個表進行去取笛卡爾積的結果。

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

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

內(nèi)連接

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

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

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

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

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

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

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

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

第一步:先求出笛卡爾積

select * from 表一,表二,……

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

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

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

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

第三步:結合需求進一步增加條件,對結果進行篩選;

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

第四步:對列進行精簡,篩選出需要展示的列

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

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

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

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

外連接

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

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

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

左外連接

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

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

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

右外連接

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

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

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

自連接

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

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

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

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

子查詢

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

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

1.先找出可莉的班級號

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

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

合并查詢

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

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

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

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

在這張結果中只有一個 id = 1 的學生。

如果你不想對結果進行去重處理,就可以使用 union all 

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

總結 

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

相關文章

  • MySQL8.0.32安裝及環(huán)境配置過程

    MySQL8.0.32安裝及環(huán)境配置過程

    這篇文章主要介紹了MySQL8.0.32安裝以及環(huán)境配置,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • mysql的udf編程之非阻塞超時重傳

    mysql的udf編程之非阻塞超時重傳

    這篇文章主要介紹了mysql udf編程的非阻塞超時重傳示例,需要的朋友可以參考下
    2014-03-03
  • mysql啟動提示:錯誤2系統(tǒng)找不到指定文件的解決方案

    mysql啟動提示:錯誤2系統(tǒng)找不到指定文件的解決方案

    這篇文章主要給大家介紹了mysql啟動提示:錯誤2系統(tǒng)找不到指定文件的解決方案,文中通過圖文結合的方式給大家講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • Mysql索引分類及其使用實例詳解

    Mysql索引分類及其使用實例詳解

    數(shù)據(jù)庫的索引就像一本書的目錄,能夠加快數(shù)據(jù)庫的查詢速度,MYSQL索引有四種PRIMARY、INDEX、UNIQUE、FULLTEXT,?其中PRIMARY、INDEX、UNIQUE是一類,F(xiàn)ULLTEXT是一類,本文給大家介紹Mysql索引分類及其使用實例,感興趣的朋友一起看看吧
    2022-07-07
  • MySQL 重裝MySQL后, mysql服務無法啟動

    MySQL 重裝MySQL后, mysql服務無法啟動

    把mysql程序卸載后, 重裝, 結果mysql服務啟動不了,碰到這個問題的朋友可以參考下。
    2011-08-08
  • MySQL的DELETE刪除數(shù)據(jù)示例詳解

    MySQL的DELETE刪除數(shù)據(jù)示例詳解

    MySQL的DELETE語句用于從數(shù)據(jù)庫表中刪除記錄,本文將詳細介紹DELETE語句的基本語法、高級用法、性能優(yōu)化策略以及注意事項,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • MySQL數(shù)據(jù)權限的實現(xiàn)詳情

    MySQL數(shù)據(jù)權限的實現(xiàn)詳情

    這篇文章主要介紹了MySQL數(shù)據(jù)權限的實現(xiàn)詳情,文章通過實際案例,從代碼實戰(zhàn)的角度來實現(xiàn)這樣的一個數(shù)據(jù)權限。具體詳細介紹,具有一定的參考價值
    2022-08-08
  • MySQL數(shù)據(jù)庫表被鎖、解鎖以及刪除事務詳解

    MySQL數(shù)據(jù)庫表被鎖、解鎖以及刪除事務詳解

    這篇文章主要給大家介紹了關于MySQL數(shù)據(jù)庫表被鎖、解鎖以及刪除事務的相關資料,需要的朋友可以參考下
    2022-05-05
  • MySql 5.7.17免安裝配置教程詳解

    MySql 5.7.17免安裝配置教程詳解

    這篇文章給大家詳細介紹了MySql 5.7.17免安裝配置教程,首先大家需要先下載mysql 5.7.17 的安裝包,然后解壓,具體配置過程大家通過本文一起學習吧
    2017-03-03
  • MySQL索引用法實例分析

    MySQL索引用法實例分析

    這篇文章主要介紹了MySQL索引用法,結合實例形式較為詳細的分析了mysql索引的功能、定義、使用方法與相關注意事項,需要的朋友可以參考下
    2016-07-07

最新評論