수동으로 자체 조인 만들기(Visual Database Tools)Create Self-Joins Manually (Visual Database Tools)

데이터베이스에서 테이블에 반사 관계가 없는 경우에도 테이블을 자체 조인할 수 있습니다.You can join a table to itself even if the table does not have a reflexive relationship in the database. 예를 들어, 자체 조인을 사용하여 같은 도시에 살고 있는 만든 이 쌍을 찾을 수 있습니다.For example, you can use a self-join to find pairs of authors living in the same city.

다른 조인과 마찬가지로 자체 조인에도 테이블이 두 개 이상 필요합니다.As with any join, a self-join requires at least two tables. 차이점은 쿼리에 두 번째 테이블을 추가하지 않고 같은 테이블의 두 번째 인스턴스를 추가한다는 점입니다.The difference is that, instead of adding a second table to the query, you add a second instance of the same table. 이런 방식으로 테이블의 첫 번째 인스턴스의 열을 두 번째 인스턴스의 같은 열과 비교하여 열의 값을 서로 비교할 수 있습니다.That way, you can compare a column in the first instance of the table to the same column in the second instance, which allows you to compare the values in a column to each other. 쿼리 및 뷰 디자이너 는 테이블의 두 번째 인스턴스에 별칭을 할당합니다.The Query and View Designer assigns an alias to the second instance of the table.

예를 들어, Berkeley 에 살고 있는 모든 만든 이 쌍을 찾는 자체 조인을 만드는 중인 경우 테이블의 첫 번째 인스턴스의 city 열과 두 번째 인스턴스의 city 열을 비교합니다.For example, if you are creating a self-join to find all pairs of authors within Berkeley, you compare the city column in the first instance of the table against the city column in the second instance. 완성된 쿼리는 다음과 같습니다.The resulting query might look like the following:

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'  

자체 조인을 만들 때 조인 조건이 여러 개 필요한 경우가 종종 있습니다.Creating a self-join often requires multiple join conditions. 이유를 알아보려면 이전 쿼리의 결과를 살펴보십시오.To understand why, consider the result of the preceding query:

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

첫 번째 행은 Cheryl Carson이 Cheryl Carson과 같은 도시에 살고 있음을 나타내므로 필요하지 않습니다.The first row is useless; it indicates that Cheryl Carson lives in the same city as Cheryl Carson. 마찬가지로 두 번째 행도 필요하지 않습니다.The second row is equally useless. 이런 필요 없는 데이터를 제거하려면 두 개의 만든 이 이름이 서로 다른 만든 이를 나타내는 결과 행만 보유하는 다른 조건을 추가합니다.To eliminate this useless data, you add another condition retaining only those result rows in which the two author names describe different authors. 완성된 쿼리는 다음과 같습니다.The resulting query might look like this:

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'  

결과 집합이 다음과 같이 향상되었습니다.The result set is improved:

Cheryl Carson       Abraham Bennet  
   Abraham Bennet      Cheryl Carson  

하지만 두 결과 행이 중복됩니다.But the two result rows are redundant. 첫 번째 행은 Carson이 Bennet과 같은 도시에 살고 있음을 나타내며 두 번째 행은 Bennet이 Carson과 같은 도시에 살고 있음을 나타냅니다.The first says Carson lives in the same city as Bennet, and the second says the Bennet lives in the same city as Carson. 이런 중복 결과를 제거하려면 두 번째 조인 조건을 "not equals"에서 "less than"으로 변경하면 됩니다.To eliminate this redundancy, you can alter the second join condition from "not equals" to "less than." 완성된 쿼리는 다음과 같습니다.The resulting query might look like this:

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'  

결과 집합은 다음과 같습니다.And the result set looks like this:

Cheryl Carson       Abraham Bennet  

자체 조인을 수동으로 만들려면To create a self-join manually

  1. 작업할 테이블 또는 테이블 반환 개체를 다이어그램 창 에 추가합니다.Add to the Diagram pane the table or table-valued object you want to work with.

  2. 다이어그램 창에 같은 테이블 또는 테이블 반환 개체가 두 번 표시되도록 같은 테이블을 다시 추가합니다.Add the same table again, so that the Diagram pane shows the same table or table-valued object twice within the Diagram pane.

    쿼리 및 뷰 디자이너는 테이블 이름에 일련 번호를 추가하여 두 번째 인스턴스에 별칭을 할당합니다.The Query and View Designer assigns an alias to the second instance by adding a sequential number to the table name. 또한 쿼리 및 뷰 디자이너는 다이어그램 창 내에서 테이블 또는 테이블 반환 개체의 두 일치 항목 사이에 조인 선을 만듭니다.In addition, the Query and View Designer creates a join line between the two occurrences of the table or table-valued object within the Diagram pane.

  3. 조인 선을 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 속성 을 선택합니다.Right-click the join line and choose Properties from the shortcut menu.

  4. 속성 창에서 조인 조건 및 형식 을 클릭하고 속성의 오른쪽에 있는 줄임표(...) 를 클릭합니다.In the Properties window click Join Condition and Type and click the ellipses (…) to the right of the property.

  5. 필요한 경우 조인 대화 상자 에서 기본 키 사이의 비교 연산자를 변경합니다.In the Join Dialog Box change the comparison operator between the primary keys as required. 예를 들어, 연산자를 (<)보다 작음으로 변경할 수 있습니다.For example, you might change the operator to less than (<).

  6. 테이블 또는 테이블 반환 개체의 첫 번째 일치 항목에서 기본 조인 열의 이름을 끌어서 두 번째 일치 항목의 해당 열에 놓는 방법을 통해 추가 조인 조건(예: authors.zip = authors1.zip)을 만듭니다.Create the additional join condition (for example, authors.zip = authors1.zip) by dragging the name of the primary join column in the first occurrence of the table or table-valued object and dropping it on the corresponding column in the second occurrence.

  7. 출력 열, 검색 조건, 정렬 순서 등의 기타 쿼리 옵션을 지정합니다.Specify other options for the query such as output columns, search conditions, and sort order.

참고 항목See Also

자체 조인 자동으로 만들기(Visual Database Tools)Create Self-Joins Automatically (Visual Database Tools)
조인을 사용한 쿼리(Visual Database Tools)Query with Joins (Visual Database Tools)