SQL中join的用法

直接舉例說明各類方法: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:大神能夠糾正用法這裏)

解釋:天然鏈接是一種特殊的等值鏈接,在鏈接條件中使用等於(=)運算符比較被鏈接列的列值,但它使用選擇列表指出查詢結果集合中所包括的列,並刪除鏈接表中的重複列。

相關文章
相關標籤/搜索