Udostępnij za pośrednictwem


Z języka Transact-SQL)

Określa tabel, widoków, uzyskanych tabelach i sprzężonych tabel używanych w DELETE SELECT i zaktualizować sprawozdania.W SELECT instrukcja klauzula FROM jest wymagana z wyjątkiem lista wyboru zawiera stałe, zmienne i wyrażeń arytmetyczny (nie nazwy kolumna ).

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

[ FROM { <table_source> } [ ,...n ] ] 
<table_source> ::= 
{
    table_or_view_name [ [ AS ] table_alias ] [ <tablesample_clause> ] 
        [ WITH ( < table_hint > [ [ , ]...n ] ) ] 
    | rowset_function [ [ AS ] table_alias ] 
        [ ( bulk_column_alias [ ,...n ] ) ] 
    | user_defined_function [ [ AS ] table_alias ] ]
    | OPENXML <openxml_clause> 
    | derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ] 
    | <joined_table> 
    | <pivoted_table> 
    | <unpivoted_table>
      | @variable [ [ AS ] table_alias ]
        | @variable.function_call ( expression [ ,...n ] ) [ [ AS ] table_alias ] [ (column_alias [ ,...n ] ) ]
}
<tablesample_clause> ::=
    TABLESAMPLE [SYSTEM] ( sample_number [ PERCENT | ROWS ] ) 
        [ REPEATABLE ( repeat_seed ) ] 

<joined_table> ::= 
{
    <table_source> <join_type> <table_source> ON <search_condition> 
    | <table_source> CROSS JOIN <table_source> 
    | left_table_source { CROSS | OUTER } APPLY right_table_source 
    | [ ( ] <joined_table> [ ) ] 
}
<join_type> ::= 
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
    JOIN

<pivoted_table> ::=
    table_source PIVOT <pivot_clause> [ AS ] table_alias

<pivot_clause> ::=
        ( aggregate_function ( value_column [ [ , ]...n ]) 
        FOR pivot_column 
        IN ( <column_list> ) 
    ) 

<unpivoted_table> ::=
    table_source UNPIVOT <unpivot_clause> [ AS ] table_alias

<unpivot_clause> ::=
        ( value_column FOR pivot_column IN ( <column_list> ) ) 

<column_list> ::=
          column_name [ ,...n ]

