2016-05-13 103 views
0

我必須使用左外部連接,我很困惑,找到邏輯爲什麼我選擇左邊的一個表和右邊的另一個背後有原因嗎?爲什麼第一個表應該在左邊和第二個在右邊在左右加入sql服務器

例如,我能猜到左表應該是其中一個加盟列

+2

您從「左側」表中獲取所有行,並且只在「左側連接」中匹配「右側」表中的行。這就是確切的意思,所以基本上,你想要哪個表的所有行? –

+0

@ Lasse V. Karlsen-我的問題不是關於左/右連接的功能。我的疑問是,我可以通過交換表名,然後何時使用右/左 –

回答

0

轉寄此爲NULL值,

http://www.programmerinterview.com/index.php/database-sql/difference-between-a-left-outer-join-and-right-outer-join/

的區別很簡單 - 在左外連接,所有行從「左「表格將顯示,無論」右「表中是否有任何匹配的列。在右外連接中,將顯示「右」表中的所有行,而不管「左」表中是否有任何匹配的列。請參閱共享網址中的示例。

請谷歌它,你可以找到你需要的。

+0

來實現我想從左連接和右連接得到的相同結果。我的問題不是關於左/右連接的功能。我的疑問是,我可以通過交換表名實現左連接和右連接的相同結果,然後何時使用右/左 –

0
CREATE TABLE #Evaluation (ID int IDENTITY(1,1), EvalName varchar(30), EvalDate datetime) 
CREATE TABLE #EvaluationDetails (ID int IDENTITY(1,1), EvalID int, Points decimal(22,6), Question varchar(100)) 


declare @Date datetime 
set @Date = GETDATE() 
INSERT INTO #Evaluation VALUES ('Specific question',@Date) 

INSERT INTO #EvaluationDetails VALUES (1,10,'First question first evaluation') 
INSERT INTO #EvaluationDetails VALUES (1,5,'SEcond question first evaluation') 
INSERT INTO #EvaluationDetails VALUES (1,0,'Third question first evaluation') 

INSERT INTO #EvaluationDetails VALUES (null,0,'First question therd evaluation') 


SELECT * FROM #Evaluation e 
join #EvaluationDetails ed on ed.EvalID = e.ID 

SELECT * FROM #Evaluation e 
left join #EvaluationDetails ed on ed.EvalID = e.ID 

SELECT * FROM #Evaluation e 
right join #EvaluationDetails ed on ed.EvalID = e.ID 



DROP TABLE #Evaluation 
DROP TABLE #EvaluationDetails 

讓我們看看下面的例子。查詢的結果(加入/左/右)

enter image description here

因此,大家可以看到我們有2個評價其具有在其他表的細節。這是你想要得到的東西的一個變化。如果您有興趣獲得所有包含詳細信息(問題)的評估。你做一個簡單的加入。如果你想要得到所有的評估,即使那些沒有答案的人,你也需要在#Evaluation#EvaluationDetails之間進行左連接。如果你想要得到所有的問題,甚至沒有評估的問題,你就做一個正確的加入。

這是加入工作的方式。當然,如果切換表並將#EvaluationDetails#Evaluation連接,則也會切換連接,所以左連接變爲右連接,右連接變爲左連接。

+0

@ CiucaS - 我的問題不是關於左/右連接的功能。我的疑問是,我可以通過交換表名,然後何時使用右/左 –

+0

@BrijeshKumar來實現我想從左連接和右連接得到的相同結果我猜我唯一的區別是使用'SELECT * FROM'使用列將以表格添加到連接的方式顯示。因此,交換連接和表將導致不同的列顯示,並且可能會影響Order by子句(順序可以與1,2,3一起用作select的列編號)。 – CiucaS

相關問題