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

MYSQL多表聯(lián)查on和where的區(qū)別小結(jié)

 更新時間:2023年11月06日 16:00:39   作者:當(dāng)我們不再理解世界  
在使用left join時過濾條件放到on后面還是where后面是有區(qū)別的,如果沒有搞清楚他們的區(qū)別,連表匯總的結(jié)果就會變少或者變多,本文就來詳細(xì)介紹一下兩者的區(qū)別,感興趣的可以了解一下

一、背景

在一次對數(shù)據(jù)進(jìn)行統(tǒng)計的時候,需要對兩張表進(jìn)行關(guān)聯(lián),類似于這樣的語句a left join b on a.id = b.id where b.name = xx。發(fā)現(xiàn)最終的結(jié)果和預(yù)期不一致,匯總之后的數(shù)據(jù)變少了。

一開始還比較費(fèi)解,后面回過神來才發(fā)現(xiàn),犯了一個低級的錯誤,就是在使用left join時過濾條件放到on后面還是where后面是有區(qū)別的,如果沒有搞清楚他們的區(qū)別,連表匯總的結(jié)果就會變少或者變多。

二、探究

student表

classes表

2.1、統(tǒng)計每個班級中女生的數(shù)量 錯誤的寫法

select a.name, count(b.name) as num from classes a left join students b
on a.id = b.class_id
where b.gender = 'F'
group by a.name

查詢結(jié)果

正確的寫法

select a.name, count(b.name) as num
from classes a left join students b
on a.id = b.class_id and b.gender = 'F'
group by a.name

查詢結(jié)果

2.2、只統(tǒng)計"一班"的學(xué)生數(shù)量 錯誤的寫法

select a.name, count(b.name) as num
from classes a left join students b
on a.id = b.class_id and a.name = '一班'
group by a.name 

查詢結(jié)果

正確的寫法

select a.name, count(b.name) as num
from classes a left join students b
on a.id = b.class_id
where a.name = '一班'
group by a.name 

查詢結(jié)果

問題一錯誤的原因:由于在where條件中對右表限制,導(dǎo)致數(shù)據(jù)缺失(四班應(yīng)該有個為0的結(jié)果)。

問題二錯誤的原因:由于在on條件中對左表限制,導(dǎo)致數(shù)據(jù)多余(其他班的結(jié)果也出來了,還是錯的)。on 后跟關(guān)聯(lián)表(從表)的過濾條件,如果再加篩選條件只針對關(guān)聯(lián)表!

on 后跟關(guān)聯(lián)表(從表)的過濾條件,where 后跟主表或臨時表的篩選條件(左連接為例,主表的數(shù)據(jù)都會查詢到,所以臨時表中必定包含主表所有的字段,需要給主表加什么篩選條件,直接給臨時表加效果相同) 。

三、總結(jié)

通過上面的問題現(xiàn)象和分析,可以得出了結(jié)論:在left join語句中,左表過濾必須放where條件中,右表過濾必須放on條件中,這樣結(jié)果才能不多不少,剛剛好。

到此這篇關(guān)于MYSQL多表聯(lián)查on和where的區(qū)別小結(jié)的文章就介紹到這了,更多相關(guān)MYSQL on和where區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysql數(shù)據(jù)庫中各種鎖歸納總結(jié)

    mysql數(shù)據(jù)庫中各種鎖歸納總結(jié)

    相對于其他的數(shù)據(jù)庫而言,MySQL的鎖機(jī)制比較簡單,最顯著的特點(diǎn)就是不同的存儲引擎支持不同的鎖機(jī)制,這篇文章主要給大家介紹了關(guān)于mysql數(shù)據(jù)庫中各種鎖歸納總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • Linux下mysql 8.0安裝教程

    Linux下mysql 8.0安裝教程

    這篇文章主要為大家詳細(xì)介紹了Linux下mysql 8.0安裝教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • centos上安裝mysql并設(shè)置遠(yuǎn)程訪問的操作方法

    centos上安裝mysql并設(shè)置遠(yuǎn)程訪問的操作方法

    這篇文章主要介紹了centos上安裝mysql并設(shè)置遠(yuǎn)程訪問的操作方法,需要的朋友可以參考下
    2017-11-11
  • Mysql數(shù)據(jù)庫命令大全

    Mysql數(shù)據(jù)庫命令大全

    mysql命令大家經(jīng)常會用到,但是很少有朋友整理吧,最近項目不多,抽個時間把mysql數(shù)據(jù)庫命令總結(jié)給大家,需要的朋友可以參考下
    2015-09-09
  • mysql索引(覆蓋索引,聯(lián)合索引,索引下推)

    mysql索引(覆蓋索引,聯(lián)合索引,索引下推)

    這篇文章主要介紹了mysql索引(覆蓋索引,聯(lián)合索引,索引下推),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • Mysql sql慢查詢監(jiān)控腳本代碼實(shí)例

    Mysql sql慢查詢監(jiān)控腳本代碼實(shí)例

    這篇文章主要介紹了Mysql sql慢查詢監(jiān)控腳本代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • mysql 5.7.16 免安裝版安裝配置方法圖文教程

    mysql 5.7.16 免安裝版安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 5.7.16 免安裝版安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • MySQL for update鎖表還是鎖行校驗(過程詳解)

    MySQL for update鎖表還是鎖行校驗(過程詳解)

    在MySQL中,使用for update子句可以對查詢結(jié)果集進(jìn)行行級鎖定,以便在事務(wù)中對這些行進(jìn)行更新或者防止其他事務(wù)對這些行進(jìn)行修改,這篇文章主要介紹了MySQL for update鎖表還是鎖行校驗,需要的朋友可以參考下
    2024-02-02
  • master and slave have equal MySQL server ids

    master and slave have equal MySQL server ids

    Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids
    2013-07-07
  • Centos MySQL 5.7安裝、升級教程

    Centos MySQL 5.7安裝、升級教程

    這篇文章主要為大家詳細(xì)介紹了Centos MySQL 5.7安裝、升級教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01

最新評論