Argumenty

  • <table_source>
    Określa tabela, widok, zmiennej tabela lub pochodnych tabela źródłoz lub bez alias, należy używać w Transact-SQL instrukcja.Do 256 tabela źródła mogą być używane w instrukcja, mimo że limit zależy od dostępnej pamięci i złożoności inne wyrażenia w kwerendzie.Wykonania poszczególnych kwerend może nie obsługiwać maksymalnie 256 źródeł tabela .

    Ostrzeżenie

    Wydajność kwerendy może ponieść z dużą liczbą tabel w kwerendzie.Dodatkowe czynniki także wpływ kompilacji i optymalizacji czas .Obejmują one obecności indeksy i widoki indeksowane na każdym <table_source> i rozmiar <select_list> w instrukcjaSELECT.

    Kolejność źródeł tabela po słowie kluczowym FROM nie wpływa na zestaw wyników zwrócone.SQL Serverzwraca błędy, gdy zduplikowane nazwy pojawią się w klauzulaFROM.

  • table_or_view_name
    Jest nazwą tabela lub widoku.

    Jeśli tabela lub widok nie istnieje w innej bazie danych na tym samym wystąpienie programu SQL Server, należy użyć w pełni kwalifikowana nazwa w formie bazy danych.schema.nazwa_obiektu.

    Jeśli tabela lub widok nie istnieje poza wystąpienie SQL Serverl, użyj nazwy czteroczęściowym identyfikatorem w formie linked_server.catalog.schema.object.Aby uzyskać więcej informacji, zobacz sp_addlinkedserver (Transact-SQL).Nazwa czteroczęściowym skonstruowany przy użyciu OPENDATASOURCE funkcja jako część nazwy serwera można również określić tabela zdalna źródło.Po określeniu OPENDATASOURCE database_name i schema_name nie mają zastosowania wszystkie źródła danych i jest z zastrzeżeniem możliwościdostawca OLE DB, który uzyskuje dostęp do obiektu zdalnego. Aby uzyskać więcej informacji, zobacz Kwerend rozproszonych.

  • [W]table_alias
    Jest alias dla table_source mogą być używane dla wygody lub odróżnienia tabela lub widoku w self -łączyć lub podzapytanie.alias jest często używane do odwoływania się do określonych kolumn w tabelach w łączyćnazwę skróconą tabela .Jeśli istnieje taką samą nazwę kolumna w więcej niż jedna tabela w łączyć SQL Server wymaga się, że nazwa kolumna zostać zakwalifikowane przez nazwę tabela , widoku nazwę lub alias.Nie można użyć nazwy tabela , jeśli zdefiniowano alias .

    Pochodne tabela, zestaw wierszy lub tabela-ważnych funkcjalub operator klauzula (takiego jak Tabela przestawna lub UNPIVOT) jest używany, wymagane table_alias na końcu klauzula jest nazwa tabela dla wszystkich kolumn, włączając w to grupowanie kolumn zwracana.

  • WITH (<table_hint> )
    Określa, że optymalizator kwerendy używać optymalizacji lub strategii blokowania z tej tabela i dla tej instrukcja.Aby uzyskać więcej informacji, zobacz Wskazówki tabel (Transact-SQL).

  • rowset_function
    Określa jedną z funkcji zestaw wierszy , takich jak OPENROWSET, które zwraca obiekt, który można używać zamiast odwołania do tabela .Aby uzyskać więcej informacji o liście funkcji zestaw wierszy , zobacz Funkcje zestawu wierszy (Transact-SQL).

    Za pomocą funkcji OPENROWSET i OtwórzKwerendę (OpenQuery) do określania obiektu zdalnego zależy od możliwościdostawca OLE DB, który uzyskuje dostęp do obiektu. Aby uzyskać więcej informacji, zobacz Kwerend rozproszonych.

  • bulk_column_alias
    Jest to opcjonalny alias zastępuje nazwę kolumna w zestaw wyników.Aliasy kolumny są dozwolone tylko w instrukcji SELECT, które OPENROWSET funkcja za pomocą opcji luzem.Podczas korzystania z bulk_column_alias, określić alias dla każdejkolumna tabelaw kolejności kolumn w pliku.

    Ostrzeżenie

    Ten alias zastępuje nazwę atrybut w KOLUMNIE elementy XML plik formatu, jeśli jest obecna.

  • user_defined_function
    Określa tabela-wycenione funkcja.

  • OPENXML <openxml_clause>
    Udostępnia widok zestaw wierszy nad dokumentem XML.Aby uzyskać więcej informacji, zobacz OPENXML (Transact-SQL).

  • derived_table
    Jest podzapytanie , która pobiera wiersze z bazy danych.derived_tablejest używany jako dane wejściowe do zewnętrznej kwerendy.

    derived_tableza pomocą Transact-SQL wiersz konstruktora (tabela wartości konstruktora) funkcji do określenia wielu wierszy.Na przykład SELECT * FROM (VALUES (1, 2), (3, 4), (5, 6), (7, 8), (9, 10) ) AS MyTable(a, b);.

  • column_alias
    Jest to opcjonalny alias zastępuje nazwę kolumna w zestaw wyników tabelapochodnej.Obejmują jedną kolumna alias dla każdej kolumna na liście wybierz i ująć pełną listę aliasów kolumna w nawiasach.

  • <tablesample_clause>
    Określa, że zwracany jest przykładowe dane z tabela .Próbki mogą być wartościami przybliżonymi.Tę klauzula można używać na podstawowym lub sprzężonej tabela w instrukcjaSELECT, UPDATE lub DELETE.TABLESAMPLE nie można określić z widokami.Aby uzyskać więcej informacji, zobacz Ograniczanie wyników ustawia się przy użyciu TABLESAMPLE.

    Ostrzeżenie

    Kiedy używać TABLESAMPLE przeciwko baz danych, które są uaktualniane do SQL Server, poziom zgodności bazy danych musi być zestaw 90 lub wyższej.Aby zestaw zgodności poziombazy danych, zobacz ZMIENIA poziom zgodności bazy danych (Transact-SQL).

  • SYSTEM
    Jest zależne od implementacji próbkowanie metoda określona według normy ISO.W SQL Server, to tylko próbkowaniejestmetoda dostępne i jest stosowana domyślnie stronastosuje się SYSTEM-na podstawie próbkowaniemetoda w którym losowo zestaw stron z tabela jest wybierana dla próbki i wszystkie wiersze na tych stronach są zwracane jako przykładowego podzbiór. Aby uzyskać więcej informacji, zobacz Ograniczanie wyników ustawia się przy użyciu TABLESAMPLE.

  • sample_number
    To przybliżone stała liczbowe wyrażenie reprezentująca procent lub liczbę wierszy.Gdy określona w procentach, sample_number są niejawnie konwertowane na float wartości; w przeciwnym razie jest konwertowany na bigint.PROCENT jest ustawieniem domyślnym.

  • PROCENT
    Określa, że sample_number procent wierszy w tabela mają być pobrane z tabela.Jeśli określono wartość PROCENTOWĄ SQL Server zwraca o przybliżonej procent określonej.Jeżeli określono wartość PROCENTOWĄ sample_number wyrażenie musi zwrócić wartość z zakresu od 0 do 100.

  • WIERSZE
    Określa, że około sample_number wierszy będą pobierane.Po określeniu wierszy SQL Server zwraca zbliżenia liczba wierszy określona.Po określeniu wierszy sample_number wyrażenie musi zwrócić wartość całkowitą większą niż zero.

  • POWTARZALNE
    Wskazuje, można ponownie zwracane wybranej próbce.Po określeniu o tej samej repeat_seed wartości, SQL Server zwróci samego podzbiór wierszy, jak zostały dokonane żadne zmiany do wszystkich wierszy w tabela.Po określeniu z inną repeat_seed wartości, SQL Server będzie prawdopodobnie zwrot niektórych próbek różnych wierszy w tabela.Następujące akcje w tabela są uznawane za zmiany: Wstaw, aktualizację, usuwanie, indeksowania rekonstrukcji lub defragmentacji i bazy danych, przywracanie lub Dołącz.

  • repeat_seed
    Jest stała całkowitą wyrażenie używane przez SQL Server do wygenerowania liczby losowej.repeat_seedis bigint.Jeśli repeat_seed nie jest określony, SQL Server przypisuje wartość wyrywkowo.Dla określonego repeat_seed wartości, wynik próbkowanie jest zawsze taka sama Jeśli żadne zmiany nie zostały zastosowane do tabela.repeat_seedwyrażenie musi zwrócić całkowitą większą od zera.

  • <joined_table>
    Jest zestaw wyników będącego produktem dwóch lub więcej tabel.Dla wielu sprzężeń użyty nawias w celu zmiany kolejności naturalnej sprzężenia.

  • <join_type>
    Określa typ operacji łączyć .

  • WEWNĘTRZNE
    Określa, że zwracane są wszystkie pasujące pary wierszy.Odrzuca Niepasujące wiersze z obu tabel.Po określeniu typu łączyć nie jest to wartość domyślna.

  • PEŁNE [ZEWNĘTRZNĄ]
    Określa, że wiersz z albo lewej lub prawej tabela , która nie spełnia warunku łączyć jest uwzględniona w zestaw wynikówi kolumn wyjściowych, które odpowiadają drugiej tabela jest zestaw na NULL.Jest to w uzupełnieniu do wszystkich wierszy zazwyczaj zwracane przez INNER JOIN.

  • PO LEWEJ STRONIE [ZEWNĘTRZNĄ]
    Określa, że wszystkie wiersze z lewej tabela , które nie spełniają warunku łączyć są zawarte w zestaw wynikówi kolumn wyjściowych z innej tabela jest zestaw na NULL w uzupełnieniu do wszystkich wierszy zwracanych przez sprzężenie wewnętrzne.

  • PRAWO [ZEWNĘTRZNĄ]
    Określa wszystkie wiersze z prawej tabela , które nie spełniają warunku łączyć są zawarte w zestaw wynikówi kolumn wyjściowych, które odpowiadają drugiej tabela są zestaw na wartość NULL, oprócz wszystkich wierszy zwracanych przez sprzężenie wewnętrzne.

  • <join_hint>
    Określa, że SQL Serveroptymalizator kwerendy za pomocą jednego Wskazówka łączyć lub algorytm wykonanie na określony w FROM kwerendy klauzula łączyć . Aby uzyskać więcej informacji, zobacz Dołącz wskazówek (Transact-SQL).

  • SPRZĘŻENIA
    Wskazuje, że operacja określona łączyć powinny występować między źródłami określonej tabela lub widoków.

  • NA <search_condition>
    Określa warunek, na którym oparty jest łączyć .Warunek można określić dowolny predykatu, chociaż kolumny i operatory porównania są często używane, na przykład:

    USE AdventureWorks2008R2 ;
    GO
    SELECT p.ProductID, v.BusinessEntityID
    FROM Production.Product AS p 
    JOIN Purchasing.ProductVendor AS v
    ON (p.ProductID = v.ProductID);
    

    Gdy warunek określa kolumn, kolumny nie muszą mieć tej samej nazwy lub te same dane wpisz; Jednakże, jeśli typy danych nie są takie same, muszą być albo zgodne lub typy, które SQL Server można niejawnie przekonwertować.Jeśli typy danych nie można niejawnie przekonwertować, warunek należy jawnie skonwertować typ danych przy użyciu funkcjaCONVERT.

    Może to być predykatów, które mogą obejmować tylko jedną z tabel sprzężonych w sprawie klauzula.Predykaty takie można także w klauzula WHERE w kwerendzie.Chociaż umieszczenie takiego predykaty nie powoduje różnica sprzężenia wewnętrzne, może być powodują one różne wyniki w przypadku sprzężenia zewnętrzne.Jest to spowodowane predykaty w sprawie klauzula są stosowane do tabela przed łączyćkonieczne klauzula WHERE jest semantycznie stosowane do wyniku łączyć.

    Aby uzyskać więcej informacji na temat warunków wyszukiwania i predykaty zobacz Warunek wyszukiwania (Transact-SQL).

  • SPRZĘŻENIE KRZYŻOWE
    Określa iloczyn krzyżowy dwóch tabel.Zwraca wierszy taki sam, jakby nie klauzula została określona w starym stylu, innych niż-SQL-92-styl łączyć.

  • left_table_source{GRANIC | ZEWNĘTRZNE} ZASTOSOWANIA right_table_source
    Określa, że right_table_source z Zastosuj operator jest oceniane pod względem wszystkich wierszy z left_table_source.Ta funkcja jest przydatna, gdy right_table_source zawiera tabela-ważnych funkcja , która trwa kolumna wartości z left_table_source jako jeden z argumentów.

    Certyfikat KRZYŻOWY lub zewnętrznego musi być określona z Zastosuj.Po określeniu krzyżowe są wytwarzane żadne wiersze po right_table_source jest oceniana względem określonego wiersza left_table_source i zwraca pusty zestaw wyników.

    Po określeniu zewnętrzne jeden wiersz jest generowana dla każdego wiersza left_table_source nawet wówczas, gdy right_table_source ocenia przeciwko tym wierszu i zwraca pusty zestaw wyników.

    Aby uzyskać więcej informacji, zobacz sekcję Spostrzeżenia i Za pomocą Zastosuj.

  • left_table_source
    Jest tabela źródło , jak określono w poprzednim argumentem.Aby uzyskać więcej informacji zobacz sekcję Spostrzeżenia.

  • right_table_source
    Jest tabela źródło , jak określono w poprzednim argumentem.Aby uzyskać więcej informacji zobacz sekcję Spostrzeżenia.

  • table_sourcePRZESTAWNE <pivot_clause>
    Określa, że table_source jest przestawiany na podstawie pivot_column.table_sourcejest tabela lub tabela wyrażenie.Dane wyjściowe są zawiera wszystkie kolumny tabela table_source z wyjątkiem pivot_column i value_column.Kolumny z table_source, z wyjątkiem pivot_column i value_column, są nazywane kolumn grupowanie przestawne operator.

    PRZESTAWNE wykonuje operację grupowanie wejścia tabela w odniesieniu do kolumn grupowanie i zwraca jeden wiersz dla każdej grupy.Ponadto, dane wyjściowe zawiera jedną kolumna dla każdej wartości określone w column_list który pojawia się w pivot_column z input_table.

    Aby uzyskać więcej informacji, zobacz sekcję Spostrzeżenia i Używanie operatorów PIVOT i UNPIVOT.

    Ostrzeżenie

    Kiedy używać PRZESTAWNE przeciwko baz danych, które są uaktualniane do SQL Server, poziom zgodności bazy danych musi być zestaw 90 lub wyższej.Aby uzyskać więcej informacji o ustawianiu zgodności bazy danych poziom, zobacz ZMIENIA poziom zgodności bazy danych (Transact-SQL).

  • aggregate_function
    Jest system lub zdefiniowane przez użytkownika wartość zagregowana funkcja przyjmuje jeden lub więcej składników produkcji.funkcja wartość zagregowana, powinny być niezmienne wartości null . W czasie, gdy jest ocena wartość zagregowana wartość wartość zagregowanafunkcja niezmienne wartości null nie uważa wartości null w grupie.

    wartość zagregowanasystemu COUNT(*)funkcja nie jest dozwolone.

  • value_column
    To wartość kolumna PRZESTAWNE operator.Gdy używana z UNPIVOT, value_column nie może być nazwa istniejącej kolumna w danych wejściowych table_source.

  • DLApivot_column
    Jest przestawne kolumna PRZESTAWNE operator.pivot_columnmusi być typu jawnie lub niejawnie konwertowany na nvarchar().W tej kolumna nie może być image lub rowversion.

    W przypadku UNPIVOT pivot_column jest nazwą wyjściowego kolumna , która staje się zawężony z table_source.Nie może być istniejącej kolumna w table_source z tej nazwy.

  • IN (column_list )
    W PIVOT klauzulazawiera listę wartości w pivot_column , staną się nazwy kolumna w tabelawyjociowej.Listy nie można określić wszystkie nazwy kolumna , które już istnieją w danych wejściowych table_source , przestawiania.

    W UNPIVOT klauzulazawiera listę kolumn w table_source będzie zostać zawężony pojedyncze pivot_column.

  • table_alias
    Jest to nazwa alias tabelawyników.pivot_table_aliasmusi być określony.

  • UNPIVOT < unpivot_clause>
    Określa, że wejściowe tabela jest zawężony z wielu kolumn w column_list do pojedynczej kolumna o nazwie pivot_column.

    Aby uzyskać więcej informacji, zobacz sekcję Spostrzeżenia i Używanie operatorów PIVOT i UNPIVOT.

    Ostrzeżenie

    Kiedy używać UNPIVOT przeciwko baz danych, które są uaktualniane do SQL Server, poziom zgodności bazy danych musi być zestaw 90 lub wyższej.Aby zestaw zgodności poziombazy danych, zobacz ZMIENIA poziom zgodności bazy danych (Transact-SQL).

Uwagi

klauzula FROM obsługuje SQL-92-składniaSQL dla połączonych tabel oraz uzyskane tabel.SQL-92 Składnia zawiera operatory łączyć wewnętrzne, kluczowe LEFT OUTER, RIGHT OUTER, pełne zewnętrzne i PRZEŁADUNKU.

W widokach i w tabelach pochodnych i podkwerend obsługiwane Unii i JOIN w klauzula FROM.

Self -łączyć jest przyłączony do samej tabela .Wstawianie lub aktualizowanie operacji, które są oparte na self -łączyć przestrzegać porządku w klauzulaFROM.

Ponieważ SQL Server uważa, dystrybucji i kardynalność statystyk z serwerów, które dostarczają statystyk dystrybucji kolumna połączone, wskazówka zdalnego łączyć nie jest wymagane Aby wymusić zdalnie oceny łączyć .SQL Server Procesor kwerend uznaje zdalnego statystyki i określa, czy strategiiłączyć zdalnego - jest odpowiedni.Wskazówka zdalnego łączyć jest przydatne dla dostawców, które nie dostarczają statystyk dystrybucji kolumna .Aby uzyskać więcej informacji, zobacz Wymagania statystyk dystrybucji dla dostawców OLE DB.

Aby uzyskać więcej informacji na temat pracy ze sprzężeniami, zobacz Dołącz podstawy i Za pomocą sprzężeń.

Za pomocą Zastosuj

Zarówno lewego i prawego operandy Zastosuj operator są wyrażeniami tabela .Zasadnicza różnica między te argumenty, jest right_table_source można użyć tabela-wycenione funkcja przyjmuje kolumna z left_table_source jako jednego z argumentów funkcja.left_table_source Może zawierać tabela-ważnych funkcji, ale nie może zawierać argumenty, które są kolumny z right_table_source.

Zastosuj operator działa w następujący sposób w celu utworzenia tabela źródło w klauzulaFROM:

  1. Wynikiem jest right_table_source przeciwko każdy wiersz left_table_source do wyprodukowania zestawów wierszy.

    Wartości w right_table_source , zależą od left_table_source.right_table_sourcemoże być reprezentowany około w ten sposób: TVF(left_table_source.row), gdzie TVF jest tabela- funkcjawycenione.

  2. Łączy zestawy wyników, które są tworzone dla każdego wiersza w ocenie right_table_source z left_table_source , wykonując operację UNION ALL.

    Lista kolumn produkowane przez wynik Zastosuj operator jest zestaw kolumn z left_table_source , jest połączone z listy kolumny z right_table_source.

Za pomocą diagramu PRZESTAWNEGO i UNPIVOT

pivot_column i value_column są grupowanie kolumn, które są używane przez operatorPRZESTAWNE.PRZESTAWNE następujące uzyskać wyjście zestaw wynikównastępujący proces:

  1. Wykonuje Grupuj według w jego input_table przeciwko grupowanie kolumn i tworzy jeden wyjścia wiersz dla każdej grupy.

    grupowanie kolumn w wierszu danych wyjściowych uzyskania odpowiednich wartości kolumna dla tej grupy w input_table.

  2. Generuje wartości dla kolumn na liście kolumna dla każdego wiersza danych wyjściowych, wykonując następujące czynności:

    1. Ponadto grupowania wierszy wygenerowanych w GROUP BY w poprzednim kroku przeciwko pivot_column.

      Dla każdego wyjścia kolumna w column_list, zaznaczając podgrupy, który spełnia warunek:

      pivot_column = CONVERT(<data type of pivot_column>, 'output_column')

    2. aggregate_functionoceniane przeciwko value_column na to podgrupa i jej wyniku są zwracane jako wartości odpowiadające im output_column.Jeśli Podgrupa ta jest pusta, SQL Server generuje wartość null dla tej output_column.Jeślifunkcja wartość zagregowanajest licznik Podgrupa ta jest pusta, zwracana jest wartość zero (0).

