소개하는 외부 조인

0 Comments

외부 조인

외부 조인 사용과 일치하는 행서 두 테이블이 있습니다. 일치하는 행이없는 경우에도 포함됩니다. 테이블 중 하나의 행은 항상 포함되며,다른 테이블의 경우 일치 항목이 없을 때 NULL 값이 포함됩니다.

시리즈는 데이터베이스 조인에 대한 기사 소개로 시작됩니다. 이 수업의 모든 예제는 Microsoft SQL Server Management Studio 및 AdventureWorks2012 데이터베이스를 기반으로합니다. 당신은 내 가이드를 사용하여 이러한 무료 도구를 사용하여 시작할 수 있습니다 Sql Server 를 사용하여 시작하기., 이 기사에서는 외부 조인을 다룰 예정입니다.

형태의 외부 조인

의 세 가지 유형이 있습니다 외부 조인.

  • 왼쪽 외부 조–는 모든 행의 왼쪽 테이블에서 포함되는 타의 추종을 불허하는 행에서 오른쪽으로 교체 NULL 값이 있습니다.
  • 오른쪽 외부 조인-오른쪽 테이블의 모든 행이 포함되고 왼쪽에서 일치하지 않는 행은 NULL 값으로 대체됩니다.
  • 전체 외부 조인–두 테이블의 모든 행이 포함되며 NULL 값은 필적 할 수없는 행을 채 웁니다.

더 깊이 파고 왼쪽 외부 조인을 살펴 보겠습니다.,

왼쪽 외부 조인

다음 데이터 모델을 확인하십시오. 이것은 AdventureWorks2012 데이터베이스에서 가져온 것입니다. 이 모델에는 1 명에서 0 명 또는 1 명의 직원이 있습니다.

목록을 작성의 모든 사람 LastNames,아직도 보여 직함 사람은 직원,우리가 필요한 결합하는 방법은 두 가지 테이블을 포함한 사람의 행한 결과도 일치하지 않는 경우 직원입니다.

이 유형의 조인이라고 왼쪽 외부에 가입,으로 모든 행에 대한 테이블에서 왼쪽의 가입하세 키워드가 포함되어 있는 관계없이 일치합니다., 기본적인 구문에 대한 외부 조인입니다:

SELECT columnlistFROM tableLEFT OUTER JOIN othertable ON join condition

SQL 에 대한 가입에 위의 다이어그램입니다:

SELECT person.Person.BusinessEntityID, Person.Person.LastName, HumanResources.Employee.NationalIDNumber, HumanResources.Employee.JobTitleFROM person.PersonLEFT OUTER JOIN HumanResources.Employee ON person.BusinessEntityID = Employee.BusinessEntityID

여기에 첫 번째 결과가 쿼리로부터

방법을 통 NULL 값이 있는지 확인할 수 있습니다에 나와 있는 두 번째 행에 대한 NationalIDNumber 및 직함. BusinessEntityID293 과 일치하는 직원이 없기 때문입니다.

오른쪽 외부에 가입

자에서 다른 살펴보고 다이어그램이지만 이 때 우리가 하고 있는 오른쪽 외부입니다., 짐작할 수 있듯이 왼쪽 외부 조인과 오른쪽 외부 조인 사이의 SQL 문에는 너무 많은 차이가 없습니다. 기본적인 구문 바로 외부에 가입니다.

SELECT columnlistFROM tableRIGHT OUTER JOIN othertable ON join condition

아래의 샘플을 쿼리 서면으로 바로 외부에 가입:

SELECT person.Person.BusinessEntityID, Person.Person.LastName, HumanResources.Employee.NationalIDNumber, HumanResources.Employee.JobTitleFROM person.PersonRIGHT OUTER JOIN HumanResources.Employee ON person.BusinessEntityID = Employee.BusinessEntityID

주요 차이점은 지금 우리는 모든 레코드를 반환에서 Employee 테이블,테이블의 오른쪽에 참여 키워드를 사용합니다. 일치하는 직원 레코드가 발견되지 않으면 BusinessEntityID 및 LastName 에 대해 NULL 이 반환됩니다.다음은 쿼리 결과입니다.,

링을 통해 결과 모두 놀랐을 볼 수 없습니 null 값이 있습니다.

왜 그런지 아십니까?대답은 데이터 모델에 있습니다. 0 이 있습니다..직원과 사람 사이의 1 대 1 관계. 이는 모든 직원에게 한 사람이 있음을 의미합니다. 이 점을 감안할 때 오른쪽 조인에 대해 일치하지 않는 행은 존재하지 않습니다. 이 유형의 관계로 내부 조인을 사용할 수도있었습니다.

