FROM (Entity SQL)FROM (Entity SQL)

Specifica la raccolta usata nelle selezionare istruzioni.Specifies the collection used in SELECT statements.

SintassiSyntax

FROM expression [ ,...n ] as C  

ArgomentiArguments

expression
Qualsiasi espressione di query valida che produce una raccolta da usare come origine in un'istruzione SELECT.Any valid query expression that yields a collection to use as a source in a SELECT statement.

NoteRemarks

Una clausola FROM è un elenco delimitato da virgole di uno o più elementi della clausola FROM.A FROM clause is a comma-separated list of one or more FROM clause items. La clausola FROM può essere usata per specificare una o più origini per un'istruzione SELECT.The FROM clause can be used to specify one or more sources for a SELECT statement. Il tipo più semplice di clausola FROM consiste in una singola espressione di query che identifica una raccolta e un alias usati come origine in un'istruzione SELECT, come illustrato nell'esempio seguente:The simplest form of a FROM clause is a single query expression that identifies a collection and an alias used as the source in a SELECT statement, as illustrated in the following example:

FROM C as c

Elementi della clausola FROMFROM Clause Items

Ogni elemento della clausola FROM si riferisce a una raccolta di origine nella query Entity SQLEntity SQL.Each FROM clause item refers to a source collection in the Entity SQLEntity SQL query. Entity SQLEntity SQL supporta le classi seguenti di elementi della clausola FROM: elementi della clausola FROM semplici, elementi della clausola JOIN FROM ed elementi della clausola APPLY FROM supports the following classes of FROM clause items: simple FROM clause items, JOIN FROM clause items, and APPLY FROM clause items. Nelle sezioni seguenti è disponibile una descrizione più dettagliata per ognuno di questi elementi della clausola FROM.Each of these FROM clause items is described in more detail in the following sections.

Elemento della clausola FROM sempliceSimple FROM Clause Item

L'elemento della clausola FROM più semplice è dato da una singola espressione che identifica una raccolta e un alias.The simplest FROM clause item is a single expression that identifies a collection and an alias. L'espressione può consistere semplicemente in un set di entità, o subquery, o in qualsiasi altra espressione corrispondente a un tipo di raccolta.The expression can simply be an entity set, or a subquery, or any other expression that is a collection type. Di seguito è riportato un esempio:The following is an example:

LOB.Customers as c  

La specifica dell'alias è facoltativa.The alias specification is optional. Di seguito è riportato un esempio di specifica alternativa per l'elemento della clausola FROM precedente:An alternate specification of the above from clause item could be the following:

LOB.Customers  

Se non viene specificato alcun alias, in Entity SQLEntity SQL viene eseguito un tentativo di generare un alias in base all'espressione della raccolta.If no alias is specified, Entity SQLEntity SQL attempts to generate an alias based on the collection expression.

Elemento della clausola JOIN FROMJOIN FROM Clause Item

Un elemento della clausola JOIN FROM rappresenta un join tra due elementi della clausola FROM.A JOIN FROM clause item represents a join between two FROM clause items. Entity SQLEntity SQL supporta cross join, inner join, left e right outer join e full outer join. supports cross joins, inner joins, left and right outer joins, and full outer joins. Il supporto di questi join presenta caratteristiche analoghe a quelle del supporto offerto da Transact-SQLTransact-SQL.All these joins are supported similar to the way that they are supported in Transact-SQLTransact-SQL. Come in Transact-SQLTransact-SQL, i due elementi della clausola FROM inclusi nel JOIN devono essere indipendenti.As in Transact-SQLTransact-SQL, the two FROM clause items involved in the JOIN must be independent. In altre parole, non possono essere correlati.That is, they cannot be correlated. In questi casi è possibile usare una clausola CROSS APPLY o OUTER APPLY.A CROSS APPLY or OUTER APPLY can be used for these cases.

Cross joinCross Joins

Un'espressione di query CROSS JOIN genera il prodotto cartesiano di due raccolte, come illustrato nell'esempio seguente:A CROSS JOIN query expression produces the Cartesian product of the two collections, as illustrated in the following example:

FROM C AS c CROSS JOIN D as d

Inner joinInner Joins

Un INNER JOIN genera un prodotto cartesiano vincolato di due raccolte, come illustrato nell'esempio seguente:An INNER JOIN produces a constrained Cartesian product of the two collections, as illustrated in the following example:

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, in cui la condizione ON è vera.The previous query expression processes a combination of every element of the collection on the left paired against every element of the collection on the right, where the ON condition is true. Se non è specificata alcuna condizione ON, un INNER JOIN degenera in un CROSS JOIN.If no ON condition is specified, an INNER JOIN degenerates to a CROSS JOIN.

Left outer join e right outer joinLeft Outer Joins and Right Outer Joins

