SQL中join的用法


直接舉例說明各種方法:

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 join

解釋:產生的結果是A和B的交集(相同列里面的相同值)內連接是最常見的一種連接,它也被稱為普通連接,只連接匹配的行(僅對滿足連接條件的CROSS中的列)。它又分為等值連接(連接條件運算符為"=")和不等值連接(連接條件運算符不為"=",例如between...and)。

SELECT *FROM b INNER JOIN A
on b.name=A.name

第二種Full Outer Join

解釋:產生的結果是A和B的並集(如果沒有相同的值會用null作為值)。FULL JOIN 會從左表和右表那里返回所有的行。如果其中一個表的數據行在另一個表中沒有匹配的行,那么對面的數據用NULL代替

SELECT * FROM b FULL OUTER JOIN A
on b.name=A.name

第三種Left outer join

解釋:產生表B的完全集,而A表中匹配的則有值(沒有匹配的則以null值取代)。LEFT JOIN返回左表的全部行和右表滿足ON條件的行,如果左表的行在右表中沒有匹配,那么這一行右表中對應數據用NULL代替。

SELECT * FROM b Left outer join A
on b.name=A.name

第四種Right Outer Join

解釋:參考第三種Left outer join

SELECT * FROM b Right Outer Join A
on b.name=A.name

第5種cross join

解釋:cross對兩個表執行笛卡爾乘積。它為左表行和右表行的每種可能的組合返回一行。返回(左表行數*右表行數)行的表。ps:很少用到這個語法。注意如果不是使用嵌套的select語句,一般系統都會產生笛卡爾乘積然再做過濾。這是對於性能來說是非常危險的,尤其是表很大的時候。

SELECT * FROM b  cross join A

特殊:Natural Join(oracle的用法,sqlserver里面不支持這種寫法。ps:大神可以糾正用法這里)

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM