mysql(3)—— 內連接、外連接的區別


先來看一下,內連接的語法:

SELECT  XXX FROM XXX INNER JOIN XXX ON XXX;

這里 INNER 可以省略,在上一篇博客中我們對於笛卡爾積現象的研究中(http://www.cnblogs.com/cdf-opensource-007/p/6507678.html)用到的就是內連接,但這並不能說明笛卡爾積算法只是適用於內連接,笛卡爾積算法針對的是表之間數據行的匹配次數,跟內連接還是外連接無關,至於查詢結果與你的查詢條件有關系,在本文中將對這一算法和內、外連接的區別加以說明。

內連接指的是把表連接時表與表之間匹配的數據行查詢出來,就是兩張表之間數據行匹配時,要同時滿足ON語句后面的條件才行。

左連接和右連接,又叫左外連接和右外連接。

我們來看一下左連接的語法

SELECT XXX FROM XXX LEFT OUTER JOIN XXX ON XXX

左連接的意思是,無論是否符合ON語句后面的表連接條件都會把左邊那張表的記錄全部查詢出來,右邊的那張表只匹配符合條件的數據行。右連接則與之相反(這里同樣OUTER 可以省略)。

下面我們以左連接為例,來看一下這個匹配的過程。有兩張表商品表goods和訂單表order_table。

SELECT * FROM goods g LEFT JOIN order_table ot ON g.id = ot.goods_id

數據行間的匹配以此類推。

最終結果是:

藍線部分表示兩張表數據行之間的匹配符合 ON g.id = ot.goods_id,虛線則表示不符合匹配條件,我們看到步驟二中,即使左邊的表跟右邊的表沒有一行數據能夠匹配的,左邊的表的數據行還是會出現在連接之后的臨時表中,而這時右邊的數據行的內容用Null填充。根據分析我們還可以看到,數據行之間匹配的次數還是符合笛卡爾積。

  最后說一點,我們作為程序員,研究問題還是要仔細深入一點的。當你對原理了解的有夠透徹,開發起來也就得心應手了,很多開發中的問題和疑惑也就迎刃而解了,而且在面對其他問題的時候也可做到觸類旁通。當然在開發中沒有太多的時間讓你去研究原理,開發中要以實現功能為前提,可等項目上線的后,你有大把的時間或者空余的時間,你大可去刨根問底,深入的去研究一項技術,為覺得這對一名程序員的成長是很重要的事情。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM