先來看一下,内連接配接的文法:
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填充。根據分析我們還可以看到,資料行之間比對的次數還是符合笛卡爾積。