수동으로 자체 조인 만들기(Visual Database Tools)

적용 대상:SQL Server

테이블에 데이터베이스에 반사 관계가 없더라도 테이블을 자체적으로 조인할 수 있습니다. 예를 들어, 자체 조인을 사용하여 같은 도시에 살고 있는 만든 이 쌍을 찾을 수 있습니다.

모든 조인과 마찬가지로 자체 조인에는 두 개 이상의 테이블이 필요합니다. 차이점은 쿼리에 두 번째 테이블을 추가하지 않고 같은 테이블의 두 번째 인스턴스를 추가한다는 점입니다. 이렇게 하면 테이블의 첫 번째 인스턴스에 있는 열을 두 번째 인스턴스의 동일한 열과 비교할 수 있으므로 열의 값을 서로 비교할 수 있습니다. 쿼리 및 뷰 디자이너는 테이블의 두 번째 인스턴스에 별칭을 할당합니다.

예를 들어 버클리 내에서 모든 작성자 쌍을 찾기 위해 자체 조긴을 만드는 경우 테이블의 첫 번째 인스턴스에 있는 city 열을 두 번째 인스턴스의 city 열과 비교합니다. 완성된 쿼리는 다음과 같습니다.

SELECT   
         authors.au_fname,   
         authors.au_lname,   
         authors1.au_fname AS Expr2,   
         authors1.au_lname AS Expr3  
      FROM   
         authors   
            INNER JOIN  
            authors authors1   
               ON authors.city   
                = authors1.city  
      WHERE  
         authors.city = 'Berkeley'  

자체 조인을 만들려면 종종 여러 조인 조건이 필요합니다. 이유를 알아보려면 이전 쿼리의 결과를 살펴보십시오.

Cheryl Carson       Cheryl Carson  
   Abraham Bennet      Abraham Bennet  
   Cheryl Carson       Abraham Bennet  
   Abraham Bennet      Cheryl Carson  

첫 번째 행은 쓸모가 없습니다. 셰릴 카슨이 셰릴 카슨과 같은 도시에 살고 있음을 나타냅니다. 두 번째 행은 똑같이 쓸모가 없습니다. 이 쓸모없는 데이터를 제거하려면 두 작성자 이름이 서로 다른 작성자를 설명하는 결과 행만 유지하는 다른 조건을 추가합니다. 결과 쿼리는 다음과 같습니다.

SELECT   
         authors.au_fname,   
         authors.au_lname,   
         authors1.au_fname AS Expr2,   
         authors1.au_lname AS Expr3  
      FROM   
         authors   
            INNER JOIN  
            authors authors1   
               ON authors.city   
                = authors1.city  
               AND authors.au_id  
                <> authors1.au_id  
      WHERE  
         authors.city = 'Berkeley'  

결과 집합이 향상되었습니다.

Cheryl Carson       Abraham Bennet  
   Abraham Bennet      Cheryl Carson  

그러나 두 개의 결과 행은 중복됩니다. 첫 번째는 카슨이 베넷과 같은 도시에 살고 있다고 말하고, 두 번째는 베넷이 카슨과 같은 도시에 살고 있다고 말합니다. 이런 중복 결과를 제거하려면 두 번째 조인 조건을 “not equals”에서 “less than”으로 변경하면 됩니다. 완성된 쿼리는 다음과 같습니다.

SELECT   
         authors.au_fname,   
         authors.au_lname,   
         authors1.au_fname AS Expr2,   
         authors1.au_lname AS Expr3  
      FROM   
         authors   
            INNER JOIN  
            authors authors1   
               ON authors.city   
                = authors1.city  
               AND authors.au_id  
                < authors1.au_id  
      WHERE  
         authors.city = 'Berkeley'  

그리고 결과 집합은 다음과 같습니다.

Cheryl Carson       Abraham Bennet  

수동으로 자체 조인을 만드는 방법

  1. 작업하려는 테이블 또는 테이블 반환 개체를 다이어그램 창에 추가합니다.

  2. 다이어그램 창에 동일한 테이블 또는 테이블 반환 개체가 다이어그램 창에 두 번 표시되도록 동일한 테이블을 다시 추가합니다.

    쿼리 및 뷰 디자이너는 테이블 이름에 순차 번호를 추가하여 두 번째 인스턴스에 별칭을 할당합니다. 또한 쿼리 및 뷰 디자이너는 다이어그램 창에서 테이블 또는 테이블 반환 개체의 두 항목 사이에 조인 쥴울 만듭니다.

  3. 조인 선을 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 속성 을 선택합니다.

  4. 속성 창에서 조인 조건 및 형식을 클릭하고 속성 오른쪽에 있는 줄임표(...)를 클릭합니다.

  5. 조인 대화 상자에서 필요에 따라 기본 키 간의 비교 연산자를 변경합니다. 예를 들어, 연산자를 (<)보다 작음으로 변경할 수 있습니다.

  6. 테이블 또는 테이블 반환 개체의 첫 번째 항목에서 기본 조인 열의 이름을 끌어서 두 번째 항목의 해당 열에 삭제하여 추가 조인 조건(예: authors.zip = authors1.zip)을 만듭니다.

  7. 출력 열, 검색 조건, 정렬 순서 등의 기타 쿼리 옵션을 지정합니다.

참고 항목

자체 조인 자동으로 만들기(Visual Database Tools)
조인을 사용한 쿼리(Visual Database Tools)