Un'espressione di query OUTER JOIN genera un prodotto cartesiano vincolato di due raccolte, come illustrato nell'esempio seguente:An OUTER JOIN query expression produces a constrained Cartesian product of the two collections, as illustrated in the following example:

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, in cui la condizione ON è vera.The previous query expression processes a combination of every element of the collection on the left paired against every element of the collection on the right, where the ON condition is true. Se la condizione ON è falsa, l'espressione elabora comunque una sola istanza dell'elemento a sinistra abbinato all'elemento a destra con valore Null.If the ON condition is false, the expression still processes a single instance of the element on the left paired against the element on the right, with the value null.

Un RIGHT OUTER JOIN può essere espresso in modo simile.A RIGHT OUTER JOIN may be expressed in a similar manner.

Full Outer JoinFull Outer Joins

Un FULL OUTER JOIN esplicito genera un prodotto cartesiano vincolato di due raccolte, come illustrato nell'esempio seguente:An explicit FULL OUTER JOIN produces a constrained Cartesian product of the two collections as illustrated in the following example:

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, in cui la condizione ON è vera.The previous query expression processes a combination of every element of the collection on the left paired against every element of the collection on the right, where the ON condition is true. Se la condizione ON è falsa, l'espressione elabora comunque una sola istanza dell'elemento a sinistra abbinato all'elemento a destra con valore Null.If the ON condition is false, the expression still processes one instance of the element on the left paired against the element on the right, with the value null. Elabora inoltre una sola istanza dell'elemento a destra abbinato all'elemento a sinistra con valore Null.It also processes one instance of the element on the right paired against the element on the left, with the value null.

Nota

Per mantenere la compatibilità con SQL-92, in Transact-SQLTransact-SQL la parola chiave OUTER è facoltativa.To preserve compatibility with SQL-92, in Transact-SQLTransact-SQL the OUTER keyword is optional. Pertanto, LEFT JOIN, RIGHT JOIN e FULL JOIN sono sinonimi di LEFT OUTER JOIN, RIGHT OUTER JOIN e FULL OUTER JOIN.Therefore, LEFT JOIN, RIGHT JOIN, and FULL JOIN are synonyms for LEFT OUTER JOIN, RIGHT OUTER JOIN, and FULL OUTER JOIN.

Elemento della clausola APPLYAPPLY Clause Item

Entity SQLEntity SQL supporta due tipi di clausola APPLY: CROSS APPLY e OUTER APPLY. supports two kinds of APPLY: CROSS APPLY and OUTER APPLY.

Una clausola CROSS APPLY produce un abbinamento univoco di ogni elemento della raccolta a sinistra con un elemento della raccolta prodotto dalla valutazione dell'espressione a destra.A CROSS APPLY produces a unique pairing of each element of the collection on the left with an element of the collection produced by evaluating the expression on the right. Con una clausola CROSS APPLY, l'espressione a destra dipende dal punto di vista funzionale dall'elemento a sinistra, come illustrato nell'esempio di raccolta associata seguente:With a CROSS APPLY, the expression on the right is functionally dependent on the element on the left, as illustrated in the following associated collection example:

SELECT c, f FROM C AS c CROSS APPLY c.Assoc AS f

Il comportamento di CROSS APPLY è simile a quello dell'elenco di join.The behavior of CROSS APPLY is similar to the join list. Se l'espressione a destra restituisce una raccolta vuota, CROSS APPLY non produce abbinamenti per quell'istanza dell'elemento a sinistra.If the expression on the right evaluates to an empty collection, the CROSS APPLY produces no pairings for that instance of the element on the left.

Una clausola OUTER APPLY è simile a una CROSS APPLY, ad eccezione del fatto che viene prodotto un abbinamento anche se l'espressione a destra restituisce una raccolta vuota.An OUTER APPLY resembles a CROSS APPLY, except a pairing is still produced even when the expression on the right evaluates to an empty collection. Di seguito viene riportato un esempio di OUTER APPLY.The following is an example of an OUTER APPLY:

SELECT c, f FROM C AS c OUTER APPLY c.Assoc AS f

Nota

A differenza di Transact-SQLTransact-SQL, in Entity SQLEntity SQL non è necessario un passaggio UNNEST esplicito.Unlike in Transact-SQLTransact-SQL, there is no need for an explicit unnest step in Entity SQLEntity SQL.

Nota

Gli operatori CROSS e OUTER APPLY sono stati introdotti in SQL Server 2005SQL Server 2005.CROSS and OUTER APPLY operators were introduced in SQL Server 2005SQL Server 2005. In alcuni casi, è possibile che la pipeline della query produca istruzioni Transact-SQL contenenti gli operatori CROSS APPLY e/o OUTER APPLY.In some cases, the query pipeline might produce Transact-SQL that contains CROSS APPLY and/or OUTER APPLY operators. Poiché alcuni provider di back-end, incluse le versioni di SQL Server precedenti a SQL Server 2005SQL Server 2005non supporti questi operatori, tali query non possono essere eseguite su questi provider di back-end.Because some backend providers, including versions of SQL Server earlier than SQL Server 2005SQL Server 2005, do not support these operators, such queries cannot be executed on these backend providers.

