복붙노트

[SQL] 차이를하는 SQL JOIN

SQL

차이를하는 SQL JOIN

무엇 내부 조인 및 외부 (왼쪽, 오른쪽 조인)에 가입 사이의 차이는, 그리고 어떤 그들 중 최상의 성능을 가지고?

감사!

해결법

  1. ==============================

    1.이 문서를 확인하십시오 :

    이 문서를 확인하십시오 :

    SQL을 시각적으로 설명 조인

    내부 가입 :

    왼쪽 외부 가입 :

    오른쪽 외부 가입 :

  2. ==============================

    2.그들이에 differnt 결과 세트를 제공으로 조인의 유형 간의 성능 comparisions는 무관하다. 내부는 조인이 더 빠른 경우에도 당신은 (조인의 두 번째 테이블과 일치하지 않더라도 레코드를 포함)는 왼쪽의 결과를 필요한 경우 사용할 참여하지 않을 것입니다.

    그들이에 differnt 결과 세트를 제공으로 조인의 유형 간의 성능 comparisions는 무관하다. 내부는 조인이 더 빠른 경우에도 당신은 (조인의 두 번째 테이블과 일치하지 않더라도 레코드를 포함)는 왼쪽의 결과를 필요한 경우 사용할 참여하지 않을 것입니다.

  3. ==============================

    3.왼쪽은 당신이 당신의 권리를 다시 작성해야하므로 왼쪽 논리 가입 논리 가입하세요, B RIGHT 일부 RDBMS를 잘 가입하지 않는 A. 가입으로 B가 동일 가입

    왼쪽은 당신이 당신의 권리를 다시 작성해야하므로 왼쪽 논리 가입 논리 가입하세요, B RIGHT 일부 RDBMS를 잘 가입하지 않는 A. 가입으로 B가 동일 가입

    A 1 2 3
    B 2 3 4 3
    
    SELECT A.I FROM INNER JOIN B ON B.I = A.I;
    
    output: 2 3, 3
    
    SELECT A.I AS X, B.I AS Y FROM A LEFT JOIN B ON B.I = A.I;
    
    read above code as A on LEFT, JOINs B
    
    output: 
    
    X Y
    1 NULL
    2 2
    3 3
    3 3
    
    SELECT A.I AS X, B.I AS Y FROM B RIGHT JOIN A ON A.I = B.I;
    

    , 오른쪽에 B로 위의 코드를 읽어 것은 A가 왼쪽에 같은 단지 동일 A. 합류

    무엇이든 왼쪽에 항상 평가, 항상 출력을 가지고있다. 당신은 좌 B 가입 상상할 수있는, B 권리는을 같이 가입 :

            var result = new Dictionary<int, int?>();
    
            var A = new int[] { 1, 2, 3 };
            var B = new int[] { 2, 3, 4, 3 };
    
            foreach (int aElem in A)
            {
    
    
                bool hasMatch = false;
                foreach (int bElem in B)
                {
                    if (bElem == aElem)
                    {
                        result.Add(aElem, bElem);
                        hasMatch = true;
                    }
                }
    
                if (!hasMatch)
                    result.Add(aElem, null);
            }
    
    
    
            foreach(int X in result.Keys)
            {
                MessageBox.Show(string.Format("X {0} Y {1}", X, result[X].HasValue ? result[X].Value.ToString() : "NULL"  ));
            }
    
  4. ==============================

    4.왼쪽, 오른쪽, 안쪽과 바깥 쪽은 성능에 영향을주지 않으며, 그들은이었다 아니라 이미 여기에서 설명했다.

    왼쪽, 오른쪽, 안쪽과 바깥 쪽은 성능에 영향을주지 않으며, 그들은이었다 아니라 이미 여기에서 설명했다.

    그러나 당신이에 추가 할 수있는 힌트는 DO 효과 성능이 조인 있습니다 해시, 루프 및 병합.

    일반적으로 쿼리 계획은 어떻게이 어떤 결정하지만, 때때로 당신은 그것을 무시하여 성능을 향상시킬 수 있습니다.

    루프 조인 제의 각 행에 대한 두 번째 테이블의 모든 행을 통해 진행한다. 당신은 하나 개의 매우 큰 테이블과 더 작은 하나가 경우에 좋다.

    병합 조인 함께 위해 두 테이블을 통해 이동합니다. 두 테이블이 이미 당신이 가입하고있는 필드에 의해 주문하는 경우는 매우 빠르게 할 수 있습니다.

    이 조인 된 데이터를 정렬로 해시 그룹에 출력을 임시 테이블의 사용의 많은 참여.

    일부 전문가 데시벨은 비트 맵 조인과 같은 다른 유형을 지원합니다.

  5. ==============================

    5.희망 당신은 사진을 이해합니다. 성능 현명한, 그들은 동일하지 않습니다 - 차이.

    희망 당신은 사진을 이해합니다. 성능 현명한, 그들은 동일하지 않습니다 - 차이.

    편집 : 죄송합니다. 당신이 대답의 일부에 대해 관심이 없었어요 같아요.

  6. from https://stackoverflow.com/questions/419375/sql-join-differences by cc-by-sa and MIT license