为什么第一个表应该在sql server中左侧和右侧的左侧和右侧第二个表连接

时间:2016-05-13 07:39:44

标签: sql-server join

我必须使用左外连接,我很难找到逻辑,为什么我选择左边的一个表而右边的另一个表,背后有原因吗?

例如。我猜左表应该是一个在连接列中具有NULL值的表

2 个答案:

答案 0 :(得分:0)

参考,

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

区别很简单 - 在左外连接中,无论“右”表中是否存在任何匹配的列,都将显示“左”表中的所有行。在右外连接中,无论“左”表中是否存在任何匹配的列,都将显示“右”表中的所有行。请参阅共享URL中的示例。

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

答案 1 :(得分: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,您也可以切换连接,因此左连接变为右连接,右连接变为左连接。