왼쪽 대 오른쪽 외부 조인

차이는 없는 기능을 사 왼쪽 외부에 가입하고 오른쪽 외부입니다.,

성명

SELECT person.Person.BusinessEntityID, HumanResources.Employee.NationalIDNumberFROM person.PersonLEFT OUTER JOIN HumanResources.Employee ON person.BusinessEntityID = Employee.BusinessEntityID

반환하는 것과 동일한 결과

SELECT person.Person.BusinessEntityID, HumanResources.Employee.NationalIDNumberFROM HumanResources.EmployeeRIGHT OUTER JOIN person.Person ON person.BusinessEntityID = Employee.BusinessEntityID

의 과정이 없을 경우에만 변경 가입하세하게 왼쪽에서 오른쪽지 전환 테이블의 이름입니다.

일반적으로 오른쪽 외부 조인보다 왼쪽 외부 조인을 더 많이 사용합니다. 나는 이것이 관계를 그릴 때 왼쪽에서 오른쪽으로 그렇게하기 때문이라고 생각합니다. 또한,나는 왼쪽에서 오른쪽으로 내 머리 속의 테이블을 가로 지른다.

이것은”왼쪽”테이블이 FROM 문에 있기 때문에 SQL 과 잘 맞습니다.

당신이 사용하는 것을 알고 궁금합니다., 나는 정말 호기심을 알지 오른 조인 것이 더 직관적이면 당신을 원어민의 아랍어 또는 다른”오른쪽에서 왼쪽으로”언어입니다.

전체 외부 조인

전체 외부 조인은 왼쪽 및 오른쪽 외부 조인의 결과 조합입니다. 이 유형의 조인에서 반환 된 결과에는 두 테이블의 모든 행이 포함됩니다. 일치가 발생하는 곳에서는 값이 관련됩니다. 두 테이블 중 하나에서 일치하는 경우 NULL 이 대신 반환됩니다.,

기본적인 구문은 전체 외부 조가:

SELECT columnlistFROM tableFULL OUTER JOIN othertable ON join condition

살펴에서의 다른 부분 AdventureWork2012 데이터베이스입니다. 이번에는 SalesOrderHeader 와 Currentcyrate 테이블 간의 관계에 중점을 둘 것입니다.

모델은 다음과 같습니다:

한다고 가정한 모든 통화는 우리가 할 수 있는 장소에서 주문과 주문에 배치되었다 그 통화가?

SELECT sales.SalesOrderHeader.AccountNumber, sales.SalesOrderHeader.OrderDate, sales.CurrencyRate.ToCurrencyCode, sales.CurrencyRate.AverageRateFROM sales.SalesOrderHeaderFULL OUTER JOIN sales.CurrencyRate ON sales.CurrencyRate.CurrencyRateID = sales.SalesOrderHeader.CurrencyRateID

여기에는 일부의 결과를 보여주는 일부를 판매해야 경기를 통화와 몇몇 그하지 않았습니다., 일치하지 않는 판매가있는 이유는 이것이 USD 의 판매이기 때문입니다.

더 아래에 결과를 참조 통화와는 어울리지 않는 판매합니다. 이는 해당 통화로 판매가 이루어지지 않았다는 사실을 반영합니다.

참고:이 KRW 나열된 참조하십시오 행 42463 때문에,나는 것이 생각하는 대부분의 판매에 있는 것이 환습니다. 내 생각은 이러한 거래에 대한 환율을 존중하기보다는 Currentcyrateid 의 SalesOrderHeader vale 이 모든 USD 거래에 대해 null 로 설정되었다는 것입니다., 나는 생각이 일치하지 않는 방법은 내가 그것을 할 것입니다,하지만 그렇지 않은 나의 데이터베이스…

고급 예

지금까지 우리가 보았고 세 가지 형태의 외부 조인지 탐험은 좀 더 진보된 개념 같은 여러 테이블을 사용하여 하나 이상의 상태에서 우리의 가입 절입니다.

우리는 이러한 개념을 때 우리는 탐험 내부 조인,그래서 내가 무엇을 보여주는거야,당신 너무 새로운,그러나 내가 생각한 그는 여전히 의미를 검토하기 때문에 어떤 경우 혼합체로 결합해 내부 조인을 생산할 수 있습 않거나 의도하지 않은 결과입니다.,생산 스키마에 초점을 맞추고 제품 및 카테고리를 살펴 보겠습니다. 모든 제품 범주와 그 안에 포함 된 제품 모델의 목록을 만들어 보겠습니다.

