Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Specifica la raccolta utilizzata nelle istruzioni SELECT .
Sintassi
FROM expression [ ,...n ] AS C
Argomenti
expression
Qualsiasi espressione di query valida che restituisce una raccolta da usare come origine in un'istruzione SELECT .
Osservazioni:
Una FROM clausola è un elenco delimitato da virgole di uno o più FROM elementi della clausola. La FROM clausola può essere utilizzata per specificare una o più origini per un'istruzione SELECT . La forma più semplice di una FROM clausola è una singola espressione di query che identifica una raccolta e un alias usato come origine in un'istruzione SELECT , come illustrato nell'esempio seguente:
FROM C as c
Elementi della clausola FROM
Ogni FROM elemento della clausola fa riferimento a una raccolta di origine nella query Entity SQL. Entity SQL supporta le classi di elementi della FROM clausola seguenti: elementi di clausole semplici FROM , JOIN FROM elementi della clausola e APPLY FROM elementi della clausola. Ognuno di questi FROM elementi di clausola è descritto in modo più dettagliato nelle sezioni seguenti.
Elemento della clausola FROM semplice
L'elemento della clausola più semplice FROM è una singola espressione che identifica una raccolta e un alias. L'espressione può essere semplicemente un set di entità o una sottoquery o qualsiasi altra espressione che è un tipo di raccolta. Di seguito è riportato un esempio:
LOB.Customers as c
La specifica dell'alias è facoltativa. Una specifica alternativa dell'elemento della clausola precedente potrebbe essere la seguente:
LOB.Customers
Se non viene specificato alcun alias, Entity SQL tenta di generare un alias basato sull'espressione di raccolta.
Elemento della clausola JOIN FROM
Un JOIN FROM elemento della clausola rappresenta un join tra due FROM elementi della clausola. Entity SQL supporta cross join, inner join, left e right outer join e full outer join. Tutti questi join sono supportati in modo analogo al modo in cui sono supportati in Transact-SQL. Come in Transact-SQL, i due FROM elementi della clausola coinvolti in JOIN devono essere indipendenti. Ovvero, non possono essere correlati. Un CROSS APPLY oggetto o OUTER APPLY può essere usato per questi casi.
Cross join
Un'espressione CROSS JOIN di query produce il prodotto cartesiano delle due raccolte, come illustrato nell'esempio seguente:
FROM C AS c CROSS JOIN D as d
Inner Join
Un INNER JOIN oggetto produce un prodotto cartesiano vincolato delle due raccolte, come illustrato nell'esempio seguente:
FROM C AS c [INNER] JOIN D AS d ON e
L'espressione di query precedente elabora una combinazione di ogni elemento della raccolta a sinistra abbinato a ogni elemento della raccolta a destra, dove la ON condizione è true. Se non viene specificata alcuna ON condizione, un INNER JOIN oggetto degenera in un oggetto CROSS JOIN.
Left Outer Joins and Right Outer Joins
Un'espressione OUTER JOIN di query produce un prodotto cartesiano vincolato delle due raccolte, come illustrato nell'esempio seguente:
FROM C AS c LEFT OUTER JOIN D AS d ON e
L'espressione di query precedente elabora una combinazione di ogni elemento della raccolta a sinistra abbinato a ogni elemento della raccolta a destra, dove la ON condizione è true. Se la ON condizione è false, l'espressione elabora comunque una singola istanza dell'elemento a sinistra abbinata all'elemento a destra, con il valore null.
Un RIGHT OUTER JOIN oggetto può essere espresso in modo simile.
Full Outer Joins
Un oggetto esplicito FULL OUTER JOIN produce un prodotto cartesiano vincolato delle due raccolte, come illustrato nell'esempio seguente:
FROM C AS c FULL OUTER JOIN D AS d ON e
L'espressione di query precedente elabora una combinazione di ogni elemento della raccolta a sinistra abbinato a ogni elemento della raccolta a destra, dove la ON condizione è true. Se la ON condizione è false, l'espressione elabora comunque un'istanza dell'elemento a sinistra abbinata all'elemento a destra, con il valore null. Elabora anche un'istanza dell'elemento a destra abbinata all'elemento a sinistra, con il valore null.
Annotazioni
Per mantenere la compatibilità con SQL-92, in Transact-SQL la parola chiave OUTER è facoltativa. Pertanto, LEFT JOIN, RIGHT JOINe FULL JOIN sono sinonimi per LEFT OUTER JOIN, RIGHT OUTER JOINe FULL OUTER JOIN.
Elemento della clausola APPLY
Entity SQL supporta due tipi di APPLY: CROSS APPLY e OUTER APPLY.
Un CROSS APPLY oggetto produce un'associazione univoca di ogni elemento della raccolta a sinistra con un elemento della raccolta prodotta valutando l'espressione a destra. Con , CROSS APPLYl'espressione a destra dipende dal funzionamento dell'elemento a sinistra, come illustrato nell'esempio di raccolta associato seguente:
SELECT c, f FROM C AS c CROSS APPLY c.Assoc AS f
Il comportamento di CROSS APPLY è simile all'elenco di join. Se l'espressione a destra restituisce una raccolta vuota, l'oggetto CROSS APPLY non produce associazioni per tale istanza dell'elemento a sinistra.
Un OUTER APPLY oggetto è simile a , CROSS APPLYad eccezione di un'associazione viene comunque prodotto anche quando l'espressione a destra restituisce una raccolta vuota. Di seguito è riportato un esempio di OUTER APPLY:
SELECT c, f FROM C AS c OUTER APPLY c.Assoc AS f
Annotazioni
A differenza di Transact-SQL, non è necessario un passaggio esplicito in Entity SQL.
Annotazioni
CROSS Gli operatori e OUTER APPLY sono stati introdotti in SQL Server 2005. In alcuni casi, la pipeline di query potrebbe produrre Transact-SQL che contiene CROSS APPLY operatori e/o OUTER APPLY . Poiché alcuni provider back-end, incluse le versioni di SQL Server precedenti a SQL Server 2005, non supportano questi operatori, tali query non possono essere eseguite su questi provider back-end.
Alcuni scenari tipici che potrebbero causare la presenza di CROSS APPLY operatori e/o OUTER APPLY nella query di output sono i seguenti: una sottoquery correlata con il paging; AnyElement su una sottoquery correlata o su una raccolta prodotta dalla navigazione; Query LINQ che usano metodi di raggruppamento che accettano un selettore di elementi; una query in cui un CROSS APPLY oggetto o viene OUTER APPLY specificato in modo esplicito; una query con un DEREF costrutto su un REF costrutto.
Più raccolte nella clausola FROM
La FROM clausola può contenere più raccolte separate da virgole. In questi casi, si presuppone che le raccolte vengano unite insieme. Si pensi a questi come un CROSS JOIN n way.
Nell'esempio C seguente e D sono raccolte indipendenti, ma c.Names dipendono da C.
FROM C AS c, D AS d, c.Names AS e
L'esempio precedente è logicamente equivalente all'esempio seguente:
FROM (C AS c JOIN D AS d) CROSS APPLY c.Names AS e
Correlazione sinistra
Gli elementi nella FROM clausola possono fare riferimento agli elementi specificati nelle clausole precedenti. Nell'esempio C seguente e D sono raccolte indipendenti, ma c.Names dipendono da C:
from C as c, D as d, c.Names as e
Questo equivale logicamente a:
from (C as c join D as d) cross apply c.Names as e
Semantica
Logicamente, si presuppone che le raccolte nella FROM clausola facciano parte di un ncross join -way (tranne nel caso di un cross join a 1 vie). Gli alias nella FROM clausola vengono elaborati da sinistra a destra e vengono aggiunti all'ambito corrente per riferimento successivo. Si presuppone che la FROM clausola producano un multiset di righe. Nella clausola sarà presente un campo per ogni elemento FROM che rappresenta un singolo elemento di tale insieme.
La FROM clausola produce logicamente un multiset di righe di tipo Row(c, d, e) dove si presuppone che i campi c, d ed e siano del tipo di Celemento , De c.Names.
Entity SQL introduce un alias per ogni elemento di clausola semplice FROM nell'ambito. Nel frammento di clausola FROM seguente, ad esempio, i nomi introdotti nell'ambito sono c, d ed e.
from (C as c join D as d) cross apply c.Names as e
In Entity SQL (a differenza di Transact-SQL), la FROM clausola introduce solo gli alias nell'ambito. Tutti i riferimenti alle colonne (proprietà) di queste raccolte devono essere qualificati con l'alias.
Pull di chiavi da query annidate
Alcuni tipi di query che richiedono il pull delle chiavi da una query nidificata non sono supportati. Ad esempio, la query seguente è valida:
select c.Orders from Customers as c
Tuttavia, la query seguente non è valida, perché la query nidificata non dispone di chiavi:
select {1} from {2, 3}