我正在与我的TL讨论自然联接,他说不应该使用自然连接,所以在什么情况下我们不会使用自然连接,equjoin和内连接。
答案 0 :(得分:1)
请重新解释您的问题,例如自然加入和内部联接之间的含义是什么? ' JOINS
中这些SQL Server 2008
有哪些限制?
SQL Server摆脱了自然联接,因此它们的使用也有可扩展的方面。没有过于具体,NATURAL JOIN
基本上就像INNER JOIN
,除了它
INTERSECT
/ UNION
,但表格可以有不同的列)EQUI JOIN
。插图:请注意,这是在SQL Server 2012中设计的
DECLARE @TableA TABLE (Col1 VARCHAR(10)
, Col2 VARCHAR(10) );
DECLARE @TableB TABLE (Col1 VARCHAR(10)
, Col2 VARCHAR(10)
, Col3 VARCHAR(10) );
INSERT INTO @TableA (Col1, Col2)
VALUES ('C', 'D');
INSERT INTO @TableB (Col1, Col2, Col3)
VALUES ('C', 'D', 'E');
SELECT *
FROM @TableA
NATURAL JOIN (SELECT Col1, Col2, Col3
FROM @TableB) AS B
-- returns
Col1 | Col2 | Co3
'C' 'D' 'E'
SELECT *
FROM @TableA AS A
INNER JOIN (SELECT Col1, Col2, Col3
FROM @Table B) AS B ON A.Col1 = B.Col1
AND A.Col2 = B.Col2
-- returns A = @TableA, B = @TableB
A.Col1 | B.Col1 | A.Col2 | B.Col2 | B.Col2
'C' 'C' 'D' 'D' 'E'
你看到了区别吗?相当重要,不是吗?使用Inner,您仍然可以比较两个表格的结果,但Natural JOIN
就像INTERCEPT
一样,只是将列组合在一起。您丢失了结果集中的关系。
<强>结论:强>
SQL
无论如何都会解析您的查询。SQL
种语言。TSQL
删除NATURAL JOIN
,取而代之的是UNION
,UNION ALL
,INTERSECT
和EXCEPT
。如果可以,请向您的TL询问“为什么?”使用一个或另一个的业务逻辑背后。了解他如何理解SQL查询。你可能会得到一些有见地的东西或者......好吧,准备好听听非传统的事情......但至少你正在学习更多关于SQL,你的公司以及如何提问的事。
胜利/胜利,我说。