Aby uzyskać więcej informacji, zobacz Używanie operatorów PIVOT i UNPIVOT.

Uprawnienia

Wymaga uprawnień dla instrukcjaDELETE, zaznacz lub aktualizacji.

Przykłady

A.Za pomocą prostej klauzulaFROM

Poniższy przykład pobiera TerritoryID i Name kolumny z SalesTerritory tabela w AdventureWorks2008R2 przykładowej bazy danych.

USE AdventureWorks2008R2 ;
GO
SELECT TerritoryID, Name
FROM Sales.SalesTerritory
ORDER BY TerritoryID ;

Oto zestaw wyników.

TerritoryID Name                          
----------- ------------------------------
1           Northwest                     
2           Northeast                     
3           Central                       
4           Southwest                     
5           Southeast                     
6           Canada                        
7           France                        
8           Germany                       
9           Australia                     
10          United Kingdom                
(10 row(s) affected)

B.Korzystanie z TABLOCK i HOLDLOCK wskazówek dotyczących optymalizacji

Częściowe następujących transakcji pokazuje, jak należy umieścić wyraźne udostępnionego tabela blokada na Employee i sposób odczytywania indeksu.blokada jest używana w całym cała transakcja.

USE AdventureWorks2008R2 ;
GO
BEGIN TRAN
SELECT COUNT(*) 
FROM HumanResources.Employee WITH (TABLOCK, HOLDLOCK) ;