제품은 ProductModel 및 ProductSubcategory 와 일대 다 관계가 있습니다. 이 두 테이블 사이에 있기 때문에 ProductModel 과 ProductSubcategory 사이에는 암시적인 다 대다 관계가 있습니다. 이 때문에 할당 된 제품 및 제품이없는 제품 카테고리 항목이있을 수 있으므로 외부 조인에 대한 좋은 후보입니다.,

이러한 상황을 극복하기 위해 우리는 할 것입니다 외부에 가입하 모두 ProductModel 및 ProductCategory 테이블.

여기에는 SQL

SELECT PC.Name AS Category, PSC.Name AS Subcategory, PM.Name AS Model, P.Name AS ProductFROM Production.Product AS PFULL OUTER JOIN Production.ProductModel AS PM ON PM.ProductModelID = P.ProductModelIDFULL OUTER JOIN Production.ProductSubcategory AS PSC ON PSC.ProductSubcategoryID = P.ProductSubcategoryIDINNER JOIN Production.ProductCategory AS PC ON PC.ProductCategoryID = PSC.ProductCategoryIDORDER BY PC.Name, PSC.Name

은 여러 가지가 있는 항목을 참고:

  • 사용 테이블 별칭을 SQL 더 읽을 수 있습니다.
  • 하나 이상의 전체 외부 조인 절이 있습니다.,
  • ProductCategory 테이블도의 일부 외부의 가입

은 원래 썼을 때 SQL 쿼리가 내부에 가입하는 사 ProductSubcategory 및 ProductCategory,그러나지 않았을 보는 NULL 값에 대한 타의 추종을 불허 기록 난 기대하는 것입니다.

일단 조인을 전체 외부 조인으로 변경하면 예상 한 결과를 보았습니다. 이것이 발생하는 이유는 미묘합니다.

데이터를 확인한 후 모든 카테고리에 하위 카테고리가 할당되어 있음을 확인했습니다., 이것을 생각하게 작동한다;그러나,고려는 전체 문을 실행하고 행은 반환되 ProductSubcategoryID 값은 NULL 이 될 때마다 제품의 실패와 일치하는 제품 하위.

Null 값은 정의상 서로 같지 않으므로 내부 조인이 실패합니다. 이 점을 감안할 때 이러한 값이 ProductCategory 와 일치하면 ProductCategory 에 대한 조인이 외부 조인이 아닌 한 결과에 포함되지 않습니다.,

사실,가입해야 하지 않는 전체 외부 조,왼쪽에 가입할 뿐:

SELECT PC.Name AS Category,PSC.Name AS Subcategory,PM.Name AS Model,P.Name AS ProductFROM Production.Product AS PFULL OUTER JOINProduction.ProductModel AS PMON PM.ProductModelID = P.ProductModelIDFULL OUTER JOINProduction.ProductSubcategory AS PSCON PSC.ProductSubcategoryID = P.ProductSubcategoryIDLEFT OUTER JOIN Production.ProductCategory AS PC ON PC.ProductCategoryID = PSC.ProductCategoryIDORDER BY PC.Name, PSC.Name

사용에 대한 외부인

기 때문에 외부 조인 뿐만 아니라 일치하는 행도하지 않는 사람들,그들은 정말 좋은 방법을 찾을 수 없는 항목에서 테이블이 있습니다. 데이터 무결성 문제가 있는지 확인하기 위해 데이터베이스에서 진단을 수행해야 할 때 좋습니다.

예를 들어 카테고리와 일치하지 않는 일부 ProductSubcategory 항목이있을 수 있다고 우려한다고 가정 해보십시오., 우리는 우리를 시험할 수 있었습니다 실행하여 다음 SQL

SELECT PSC.Name AS SubcategoryFROM Production.ProductCategory AS PSCLEFT OUTER JOIN Production.ProductSubcategory AS PC ON PC.ProductCategoryID = PSC.ProductCategoryIDWHERE PSC.ProductCategoryID is NULL

외부 조 반 타의 추종을 불허하는 행 값으로 NULL 값이 있습니다. Where 절은 null 이 아닌 값을 필터링하여 검토 할 수 있도록 일치하지 않는 하위 범주 이름 만 남깁니다.

외부 조인하는 데 사용될 수도 있습은 다음과 같은 질문을

“무슨 판매 사람은 결코 판매?”

“제품 모델에 할당되지 않은 제품은 무엇입니까?”

“어떤 부서에 할당 된 직원이 없습니까?”

“영업 사원이 할당되지 않은 모든 판매 영역을 나열합니다.”


답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다