摘要:inner join、full out join、left join

圖片來源為FB的MSDN小編
由於在網路上討論join的文章雜亂煩多,我是有看沒有懂,
故,我還是自己親自跑實例比較明瞭(自己親自跑一遍就通了)。
一、一開始先建立資料
CREATE TABLE [dbo].[table_a]
(
[id_a] [FLOAT] NULL,
[name_a] [NVARCHAR](50) NULL
)
ON [PRIMARY]
go
CREATE TABLE [dbo].[table_b]
(
[id_b] [FLOAT] NULL,
[name_b] [NVARCHAR](50) NULL
)
ON [PRIMARY]
go
--dbo.Table_a
INSERT dbo.Table_a VALUES (1, N'a')
INSERT dbo.Table_a VALUES (2, N'b')
INSERT dbo.Table_a VALUES (3, N'c')
INSERT dbo.Table_a VALUES (4, N'd')
--dbo.Table_b
INSERT dbo.Table_b VALUES (1, N'aa')
INSERT dbo.Table_b VALUES (2, N'bb')
INSERT dbo.Table_b VALUES (5, N'cc')
INSERT dbo.Table_b VALUES (6, N'dd')
二、先列出table_a與table_b的資料
select * from table_a

select * from Table_b

三,主要join方式

個人製作的註記簡圖
1、inner join

select * from Table_a
join Table_b on Table_a.id_a = Table_b.id_b
和
select * from Table_a
inner join Table_b on Table_a.id_a = Table_b.id_b
的結果是一樣的

還有一個語法跟inner join是蠻相似的,就是NATURAL JOIN,
其兩資料表之間同名的欄位會被自動結合在一起。
不過在SQL SERVER則是不支援這種語法,如想了解請參考
NATURAL JOIN 關鍵字 (SQL NATURAL JOIN Keyword) - 自然連接
2.1、full outer join等於full join

select * from Table_a
full join Table_b
on Table_a.id_a = Table_b.id_b

2.2、full outer join but a.Key is null or b.Key is null

select * from Table_a
full outer join Table_b
on Table_a.id_a = Table_b.id_b
where Table_a.id_a is null or Table_b.id_b is null

3.1、left outer join等於left join

select * from Table_a
left join Table_b on Table_a.id_a = Table_b.id_b

3.2、left outer join but b.Key is null

select * from Table_a
left outer join Table_b on Table_a.id_a = Table_b.id_b
where Table_b.id_b is null

4.1、right outer join等於right join

select * from Table_a
right join Table_b on Table_a.id_a = Table_b.id_b

4.2、right outer join but a.Key is null

select * from Table_a
right outer join Table_b on Table_a.id_a = Table_b.id_b
where Table_a.id_a is null

5、笛卡爾積、交叉合併cross join

select * from Table_a ,Table_b

結論:感覺使用圓餅來解說似乎也不是那麼直覺好理解,也有人用較直覺的資料列方圖來表示,
個人覺得使用三度空間的立體圖來表示會不會好一點。
參考資料:
A Visual Explanation of SQL Joins
[SQL]Join的觀念