C.Przy użyciu SQL-92 składni sprzężenia między DOMENAMI

Poniższy przykład zwraca iloczyn krzyżowy dwie tabele Employee i Department.Lista wszystkich możliwych kombinacji EmployeeID wierszy i wszystkie Department nazwy wierszy zostaną zwrócone.

USE AdventureWorks2008R2 ;
GO
SELECT e.BusinessEntityID, d.Name AS Department
FROM HumanResources.Employee AS e
CROSS JOIN HumanResources.Department AS d
ORDER BY e.BusinessEntityID, d.Name ;

D.Za pomocą SQL-92 FULL OUTER JOIN składni

Poniższy przykład zwraca nazwę produktu i odpowiadające im zamówień sprzedaży w SalesOrderDetail tabela.Zwraca również zamówień sprzedaży, których nie produktu wymienionego w Product tabelai wszystkich produktów z zamówienia sprzedaży, innych niż wymienione w Product tabela.

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

E.Za pomocą składni SQL-92 LEFT OUTER JOIN

Poniższy przykład łączy dwie tabele na ProductID i zachowuje Niepasujące wiersze z lewej tabela.Producttabela jest dopasowywany SalesOrderDetailtabela na ProductID kolumn w każdej tabela.Wszystkie produkty zamówione i nie zamówione, pojawiają się w zestaw wyników.

