先來看一下,內連接的語法:
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填充。根據分析我們還可以看到,數據行之間匹配的次數還是符合笛卡爾積。
最后說一點,我們作為程序員,研究問題還是要仔細深入一點的。當你對原理了解的有夠透徹,開發起來也就得心應手了,很多開發中的問題和疑惑也就迎刃而解了,而且在面對其他問題的時候也可做到觸類旁通。當然在開發中沒有太多的時間讓你去研究原理,開發中要以實現功能為前提,可等項目上線的后,你有大把的時間或者空余的時間,你大可去刨根問底,深入的去研究一項技術,為覺得這對一名程序員的成長是很重要的事情。