2016-07-08 2 views
-1

자연스러운 조인에 대해 TL과 논쟁을 벌였습니다. 자연스러운 조인은 사용해서는 안되며, 자연스럽게 조인하지 않고 조인하고 내부 조인과 함께 가지 않을 것이라고 말했습니다.자연스럽게 참여하지 말아야합니다

+3

TL이 팀 리드를 의미한다고 가정합니다. 그는 자연 결합을 사용하지 말고 사용하지 마십시오. 뭐가 문제 야? 너의 질문은 정확히 무엇인가? –

+0

[자연 조인을 이해하는 데 어려움] (http://stackoverflow.com/questions/14546617/difficulties-in-understanding-natural-join)의 가능한 복제본 –

+0

나는 한 번 이상 플래그를 지정할 수 없으므로이 질문은 아닙니다. 코드에 대해 (아마도 DBA에 더 좋을 것입니다. 그러나 그곳에는 다음과 같은 것들도 있습니다), 너무 광범위하고 너무 독창적이며 중복됩니다 : http://stackoverflow.com/questions/14546617/difficulties-in-understanding-natural-join/http ://스택 오버플로.co.kr/questions/8696383/natural-join-and-inner-join의 차이점 –

답변

1

과 같은 질문을 다시 말하십시오. Natural Join과 Inner 간의 관계는 무엇입니까?은 무엇입니까? 'JOINS의 한계는 무엇입니까 SQL Server 2008에 있습니까?

SQL Server에서는 자연 결합이 제거되므로 사용법에 따라 확장 가능한 측면도 있습니다. 너무 구체적 점점없이 NATURAL JOIN은 제외하고 INNER JOIN

  • A) 반환과 같은 본질적으로 (테이블 제외 INTERSECT/UNION
  • B) 암시 적으로 추가) 다른 열이 할 수 있다고 생각 별개의 사용 가능한 모든 열에 EQUI JOIN이 있어야합니다.

그림 : 주, 이것은 당신이 그 차이를 볼 수 있나요 SQL 서버 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' 

설계되었다? 오히려 의미있는 일입니까? 내부에서 여전히 두 테이블의 결과를 비교할 수 있지만 Natural JOININTERCEPT과 같으며 을 그룹화합니다. 결과 집합의 관계를 잃게됩니다.

결론 :

  • 모두가 자신의 의견을받을 수 있지만, SQL는 검색어에 관계없이 동일하게 해석됩니다.
  • 조인의 작동 방식을 이해하면 이러한 조인을 사용할 수있는 비즈니스를 이해하는 데 도움이됩니다. 또는 적어도 다른 SQL 언어로 작업 할 수 있습니다.
  • TSQLNATURAL JOIN을 제거하여 UNION, UNION ALL, INTERSECTEXCEPT을 제거했습니다.

가능한 경우 비즈니스 의사 결정의 배후에 TL을 물어보십시오. 그가 SQL Querying을 어떻게 이해하는지 알아보십시오. 당신은 통찰력이있는 어떤 것을 얻거나 ... 음, 틀에 얽매이지 않는 것들을들을 준비를 할 수 있습니다 ...하지만 적어도 당신은 SQL, 당신의 회사, 그리고 질문하는 방법에 대해 더 많이 배우고 있습니다.

A 승/승, 나는 말한다.

+0

, NAUTRAL JOIN 및 INNER JOIN에 대해 분명히 알고 있습니다. 왜 EQUJOIN 및 FULLJOIN이 SQL Server에서 덜 사용되는지 알고 싶습니다. –

+0

"SQL Server에서 Natural 조인을 제거합니다."그렇지만 SQL Server에서 NATURAL JOIN을 사용하고 있습니다. 해당 성명에 버전 번호가 누락 되었습니까? 또는 당신은 무엇을 정말로 의미 했느냐? –

+0

또한 "** 열을 함께 그룹화합니다. 결과 세트에서 관계를 잃게됩니다." 그게 관계라고 생각하는 것 같아. 'join '에 사용 된 두 개의 열이 모두 반환되는 것을 잃어 버리게됩니다. 분명히 동일한 값이 보장되는 두 개의 복사본 만 있기 때문에 실제로는 손실이 아닙니다. 또는, 다시, 나는 무엇인가 놓치고 있냐? –

관련 문제