Join Fundamentals

Za pomocą sprzężeń, można pobierać dane z dwóch lub większej liczby tabel opartych na logiczne relacje między tabelami.Joins indicate how Microsoft SQL Server should use data from one table to select the rows in another table.

Warunek łączyć definiuje sposób są powiązane dwie tabele w kwerendzie przez:

  • Określanie kolumna z każdej tabela, która ma być stosowana dla łączyć.Warunek łączyć typowe określa klucz obcy z jednej tabela i skojarzonego z nim klucza w innej tabela.

  • Określanie operator logicznego (na przykład, = lub <>) ma być używany przy porównywaniu wartości z kolumn.

Sprzężenia wewnętrzne może być określony w obu FROM lub klauzul WHERE.Sprzężenia zewnętrzne mogą być określone w klauzula FROM tylko.Warunki łączyć łączą się z WHERE i HAVING kontrolować wiersze, które są zaznaczone w podstawowych tabelach w klauzula FROM warunki wyszukiwania.

Określanie łączyć warunków w oddzielnych pomaga klauzula FROM je od innych warunków wyszukiwania, które mogą być określone w klauzula WHERE i jest to zalecana metoda określania łączyć.Jest to uproszczony ISO Z klauzula łączyć Składnia:

FROM first_table join_type second_table [ON (join_condition)]

join_type Określa, jaki rodzaj łączyć jest wykonywane: an inner, outer, or cross join.join_condition defines the predicate to be evaluated for each pair of joined rows.Oto przykład specyfikacji łączyć klauzula FROM:

FROM Purchasing.ProductVendor JOIN Purchasing.Vendor
     ON (ProductVendor.VendorID = Vendor.VendorID)

Poniżej przedstawiono prosty instrukcja SELECT, za pomocą tego łączyć:

SELECT ProductID, Purchasing.Vendor.VendorID, Name
FROM Purchasing.ProductVendor JOIN Purchasing.Vendor
    ON (Purchasing.ProductVendor.VendorID = Purchasing.Vendor.VendorID)
WHERE StandardPrice > $10
  AND Name LIKE N'F%'
GO

Select zwraca informacje o produktu i dostawcy dla dowolnej kombinacji elementów dostarczanych przez firmę, dla których nazwa firmy rozpoczyna się od litery F i cena produktu wynosi więcej niż 10 zł.

Gdy wielu tabel podanych w pojedynczą kwerendę, wszystkie kolumna odwołania musi być jednoznaczne.W poprzednim przykładzie zarówno ProductVendor i Vendor Tabela zawiera kolumna o nazwie VendorID. Nazwa każdej kolumna, która jest zduplikowany pomiędzy dwa lub więcej tabel w kwerendzie musi być kwalifikowany nazwą tabela.Wszystkie odwołania do Vendor kolumny w tym przykładzie są kwalifikacje.

Gdy nazwy kolumn nie jest duplikowany w dwóch lub większej liczby tabel użytych w kwerendzie, odwołania do tego nie trzeba być kwalifikowana nazwą tabela.Jest ona wyświetlana w poprzednim przykładzie.Czasami jest trudne do zrozumienia, ponieważ nie ma nic, aby wskazać tabela, pod warunkiem że każda kolumna tych instrukcja SELECT.Czytelność kwerendy lepsza, jeżeli wszystkie kolumny są poprzedzone ich nazwy tabela.Czytelność dalsze lepsza, jeśli używane są aliasy tabela, szczególnie wtedy, gdy same nazwy tabela musi być kwalifikowany z nazwami baz danych i właściciela.Poniżej przedstawiono tego samego przykładu, z tą różnicą, że przypisano aliasów tabel i kolumn poprzedzone aliasy tabela, aby poprawić czytelność:

SELECT pv.ProductID, v.VendorID, v.Name
FROM Purchasing.ProductVendor pv JOIN Purchasing.Vendor v
    ON (pv.VendorID = v.VendorID)
WHERE StandardPrice > $10
    AND Name LIKE N'F%'

W poprzednich przykładach określone warunki łączyć w klauzula FROM, w której jest metodą preferowaną.Następująca kwerenda zawiera ten sam warunek łączyć określone w klauzula WHERE:

SELECT pv.ProductID, v.VendorID, v.Name
FROM Purchasing.ProductVendor pv, Purchasing.Vendor v
WHERE pv.VendorID = v.VendorID
    AND StandardPrice > $10
    AND Name LIKE N'F%'

Lista wyboru dla łączyć mogą odwoływać się do wszystkich kolumn w tabelach sprzężonych lub każdy podzbiór kolumn.Lista wyboru nie jest wymagane, aby zawierać kolumny z każdej tabela w łączyć.Na przykład w sprzężeniu trzeciej tabeli, tylko jedna tabela może służyć do mostka z innych tabel z trzecią tabelą, a żadna z kolumn z tabeli środkowy muszą odwoływać się na liście select.

Chociaż zazwyczaj mają łączyć porównań równości (=), porównania lub operatory relacyjne można określić, jak w innych predykatów.Aby uzyskać więcej informacji zobacz Używanie operatorów w wyrażeniach i WHERE (języka Transact-SQL).

Kiedy SQL Server przetwarza sprzężeń, aparatu kwerend wybiera najbardziej efektywne metoda (z kilku możliwości) przetwarzania łączyć. Fizyczne wykonanie różnych sprzężeń można używać wielu różnych optymalizacji i w związku z tym nie może być prawidłowo przewidywane.

Kolumny w warunek łączyć nie są wymagane do takiej samej nazwie lub być tego samego typu danych.Jednak jeśli typy danych nie są identyczne, muszą być zgodne, lub być typów, SQL Server można niejawnie przekonwertować. Nie można niejawnie przekonwertować typu danych, warunek łączyć musi jawnie przekonwertować typu danych, funkcja CAST.Aby uzyskać więcej informacji na temat niejawne i jawne konwersje zobacz Data Type Conversion (Database Engine).

Ponownie zapisywane, tak większość kwerend za pomocą łączyć może być przechowywały przy użyciu podkwerenda (kwerenda zagnieżdżona w innej kwerendzie), a następnie ponownie zapisywane, tak większość podkwerenda mogą być przechowywały jako.Aby uzyskać więcej informacji na temat podkwerend zobacz Podkwerendą Fundamentals.

Uwaga

Tabel nie można przyłączyć bezpośrednio na ntext, text, lub image kolumny. Jednak tabele mogą zostać sprzężone pośrednio na ntext, text, lub image kolumny przy użyciu SUBSTRING. Na przykład SELECT * FROM SUBSTRING(t1. ON t2 łączyć t1 textcolumn1, 20) = SUBSTRING (t2. textcolumn1, 20) wykonuje łączyć wewnętrzne tabeli dwóch pierwszych 20 znaków, dla każdej z kolumn tekstu w tabelach T1 and Tabela T2.Ponadto, inną możliwością porównywania ntext lub text kolumny z dwóch tabel jest porównanie długości kolumny za pomocą klauzula WHERE, na przykład: WHERE DATALENGTH(p1.pr_info) = DATALENGTH(p2.pr_info)