直接舉例說明各類方法:sql
CREATE table A ( id int, name varchar(200) ) CREATE table b ( id int, name varchar(200) ) INSERT INTO b VALUES(1,'張三') INSERT INTO b VALUES(2,'李四') INSERT INTO b VALUES(3,'王五') INSERT INTO b VALUES(4,'馬六') INSERT INTO b VALUES(5,'馮七') INSERT INTO a VALUES(1,'趙八') INSERT INTO a VALUES(2,'張三') INSERT INTO a VALUES(3,'馮七') INSERT INTO a VALUES(4,'田九') INSERT INTO a VALUES(5,'凌十')
第一種:Inner joinoracle
解釋:產生的結果是A和B的交集(相同列裏面的相同值)。內鏈接是最多見的一種鏈接,它也被稱爲普通鏈接,只鏈接匹配的行(僅對知足鏈接條件的CROSS中的列)。它又分爲等值鏈接(鏈接條件運算符爲"=")和不等值鏈接(鏈接條件運算符不爲"=",例如between...and)。sqlserver
SELECT *FROM b INNER JOIN A
on b.name=A.name
第二種:Full Outer Join性能
解釋:產生的結果是A和B的並集(若是沒有相同的值會用null做爲值)。FULL JOIN 會從左表和右表那裏返回全部的行。若是其中一個表的數據行在另外一個表中沒有匹配的行,那麼對面的數據用NULL代替spa
SELECT * FROM b FULL OUTER JOIN A
on b.name=A.name
第三種:Left outer joincode
解釋:產生表B的徹底集,而A表中匹配的則有值(沒有匹配的則以null值取代)。LEFT JOIN返回左表的所有行和右表知足ON條件的行,若是左表的行在右表中沒有匹配,那麼這一行右表中對應數據用NULL代替。server
SELECT * FROM b Left outer join A
on b.name=A.name
第四種:Right Outer Joinblog
解釋:參考第三種Left outer jointable
SELECT * FROM b Right Outer Join A
on b.name=A.name
第5種:cross joinclass
解釋:cross對兩個表執行笛卡爾乘積。它爲左錶行和右錶行的每種可能的組合返回一行。返回(左錶行數*右錶行數)行的表。ps:不多用到這個語法。注意若是不是使用嵌套的select語句,通常系統都會產生笛卡爾乘積然再作過濾。這是對於性能來講是很是危險的,尤爲是表很大的時候。
SELECT * FROM b cross join A
特殊:Natural Join(oracle的用法,sqlserver裏面不支持這種寫法。ps:大神能夠糾正用法這裏)
解釋:天然鏈接是一種特殊的等值鏈接,在鏈接條件中使用等於(=)運算符比較被鏈接列的列值,但它使用選擇列表指出查詢結果集合中所包括的列,並刪除鏈接表中的重複列。