内连接的两种方式
總第156篇/張俊紅
在前面的文章中我們講過兩個概念,寬表和窄表,在現實業務中,數據庫中很多表存儲其實都是以窄表的形式來存儲的,但是我們一般從數據庫中獲取信息的時候,都是需要同時從多個表中來獲取信息,也就是需要將多個窄表先進行連接,然后再進行 select。連接方式主要有四種:左連接、右連接、內連接、外連接。默認是內連接(劃重點,考試會考,但是貌似很多人不知道)。
今天我們不講別的,只講一下關于內連接的兩種實現方式。
現在有兩張表 ta 和 tb,ta 存儲了學生的基礎信息,tb 存儲了學生的課程信息,現在想要看一下每個學生具體的課程信息,就需要把 ta 和 tb 進行連接,且只看那些報了課程的同學,有的學生可能沒有報名課程。
ta 表信息如下:
| 2019001 | 皇湘君 | C001 |
| 2019002 | 張運馨 | C002 |
| 2019003 | 周雄 | ? |
tb 表信息如下:
| C001 | 數據庫的發展史 | 興斌斌 |
| C002 | 如何成為一名優秀的數據工程師 | 方忻忻 |
| C003 | 數據分析師如何學習Sql取數 | 祿晨星 |
要想實現我們的需求,我們可以有兩種實現形式:
方式一,直接來看代碼:
得到的結果如下:
| 2019001 | 皇湘君 | 數據庫的發展史 | 興斌斌 |
| 2019002 | 張運馨 | 如何成為一名優秀的數據工程師 | 方忻忻 |
方式二,直接來看代碼:
select?ta.stuid?as?stuid,ta.name?as?name,tb.classname?as?classname,tb.teacher?as?teacher from?ta inner?join?tbon?ta.classid?=?tb.classid方式一和方式得到的結果是一樣的,既然結果是一樣的,為啥要有兩種方式來寫呢?第一種書寫方式是比較古老的一種寫法,對于內連接現在比較常用的,也是比較推薦的寫法是第二種方式。我們上面舉的例子中只涉及了兩個表,但在實際業務中往往不止連接兩個表,這個時候用第一種方式不僅寫起來會比較抓狂、別人看起來也比較亂,性能也會下降很多。而用第二種方式,可以一直 inner join,不管連接多少個表,看起來都不至于特別亂。如果你還在使用第一種寫法,建議切換到第二種。
你還可以看:
Sql 的執行順序是怎樣的?
Sql 實現數據透視表功能
講講你不知道的窗口函數
講講 group by 的plus版
介紹一下 information_schema 庫
關于 Group 的另一個函數
總結
- 上一篇: 关于 Group 的另一个函数
- 下一篇: 卡其脱离太是什么梗