USE AdventureWorks2008R2 ;
GO
SELECT p.Name, sod.SalesOrderID
FROM Production.Product AS p
LEFT OUTER JOIN Sales.SalesOrderDetail AS sod
ON p.ProductID = sod.ProductID
ORDER BY p.Name ;

F.Za pomocą składni SQL-92 INNER JOIN

Poniższy przykład zwraca wszystkie nazwy produktów i identyfikatory zamówienia sprzedaży.

USE AdventureWorks2008R2 ;
GO
-- By default, SQL Server performs an INNER JOIN if only the JOIN 
-- keyword is specified.
SELECT p.Name, sod.SalesOrderID
FROM Production.Product AS p
INNER JOIN Sales.SalesOrderDetail AS sod
ON p.ProductID = sod.ProductID
ORDER BY p.Name ;

G.Za pomocą SQL-92 prawo składni sprzężenia zewnętrzne

Poniższy przykład łączy dwie tabele na TerritoryID i zachowuje Niepasujące wiersze z prawej tabela.SalesTerritorytabela jest dopasowywany SalesPersontabela na TerritoryIDkolumna w każdej tabela. Wszyscy sprzedawcy są wyświetlane w zestaw wyników, czy nie są one przypisywane terytorium.

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

H.Przy użyciu skrótu i scalania wskazówek łączyć

W następującym przykładzie wykonywana trzy -tabela łączyć między Product, ProductVendor, i Vendor tabel można wygenerować listę produktów i ich dostawców.Sprzężenia optymalizator kwerendy Product i ProductVendor ()p i pv) za pomocą korespondencji seryjnej łączyć.Dalej, wyniki Product i ProductVendor korespondencji seryjnej łączyć (p i pv) mieszania są przyłączone do Vendor tabela do wyprodukowania (p i pv) i v.

Ważna informacjaWażne:

Po łączyć wskazówka jest określony, słowa kluczowego INNER już jest opcjonalny i musi być wyraźnie stwierdzone dla sprzężenia wewnętrznego należy przeprowadzić.

USE AdventureWorks2008R2 ;
GO
SELECT p.Name AS ProductName, v.Name AS VendorName
FROM Production.Product AS p 
INNER MERGE JOIN Purchasing.ProductVendor AS pv 
ON p.ProductID = pv.ProductID
INNER HASH JOIN Purchasing.Vendor AS v
ON pv.BusinessEntityID = v.BusinessEntityID
ORDER BY p.Name, v.Name ;

I.Za pomocą pochodnych tabela

W poniższym przykładzie użyto pochodnej tabela SELECT instrukcja po FROM klauzula, aby powrócić do imienia i nazwiska wszystkich pracowników i miast, w których żyją.

USE AdventureWorks2008R2 ;
GO
SELECT RTRIM(p.FirstName) + ' ' + LTRIM(p.LastName) AS Name, d.City
FROM Person.Person AS p
INNER JOIN HumanResources.Employee e ON p.BusinessEntityID = e.BusinessEntityID 
INNER JOIN
   (SELECT bea.BusinessEntityID, a.City 
    FROM Person.Address AS a
    INNER JOIN Person.BusinessEntityAddress AS bea
    ON a.AddressID = bea.AddressID) AS d
