Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Určuje kolekci použitou v příkazech SELECT .
Syntaxe
FROM expression [ ,...n ] AS C
Argumenty
expression
Libovolný platný výraz dotazu, který poskytuje kolekci, která se použije jako zdroj v SELECT příkazu.
Poznámky
Klauzule FROM je čárkami oddělený seznam jedné nebo více FROM položek klauzule. Klauzuli FROM lze použít k určení jednoho nebo více zdrojů pro SELECT příkaz. Nejjednodušší forma FROM klauzule je jeden výraz dotazu, který identifikuje kolekci a alias použitý jako zdroj v SELECT příkazu, jak je znázorněno v následujícím příkladu:
FROM C as c
Položky klauzule FROM
Každá FROM položka klauzule odkazuje na zdrojovou kolekci v dotazu Entity SQL. Entity SQL podporuje následující třídy FROM položek klauzule: položky jednoduché FROM klauzule, JOIN FROM položky klauzule a APPLY FROM položky klauzule. Každá z těchto FROM položek klauzule je podrobněji popsána v následujících částech.
Položka jednoduché klauzule FROM
Nejjednodušší FROM položka klauzule je jeden výraz, který identifikuje kolekci a alias. Výraz může být jednoduše sada entit, poddotaz nebo jakýkoli jiný výraz, který je typem kolekce. Následuje příklad:
LOB.Customers as c
Specifikace aliasu je volitelná. Alternativní specifikace výše uvedené položky klauzule může být následující:
LOB.Customers
Pokud není zadán žádný alias, entity SQL se pokusí vygenerovat alias na základě výrazu kolekce.
Položka klauzule JOIN FROM
Položka JOIN FROM klauzule představuje spojení mezi dvěma FROM položkami klauzule. Entity SQL podporuje křížová spojení, vnitřní spojení, levá a pravá vnější spojení a úplná vnější spojení. Všechna tato spojení se podporují podobně jako v jazyce Transact-SQL. Stejně jako v jazyce Transact-SQL musí být obě FROM položky klauzule zahrnuté do souboru JOIN nezávislé. To znamená, že je nelze korelovat. Pro CROSS APPLY tyto případy je možné použít nebo OUTER APPLY je možné je použít.
Křížové spojení
CROSS JOIN Výraz dotazu vytvoří kartézský součin dvou kolekcí, jak je znázorněno v následujícím příkladu:
FROM C AS c CROSS JOIN D as d
Vnitřní spojení
Vytvoří INNER JOIN omezený kartézský součin dvou kolekcí, jak je znázorněno v následujícím příkladu:
FROM C AS c [INNER] JOIN D AS d ON e
Předchozí výraz dotazu zpracovává kombinaci každého prvku kolekce na levé straně spárované s každým prvkem kolekce vpravo, kde ON podmínka je pravdivá. Pokud není zadána žádná ON podmínka, degeneruje INNER JOIN se na CROSS JOIN.
Levé vnější spojení a pravé vnější spojení
Výraz OUTER JOIN dotazu vytvoří omezený kartézský součin dvou kolekcí, jak je znázorněno v následujícím příkladu:
FROM C AS c LEFT OUTER JOIN D AS d ON e
Předchozí výraz dotazu zpracovává kombinaci každého prvku kolekce na levé straně spárované s každým prvkem kolekce vpravo, kde ON podmínka je pravdivá.
ON Pokud je podmínka false, výraz stále zpracovává jednu instanci elementu na levé straně spárovaný s elementem vpravo s hodnotou null.
A RIGHT OUTER JOIN může být vyjádřeno podobným způsobem.
Úplná vnější spojení
Explicitní FULL OUTER JOIN vytvoří omezený kartézský součin dvou kolekcí, jak je znázorněno v následujícím příkladu:
FROM C AS c FULL OUTER JOIN D AS d ON e
Předchozí výraz dotazu zpracovává kombinaci každého prvku kolekce na levé straně spárované s každým prvkem kolekce vpravo, kde ON podmínka je pravdivá.
ON Pokud je podmínka false, výraz stále zpracovává jednu instanci elementu na levé straně spárovaný s elementem vpravo s hodnotou null. Zpracovává také jednu instanci elementu vpravo spárovaného s elementem vlevo s hodnotou null.
Poznámka:
Chcete-li zachovat kompatibilitu s SQL-92, je v Transact-SQL vnější klíčové slovo volitelné. Proto , LEFT JOIN, RIGHT JOINa FULL JOIN jsou synonyma pro LEFT OUTER JOIN, RIGHT OUTER JOINa FULL OUTER JOIN.
Položka klauzule APPLY
Entity SQL podporuje dva druhy APPLY: CROSS APPLY a OUTER APPLY.
A CROSS APPLY vytvoří jedinečné párování každého prvku kolekce vlevo s prvkem kolekce vytvořené vyhodnocením výrazu vpravo.
CROSS APPLYVýraz na pravé straně je funkčně závislý na prvku na levé straně, jak je znázorněno v následujícím příkladu přidružené kolekce:
SELECT c, f FROM C AS c CROSS APPLY c.Assoc AS f
Chování CROSS APPLY se podobá seznamu spojení. Pokud se výraz vpravo vyhodnotí jako prázdná kolekce, CROSS APPLY nevygeneruje žádné párování pro danou instanci prvku vlevo.
Podobá OUTER APPLY se znaku CROSS APPLY, s výjimkou párování je stále vytvořen, i když výraz vpravo vyhodnotí prázdnou kolekci. Následuje příklad OUTER APPLY:
SELECT c, f FROM C AS c OUTER APPLY c.Assoc AS f
Poznámka:
Na rozdíl od jazyka Transact-SQL není nutné explicitně nezadávat krok entity SQL.
Poznámka:
CROSS a OUTER APPLY operátory byly zavedeny v SYSTÉMU SQL Server 2005. V některých případech může kanál dotazu vytvořit Transact-SQL, které obsahují CROSS APPLY a/nebo OUTER APPLY operátory. Vzhledem k tomu, že někteří poskytovatelé back-endu, včetně verzí SQL Serveru starších než SQL Server 2005, nepodporují tyto operátory, tyto dotazy nelze na těchto back-endových poskytovatelích spustit.
Některé typické scénáře, které můžou vést k přítomnosti CROSS APPLY a/nebo OUTER APPLY operátorů ve výstupním dotazu, jsou následující: korelovaný poddotaz se stránkováním; AnyElement nad korelovaným poddotazem nebo kolekcí vytvořenou pomocí navigace; LINQ dotazy, které používají metody seskupení, které přijímají selektor elementu; dotaz, ve kterém CROSS APPLY jsou explicitně zadány, OUTER APPLY dotaz, který má DEREF konstruktor nad konstruktorem REF .
Více kolekcí v klauzuli FROM
Klauzule FROM může obsahovat více než jednu kolekci oddělenou čárkami. V těchto případech se předpokládá, že se kolekce spojí dohromady. Představte si je jako n-way CROSS JOIN.
V následujícím příkladu C a D jsou nezávislé kolekce, ale c.Names jsou závislé na C.
FROM C AS c, D AS d, c.Names AS e
Předchozí příklad je logicky ekvivalentní následujícímu příkladu:
FROM (C AS c JOIN D AS d) CROSS APPLY c.Names AS e
Levá korelace
Položky v FROM klauzuli mohou odkazovat na položky uvedené v dřívějších klauzulích. V následujícím příkladu C a D jsou nezávislé kolekce, ale c.Names jsou závislé na C:
from C as c, D as d, c.Names as e
To je logicky ekvivalentní:
from (C as c join D as d) cross apply c.Names as e
Sémantika
Logicky se předpokládá, že kolekce v FROM klauzuli jsou součástí n-way křížového spojení (s výjimkou 1cestného křížového spojení). Aliasy v FROM klauzuli se zpracovávají zleva doprava a přidají se do aktuálního oboru pro pozdější referenci. Klauzule FROM se předpokládá, že vytvoří více sad řádků. Pro každou položku v FROM klauzuli bude jedno pole, které představuje jeden prvek z této položky kolekce.
Klauzule FROM logicky vytvoří více sad řádků typu Row(c, d, e), kde pole c, d a e mají být typu prvku C, Da c.Names.
Entity SQL zavádí alias pro každou položku jednoduché FROM klauzule v oboru. Například v následujícím fragmentu klauzule FROM jsou názvy zavedené do oboru c, d a e.
from (C as c join D as d) cross apply c.Names as e
V Entity SQL (na rozdíl od Transact-SQL) FROM klauzule zavádí do oboru pouze aliasy. Všechny odkazy na sloupce (vlastnosti) těchto kolekcí musí být kvalifikované pomocí aliasu.
Vyžádání klíčů z vnořených dotazů
Některé typy dotazů, které vyžadují vyžádání klíčů z vnořeného dotazu, se nepodporují. Například následující dotaz je platný:
select c.Orders from Customers as c
Následující dotaz však není platný, protože vnořený dotaz nemá žádné klíče:
select {1} from {2, 3}