Udostępnij przez


Za pomocą sprzężeń zewnętrznych

łączyć wewnętrzne zwraca wierszy tylko wtedy, gdy przynajmniej jeden wiersz z obu tabel, który odpowiada warunek łączyć.Sprzężenia wewnętrzne wyeliminować wiersze, które nie są zgodne z wierszem z innej tabela.Sprzężenia zewnętrzne jednak zwracać wszystkie wiersze z co najmniej jednej z tabel lub widoków, wymienionych w klauzula FROM, tak długo, jak te wiersze spełniające dowolnego miejsca lub HAVING warunków wyszukiwania.Wszystkie wiersze są pobierane z lewej tabela, wywoływane z lewe łączyć zewnętrzne i odwołuje wszystkie wiersze z tabela po prawej prawe łączyć zewnętrzne.Wszystkie wiersze z obu tabel są zwracane w pełnym łączyć zewnętrzne.

SQL Serverużywa następujących słów kluczowych ISO dla sprzężenia zewnętrzne, określony w klauzula FROM:

  • LEFT OUTER JOIN lub LEFT JOIN

  • RIGHT OUTER JOIN lub RIGHT JOIN

  • FULL OUTER JOIN lub PEŁNEGO sprzężenia

Łączy używając lewa zewnętrzna

Należy rozważyć łączyć z Product tabela i ProductReview tabela na ich ProductID kolumny.Wyniki wskazują produkty, dla których został napisany recenzje.

Uwzględnienie wszystkich produktów, niezależnie od tego, czy zapisano przeglądu dla jednego, użyj ISO lewej łączyć zewnętrzne.To jest kwerenda:

USE AdventureWorks2008R2;
GO
SELECT p.Name, pr.ProductReviewID
FROM Production.Product p
LEFT OUTER JOIN Production.ProductReview pr
ON p.ProductID = pr.ProductID

LEFT OUTER JOIN zawiera wszystkie wiersze w Product tabela wyniki, czy nie są zgodne na ProductID kolumna w ProductReview tabela.Należy zauważyć, że w wyniki w przypadku nie pasujące identyfikator recenzji produktu dla produktu, wiersz zawiera wartość null w ProductReviewID kolumna.

Za pomocą prawe sprzężenia zewnętrzne

Należy rozważyć łączyć SalesTerritory tabela i SalesPerson tabela na ich TerritoryID kolumny.Wyniki pokazują terytorium, który został przypisany osobie sprzedaży.ISO prawe łączyć zewnętrzne operatora, prawe łączyć zewnętrzne, wskazuje są wszystkie wiersze w drugiej tabela, aby zostały uwzględnione w wynikach, niezależnie od tego, czy jest to dopasowanie danych w pierwszej tabela.

Aby dołączyć wszystkie osoby sprzedaży wyniki, niezależnie od tego, czy są one przypisywane terytorium, użyj ISO prawe łączyć zewnętrzne.Oto Transact-SQL kwerendy i wyniki prawe łączyć zewnętrzne:

USE AdventureWorks2008R2;
GO
SELECT st.Name AS Territory, sp.BusinessEntityID
FROM Sales.SalesTerritory st 
RIGHT OUTER JOIN Sales.SalesPerson sp
ON st.TerritoryID = sp.TerritoryID ;

Oto zestaw wyników.

Territory BusinessEntityID

-------------------------------------------------- -------------

NULL 268

Northeast 275

Southwest 276

Central 277

Canada 278

Southeast 279

Northwest 280

Southwest 281

Canada 282

Northwest 283

NULL 284

United Kingdom 285

France 286

Northwest 287

NULL 288

Germany 289

Australia 290

(17 row(s) affected)

łączyć zewnętrzne Może być jeszcze bardziej ograniczana przy użyciu predykatu.W tym przykładzie zawiera takie same prawe łączyć zewnętrzne, ale obejmuje tylko sprzedaży terytoriów ze sprzedażą mniej niż $2,000,000:

USE AdventureWorks2008R2;
GO
SELECT st.Name AS Territory, sp.BusinessEntityID
FROM Sales.SalesTerritory st 
RIGHT OUTER JOIN Sales.SalesPerson sp
ON st.TerritoryID = sp.TerritoryID 
WHERE st.SalesYTD < $2000000;

Aby uzyskać więcej informacji na temat predykatów, zobacz GDZIE (Transact-SQL).

Za pomocą zewnętrznego pełnego sprzężenia

To retain the nonmatching information by including nonmatching rows in the results of a join, use a full outer join.SQL Server provides the full outer join operator, FULL OUTER JOIN, which includes all rows from both tables, regardless of whether or not the other table has a matching value.

Należy rozważyć łączyć z Product tabela i SalesOrderDetail tabela na ich ProductID kolumny.Wyniki pokazują, których zamówienia sprzedaży ich produktów.Operator ISO FULL OUTER JOIN wskazuje, że wszystkie wiersze z obu tabel są uwzględnione w wyniki, niezależnie od tego czy jest to dopasowanie danych w tabelach.

Może zawierać klauzulę WHERE z pełnym łączyć zewnętrzne zwraca tylko te wiersze, jeżeli nie ma zgodnych danych między tabelami.Następująca kwerenda zwraca tylko te produkty, które mają nie pasujące zamówień sprzedaży, jak również tych zamówień sprzedaży, które nie są dopasowywane do produktu (chociaż wszystkich zamówień sprzedaży, w tym przypadek są dopasowywane do produktu).

USE AdventureWorks2008R2;
GO
-- The OUTER keyword following the FULL keyword is optional.
SELECT p.Name, sod.SalesOrderID
FROM Production.Product p
FULL OUTER JOIN Sales.SalesOrderDetail sod
ON p.ProductID = sod.ProductID
WHERE p.ProductID IS NULL
OR sod.ProductID IS NULL
ORDER BY p.Name ;