ON p.BusinessEntityID = d.BusinessEntityID
ORDER BY p.LastName, p.FirstName;

J.Aby odczytać dane z próbki wierszy w tabelaprzy użyciu TABLESAMPLE

W poniższym przykładzie użyto TABLESAMPLE w FROM klauzula , aby powrócić do około 10 procent wszystkich wierszy w Customer tabela w AdventureWorks2008R2 bazy danych.

USE AdventureWorks2008R2 ;
GO
SELECT *
FROM Sales.Customer TABLESAMPLE SYSTEM (10 PERCENT) ;

K.Za pomocą Zastosuj

W poniższym przykładzie założono, że istnieją następujące tabele z następującego schematu bazy danych:

  • Departments: DeptID, DivisionID, DeptName, DeptMgrID

  • EmpMgr: MgrID, EmpID

  • Employees: EmpID, EmpLastName, EmpFirstName, EmpSalary

Jest również tabela-wycenione funkcja GetReports(MgrID) , zwraca listę wszystkich pracowników (EmpID, EmpLastName, EmpSalary), raport bezpośrednio lub pośrednio na określony MgrID.

W przykładzie użyto APPLY zwraca wszystkie działy i wszystkich pracowników danego działu.Jeśli danego działu nie ma żadnych pracowników, nie będzie żadnych wierszy zwracanych dla danego departamentu.

SELECT DeptID, DeptName, DeptMgrID, EmpID, EmpLastName, EmpSalary
FROM Departments d CROSS APPLY dbo.GetReports(d.DeptMgrID) ;

Jeśli chcesz kwerendę, aby utworzyć wiersze dla tych departamentów bez pracowników, wytwarzające wartości null dla EmpID, EmpLastName i EmpSalary kolumny, należy użyć OUTER APPLY zamiast.

SELECT DeptID, DeptName, DeptMgrID, EmpID, EmpLastName, EmpSalary
FROM Departments d OUTER APPLY dbo.GetReports(d.DeptMgrID) ;

L.Za pomocą diagramu PRZESTAWNEGO i UNPIVOT

Poniższy przykład zwraca liczbę zamówień zakupu przez identyfikatory pracowników 164, 198, 223, 231, i 233, według dostawcy identyfikatora.

USE AdventureWorks2008R2;
GO
SELECT VendorID, [250] AS Emp1, [251] AS Emp2, [256] AS Emp3, [257] AS Emp4, [260] AS Emp5
FROM 
(SELECT PurchaseOrderID, EmployeeID, VendorID
FROM Purchasing.PurchaseOrderHeader) AS p
PIVOT
(
COUNT (PurchaseOrderID)
FOR EmployeeID IN
( [250], [251], [256], [257], [260] )
) AS pvt
ORDER BY VendorID;

Poniżej przedstawiono częściową zestaw wyników:

VendorID    Emp1        Emp2        Emp3        Emp4        Emp5

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

1           4           3           5           4           4

2           4           1           5           5           5

3           4           3           5           4           4

4           4           2           5           5           4

5           5           1           5           5           5

Unpivot tabela, przyjęto zestaw wyników wyprodukowanych w poprzednim przykładzie jest przechowywana jako pvt.Kwerenda wygląda następująco.

--Create the table and insert values as portrayed in the previous example.
CREATE TABLE dbo.pvt (VendorID int, Emp1 int, Emp2 int,
Emp3 int, Emp4 int, Emp5 int);
GO
INSERT INTO dbo.pvt VALUES 
 (1,4,3,5,4,4)
,(2,4,1,5,5,5)
,(3,4,3,5,4,4)
,(4,4,2,5,5,4)
,(5,5,1,5,5,5);
GO
--Unpivot the table.
SELECT VendorID, Employee, Orders
FROM 
    (SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5
    FROM dbo.pvt) AS p
UNPIVOT
    (Orders FOR Employee IN 
        (Emp1, Emp2, Emp3, Emp4, Emp5)
)AS unpvt
GO

Poniżej przedstawiono częściową zestaw wyników:

VendorID    Employee    Orders

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

1           Emp1        4

1           Emp2        3

1           Emp3        5

1           Emp4        4

1           Emp5        4

2           Emp1        4

2           Emp2        1

2           Emp3        5

2           Emp4        5

2           Emp5        5