SQL中的鏈接能夠分爲內鏈接,外鏈接,以及交叉鏈接 。數據庫
若是不帶WHERE條件子句,它將會返回被鏈接的兩個表的笛卡爾積,返回結果的行數等於兩個錶行數的乘積; 舉例,下列A、B、C 執行結果相同,可是效率不同: A:SELECT * FROM table1 CROSS JOIN table2 B:SELECT * FROM table1,table2 C:select * from table1 a inner join table2 b A:select a.*,b.* from table1 a,table2 b where a.id=b.id B:select * from table1 a cross join table2 b where a.id=b.id (注:cross join後加條件只能用where,不能用on) C:select * from table1 a inner join table2 b on a.id=b.id 通常不建議使用方法A和B,由於若是有WHERE子句的話,每每會先生成兩個錶行數乘積的行的數據表而後才根據WHERE條件從中選擇。 所以,若是兩個須要求交際的表太大,將會很是很是慢,不建議使用。
兩邊表同時符合條件的組合 若是僅僅使用 SELECT * FROM table1 INNER JOIN table2 內鏈接若是沒有指定鏈接條件的話,和笛卡爾積的交叉鏈接結果同樣,可是不一樣於笛卡爾積的地方是,沒有笛卡爾積那麼複雜要先生成行數乘積的數據表,內鏈接的效率要高於笛卡爾積的交叉鏈接。 可是一般狀況下,使用INNER JOIN須要指定鏈接條件。 ***************關於等值鏈接和天然鏈接 等值鏈接(=號應用於鏈接條件, 不會去除重複的列) 天然鏈接(會去除重複的列) 數據庫的鏈接運算都是天然鏈接,由於不容許有重複的行(元組)存在。 例如: SELECT * FROM table1 AS a INNER JOIN table2 AS b on a.column=b.column
指定條件的內鏈接,僅僅返回符合鏈接條件的條目。 外鏈接則不一樣,返回的結果不只包含符合鏈接條件的行,並且包括左表(左外鏈接時), 右表(右鏈接時)或者兩邊鏈接(全外鏈接時)的全部數據行。 1)左外鏈接LEFT [OUTER] JOIN 顯示符合條件的數據行,同時顯示左邊數據表不符合條件的數據行,右邊沒有對應的條目顯示NULL 例如 SELECT * FROM table1 AS a LEFT [OUTER] JOIN ON a.column=b.column 2)右外鏈接RIGHT [OUTER] JOIN 顯示符合條件的數據行,同時顯示右邊數據表不符合條件的數據行,左邊沒有對應的條目顯示NULL 例如 SELECT * FROM table1 AS a RIGHT [OUTER] JOIN ON a.column=b.column 3)全外鏈接full [outer] join 顯示符合條件的數據行,同時顯示左右不符合條件的數據行,相應的左右兩邊顯示NULL,即顯示左鏈接、右鏈接和內鏈接的並集