적용 대상:SQL Server
테이블에 데이터베이스에 반사 관계가 없더라도 테이블을 자체적으로 조인할 수 있습니다. 예를 들어 자체 조인을 사용하여 같은 도시에 거주하는 저자 쌍을 찾을 수 있습니다.
모든 조인과 마찬가지로 자체 조인에는 최소 두 개의 테이블이 필요합니다. 차이점은 쿼리에 두 번째 테이블을 추가하는 대신 동일한 테이블의 두 번째 인스턴스를 추가한다는 것입니다. 이렇게 하면 테이블의 첫 번째 인스턴스에 있는 열을 두 번째 인스턴스의 동일한 열과 비교할 수 있으므로 열의 값을 서로 비교할 수 있습니다. 쿼리 및 뷰 디자이너 도구(Visual Database Tools)는 테이블의 두 번째 인스턴스에 별칭을 할당합니다.
예를 들어, 버클리에서 모든 작성자 쌍을 찾기 위해 자체 조인을 수행할 때, 테이블의 첫 번째 인스턴스와 두 번째 인스턴스의 열을 비교 citycity합니다. 결과 쿼리는 다음과 같을 수 있습니다.
SELECT authors.au_fname,
authors.au_lname,
authors1.au_fname AS Expr2,
authors1.au_lname AS Expr3
FROM authors
INNER JOIN authors AS 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 AS 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
그러나 두 개의 결과 행은 중복됩니다. 첫 번째는 카슨이 베넷과 같은 도시에 살고 있다고 말하고, 두 번째는 베넷이 카슨과 같은 도시에 살고 있다고 말합니다. 이 중복성을 제거하기 위해 두 번째 조인 조건을 "같지 않음"에서 "보다 작음"으로 변경할 수 있습니다. 결과 쿼리는 다음과 같을 수 있습니다.
SELECT authors.au_fname,
authors.au_lname,
authors1.au_fname AS Expr2,
authors1.au_lname AS Expr3
FROM authors
INNER JOIN authors AS authors1
ON authors.city = authors1.city
AND authors.au_id < authors1.au_id
WHERE authors.city = 'Berkeley';
그리고 결과 집합은 다음과 같습니다.
Cheryl Carson Abraham Bennet
수동으로 자체 조인 만들기
작업하려는 테이블 또는 테이블 반환 개체를 다이어그램 창(Visual Database Tools) 에 추가합니다.
다이어그램 창에 동일한 테이블 또는 테이블 반환 개체가 다이어그램 창에 두 번 표시되도록 동일한 테이블을 다시 추가합니다.
쿼리 및 뷰 디자이너는 테이블 이름에 순차 번호를 추가하여 두 번째 인스턴스에 별칭을 할당합니다. 또한 쿼리 및 뷰 디자이너는 다이어그램 창에서 테이블 또는 테이블 반환 개체의 두 항목 사이에 조인 선을 만듭니다.
조인 선을 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 속성 선택합니다.
속성 창에서 조인 조건 및 형식을 선택하고 속성 오른쪽에 있는 줄임표(...) 를 선택합니다.
조인 대화 상자에서 필요에 따라 기본 키 간의 비교 연산자를 변경합니다. 예를 들어 연산자를 보다 작게(<)로 변경할 수 있습니다.
테이블 또는 테이블 반환 개체의 첫 번째 항목에서 기본 조인 열의 이름을 끌어서 두 번째 항목의 해당 열에 놓아 추가 조인 조건(예: authors.zip = authors1.zip)을 만듭니다.
출력 열, 검색 조건 및 정렬 순서와 같은 쿼리에 대한 다른 옵션을 지정합니다.