Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Especifica a coleção usada em instruções SELECT .
Sintaxe
FROM expression [ ,...n ] AS C
Argumentos
expression
Qualquer expressão de consulta válida que produz uma coleção a ser usada como fonte em uma SELECT instrução.
Observações
Uma FROM cláusula é uma lista separada por vírgulas de um ou mais FROM itens de cláusula. A FROM cláusula pode ser usada para especificar uma ou mais fontes para uma SELECT instrução. A forma mais simples de uma FROM cláusula é uma única expressão de consulta que identifica uma coleção e um alias usado como a origem em uma SELECT instrução, conforme ilustrado no exemplo a seguir:
FROM C as c
Itens da cláusula FROM
Cada FROM item de cláusula refere-se a uma coleção de origem na consulta SQL da entidade. O SQL da entidade dá suporte às seguintes classes de itens de cláusula: itens de FROM cláusula simples FROM , JOIN FROM itens de cláusula e APPLY FROM itens de cláusula. Cada um desses FROM itens de cláusula é descrito com mais detalhes nas seções a seguir.
Item da cláusula SIMPLE FROM
O item de cláusula mais simples FROM é uma única expressão que identifica uma coleção e um alias. A expressão pode ser simplesmente um conjunto de entidades ou uma subconsulta ou qualquer outra expressão que seja um tipo de coleção. O que se segue é um exemplo:
LOB.Customers as c
A especificação de alias é opcional. Uma especificação alternativa do item acima da cláusula pode ser a seguinte:
LOB.Customers
Se nenhum alias for especificado, o SQL da Entidade tentará gerar um alias com base na expressão de coleção.
Item da cláusula JOIN FROM
Um JOIN FROM item de cláusula representa uma junção entre dois FROM itens de cláusula. O SQL de entidade dá suporte a junções cruzadas, junções internas, junções externas à esquerda e à direita e junções externas completas. Todas essas junções têm suporte semelhante à maneira como elas têm suporte no Transact-SQL. Assim como no Transact-SQL, os dois FROM itens de cláusula envolvidos no JOIN devem ser independentes. Ou seja, eles não podem ser correlacionados. Um CROSS APPLY ou OUTER APPLY pode ser usado para esses casos.
Junções cruzadas
Uma CROSS JOIN expressão de consulta produz o produto Cartesian das duas coleções, conforme ilustrado no exemplo a seguir:
FROM C AS c CROSS JOIN D as d
Junções internas
Um INNER JOIN produz um produto Cartesiano restrito das duas coleções, conforme ilustrado no exemplo a seguir:
FROM C AS c [INNER] JOIN D AS d ON e
A expressão de consulta anterior processa uma combinação de cada elemento da coleção à esquerda emparelhada com cada elemento da coleção à direita, onde a ON condição é verdadeira. Se nenhuma ON condição for especificada, um INNER JOIN degenera para um CROSS JOIN.
Junções externas à esquerda e junções externas à direita
Uma OUTER JOIN expressão de consulta produz um produto cartesiano restrito das duas coleções, conforme ilustrado no exemplo a seguir:
FROM C AS c LEFT OUTER JOIN D AS d ON e
A expressão de consulta anterior processa uma combinação de cada elemento da coleção à esquerda emparelhada com cada elemento da coleção à direita, onde a ON condição é verdadeira. Se a ON condição for falsa, a expressão ainda processará uma única instância do elemento à esquerda emparelhada com o elemento à direita, com o valor nulo.
Um RIGHT OUTER JOIN pode ser expresso de maneira semelhante.
Junções externas completas
Um explícito FULL OUTER JOIN produz um produto Cartesiano restrito das duas coleções, conforme ilustrado no exemplo a seguir:
FROM C AS c FULL OUTER JOIN D AS d ON e
A expressão de consulta anterior processa uma combinação de cada elemento da coleção à esquerda emparelhada com cada elemento da coleção à direita, onde a ON condição é verdadeira. Se a ON condição for falsa, a expressão ainda processará uma instância do elemento à esquerda emparelhada com o elemento à direita, com o valor nulo. Ele também processa uma instância do elemento à direita emparelhada com o elemento à esquerda, com o valor nulo.
Observação
Para preservar a compatibilidade com o SQL-92, em Transact-SQL a palavra-chave OUTER é opcional. Portanto, LEFT JOINe FULL JOINRIGHT JOINsão sinônimos para LEFT OUTER JOIN, RIGHT OUTER JOINe FULL OUTER JOIN.
Item da cláusula APPLY
O SQL da entidade dá suporte a dois tipos de APPLY: CROSS APPLY e OUTER APPLY.
Um CROSS APPLY produz um emparelhamento exclusivo de cada elemento da coleção à esquerda com um elemento da coleção produzido avaliando a expressão à direita. Com um CROSS APPLY, a expressão à direita depende funcionalmente do elemento à esquerda, conforme ilustrado no seguinte exemplo de coleção associada:
SELECT c, f FROM C AS c CROSS APPLY c.Assoc AS f
O comportamento é semelhante à lista de CROSS APPLY junção. Se a expressão à direita for avaliada como uma coleção vazia, ela CROSS APPLY não produzirá emparelhamentos para essa instância do elemento à esquerda.
Um OUTER APPLY se assemelha a um CROSS APPLY, exceto que um emparelhamento ainda é produzido mesmo quando a expressão à direita é avaliada como uma coleção vazia. Veja a seguir um exemplo de:OUTER APPLY
SELECT c, f FROM C AS c OUTER APPLY c.Assoc AS f
Observação
Ao contrário do Transact-SQL, não há necessidade de uma etapa não mais explícita no Entity SQL.
Observação
CROSS e OUTER APPLY operadores foram introduzidos no SQL Server 2005. Em alguns casos, o pipeline de consulta pode produzir Transact-SQL que contém CROSS APPLY e/ou OUTER APPLY operadores. Como alguns provedores de back-end, incluindo versões do SQL Server anteriores ao SQL Server 2005, não dão suporte a esses operadores, essas consultas não podem ser executadas nesses provedores de back-end.
Alguns cenários típicos que podem levar à presença de CROSS APPLY e/ou OUTER APPLY operadores na consulta de saída são os seguintes: uma subconsulta correlacionada com paginação; AnyElement sobre uma subconsulta correlacionada ou sobre uma coleção produzida pela navegação; Consultas LINQ que usam métodos de agrupamento que aceitam um seletor de elemento; uma consulta na qual um CROSS APPLY ou um OUTER APPLY é especificado explicitamente; uma consulta que tem um DEREF constructo sobre um REF constructo.
Várias coleções na cláusula FROM
A FROM cláusula pode conter mais de uma coleção separada por vírgulas. Nesses casos, supõe-se que as coleções sejam unidas. Pense nisso como um CROSS JOIN n-way.
No exemplo a seguir, C e D são coleções independentes, mas c.Names dependem Cde .
FROM C AS c, D AS d, c.Names AS e
O exemplo anterior é logicamente equivalente ao seguinte exemplo:
FROM (C AS c JOIN D AS d) CROSS APPLY c.Names AS e
Correlação à esquerda
Os itens na FROM cláusula podem se referir a itens especificados em cláusulas anteriores. No exemplo a seguir, C e D são coleções independentes, mas c.Names dependem de C:
from C as c, D as d, c.Names as e
Isso é logicamente equivalente a:
from (C as c join D as d) cross apply c.Names as e
Semântica
Logicamente, as coleções na FROM cláusula são consideradas parte de uma junção ncruzada (exceto no caso de uma junção cruzada de 1 via). Os aliases na FROM cláusula são processados da esquerda para a direita e são adicionados ao escopo atual para referência posterior. Supõe-se FROM que a cláusula produza um conjunto múltiplo de linhas. Haverá um campo para cada item na FROM cláusula que representa um único elemento desse item de coleção.
A FROM cláusula produz logicamente um multiconjunto de linhas do tipo Row(c, d, e) em que os campos c, d e e são considerados do tipo de elemento de C, De c.Names.
O SQL da entidade apresenta um alias para cada item de cláusula simples FROM no escopo. Por exemplo, no snippet de cláusula FROM a seguir, os nomes introduzidos no escopo são c, d e e.
from (C as c join D as d) cross apply c.Names as e
No Entity SQL (ao contrário de Transact-SQL), a FROM cláusula introduz apenas os aliases no escopo. Todas as referências a colunas (propriedades) dessas coleções devem ser qualificadas com o alias.
Puxando as chaves de consultas aninhadas
Não há suporte para determinados tipos de consultas que exigem o pull de chaves de uma consulta aninhada. Por exemplo, a consulta a seguir é válida:
select c.Orders from Customers as c
No entanto, a consulta a seguir não é válida, pois a consulta aninhada não tem chaves:
select {1} from {2, 3}