Di seguito sono elencati alcuni degli scenari tipici che potrebbero determinare la presenza degli operatori CROSS APPLY e/o OUTER APPLY nella query di output: una subquery correlata con paging, AnyElement su una subquery correlata o su una raccolta prodotta dalla navigazione, query LINQ che usano metodi di raggruppamento che accettano un selettore elemento, una query nella quale viene specificata in modo esplicito una clausola CROSS APPLY o OUTER APPLY, una query che presenta un costrutto DEREF su un costrutto REF.Some typical scenarios that might lead to the presence of CROSS APPLY and/or OUTER APPLY operators in the output query are the following: a correlated subquery with paging; AnyElement over a correlated subquery or over a collection produced by navigation; LINQ queries that use grouping methods that accept an element selector; a query in which a CROSS APPLY or an OUTER APPLY are explicitly specified; a query that has a DEREF construct over a REF construct.

Più raccolte nella clausola FROMMultiple Collections in the FROM Clause

La clausola FROM può contenere più raccolte separate da virgole.The FROM clause can contain more than one collection separated by commas. In questi casi, si presuppone che le raccolte siano unite in join,In these cases, the collections are assumed to be joined together. come se si trattasse di un CROSS JOIN a n vie.Think of these as an n-way CROSS JOIN.

Nell'esempio seguente, C e D sono raccolte indipendenti, ma c.Names dipende C.In the following example, C and D are independent collections, but c.Names is dependent on C.

FROM C AS c, D AS d, c.Names AS e  

L'esempio precedente rappresenta l'equivalente logico dell'esempio seguente.The previous example is logically equivalent to the following example:

FROM (C AS c JOIN D AS d) CROSS APPLY c.Names AS e

Correlazione sinistraLeft Correlation

Gli elementi nella clausola FROM possono fare riferimento a elementi specificati nelle clausole precedenti.Items in the FROM clause can refer to items specified in earlier clauses. Nell'esempio seguente C e D sono raccolte indipendenti, ma c.Names è dipendente da C:In the following example, C and D are independent collections, but c.Names is dependent on C:

from C as c, D as d, c.Names as e  

Si tratta dell'equivalente logico di:This is logically equivalent to:

from (C as c join D as d) cross apply c.Names as e  

SemanticsSemantics

Dal punto di vista logico, si presuppone che le raccolte nella clausola FROM facciano parte di un cross join a n vie, tranne nel caso di un cross join a una via.Logically, the collections in the FROM clause are assumed to be part of an n-way cross join (except in the case of a 1-way cross join). Gli alias nella clausola FROM vengono elaborati da sinistra verso destra e vengono aggiunti all'ambito corrente per i riferimenti futuri.Aliases in the FROM clause are processed left to right, and are added to the current scope for later reference. Si presuppone che la clausola FROM produca un multiset di righe.The FROM clause is assumed to produce a multiset of rows. Per ogni elemento della clausola FROM sarà presente un campo che rappresenterà un singolo elemento della raccolta in questione.There will be one field for each item in the FROM clause that represents a single element from that collection item.

La clausola FROM produce logicamente un multiset di righe di tipo Row(c, d, e) in cui si presuppone che i campi c, d ed e siano del tipo di elemento C, D e c.Names.The FROM clause logically produces a multiset of rows of type Row(c, d, e) where fields c, d, and e are assumed to be of the element type of C, D, and c.Names.

Entity SQLEntity SQL introduce nell'ambito un alias per ogni elemento della clausola FROM semplice. introduces an alias for each simple FROM clause item in scope. Nel frammento di clausola FROM seguente, ad esempio, i nomi introdotti nell'ambito sono c, d ed e.For example, in the following FROM clause snippet, The names introduced into scope are c, d, and e.

from (C as c join D as d) cross apply c.Names as e  

In Entity SQLEntity SQL (a differenza di Transact-SQLTransact-SQL), la clausola FROM introduce solo gli alias nell'ambito.In Entity SQLEntity SQL (unlike Transact-SQLTransact-SQL), the FROM clause only introduces the aliases into scope. Tutti i riferimenti alle colonne, o proprietà, di tali raccolte devono essere qualificati con l'alias.Any references to columns (properties) of these collections must be qualified with the alias.

Estrazione delle chiavi da query annidatePulling Up Keys from Nested Queries

Non sono supportati determinati tipi di query che richiedono l'estrazione delle chiavi da una query annidata.Certain types of queries that require pulling up keys from a nested query are not supported. Viene ad esempio considerata valida la query seguente:For example, the following query is valid:

select c.Orders from Customers as c   

L'esempio seguente non è invece considerato valido, in quanto la query annidata non contiene chiavi:However, the following query is not valid, because the nested query does not have any keys:

select {1} from {2, 3}  

Vedere ancheSee Also

Riferimento a Entity SQLEntity SQL Reference
Espressioni di queryQuery Expressions
Tipi strutturati nullableNullable Structured Types