mysql中inner join和left join使用詳解
區(qū)別
返回不同
1、inner join只返回兩個表中聯(lián)結字段相等的行
2、left join的數(shù)量小于等于左表和右表中的記錄數(shù)量。
數(shù)量不同
1、inner join返回包括左表中的所有記錄和右表中聯(lián)結字段相等的記錄。
2、left join的數(shù)量以左表中的記錄數(shù)量相同
記錄屬性不同
1、inner join不足的記錄屬性會被直接舍棄
2、left join不足的記錄屬性用NULL填充
inner join 場景
設計兩張表:
- channel 頻道表:有頻道id、頻道name等
- module 模塊表:模塊id、模塊name、channe_id。
頁面展示頻道時,可能會有新增了一個頻道但是沒有模塊,此時不能用inner join 不然新增的模塊查詢不出來,所以用left join
select channel.* from channel left join modules on channel.id = modules.channel_id where page_id=1 group by channel.id order by channel.new_sort asc , channel.id desc
1、page_id是指在哪個頁面類型下,在頻道channel表中定義,用來區(qū)分哪個頁面類型
2、一個頻道id可能有多個模塊去關聯(lián),所以需要按照頻道id進行分組
3、new_sort可以設置頻道的排序顯示,另外排序相同應該讓頻道最先創(chuàng)建的顯示在前面。
以下這種情況新創(chuàng)建的頻道就不會顯示,并且沒有模塊的頻道也不會顯示。
select channel.* from channel inner join modules on channel.id=modules.channel_id where page_id=1 group by channel.id order by channel.new_sort asc , channel.id desc
最后:有點疑問,頻道只做顯示頻道相關信息,并沒有用到關聯(lián)的模塊信息,所以感覺這樣也能滿足需求了。后續(xù)發(fā)現(xiàn)問題再更吧~
select channel.* from channel where page_id=1 order by channel.new_sort asc , channel.id desc
額~補充問題,上面遺留的問題是頁面上需要查詢module的id所以才關聯(lián)了。
之前還遇到了個inner join 的場景,后續(xù)再補~
inner join 場景
新加一個策略表policy_lib 、然后再創(chuàng)建一個中間表channel_policy記錄 channel頻道和policy_lib策略表關聯(lián)。
那么顯然sql這樣寫
select policy_lib.id,channel_policy.policy_id,channel_policy.channel_id,channel.id from policy_lib inner join channel_policy on channel_policy.policy_id=policy_lib.id inner join channel on channel.id=channel_policy.channel_id
使用inner join 顯然結果查詢出來不會有空的情況,如果用left join 萬一表中有臟數(shù)據,左邊有數(shù)據右邊時空的,在處理的時候還需要考慮是否有空的情況顯然不合理。
到此這篇關于mysql中inner join和left join使用詳解的文章就介紹到這了,更多相關mysql中inner join和left join內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
MySQL數(shù)據庫字符集修改中文UTF8(永久修改)
本文主要介紹了MySQL數(shù)據庫字符集修改中文UTF8,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-06-06
MYSQL5 masterslave數(shù)據同步配置方法
因線路或安全需要我們不得不考慮mysql的備份,特把mysql數(shù)據備份的方法整理下。2008-09-09
MySQL5.6.17數(shù)據庫安裝 如何配置My.ini文件
這篇文章主要為大家詳細介紹了MySQL數(shù)據庫安裝教程,教大家如何配置My.ini文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11
MySQL遷移到Oracle數(shù)據庫的超詳細步驟和方法總結
今天接到一個任務,讓我把MySQL中的表與數(shù)據移植到Oracle中,所以這里總結下,這篇文章主要給大家介紹了關于MySQL遷移到Oracle數(shù)據庫的超詳細步驟和方法,需要的朋友可以參考下2023-11-11
MySQL數(shù)據庫跨版本遷移的實現(xiàn)三種方式
本文主要介紹了MySQL數(shù)據庫跨版本遷移的實現(xiàn),主要包含mysqldump,物理文件遷移和原地升級三種,具有一定的參考價值,感興趣的可以了解一下2024-05-05
MySQL如何根據不同條件聯(lián)查不同表的數(shù)據if/case
這篇文章主要介紹了MySQL如何根據不同條件聯(lián)查不同表的數(shù)據if/case問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05
詳解mysql 獲取某個時間段每一天、每一個小時的統(tǒng)計數(shù)據
這篇文章主要介紹了mysql 獲取某個時間段每一天、每一個小時的統(tǒng)計數(shù)據,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-04-04

