Instrução de seleção aninhada no SQL Server


388

Por que o seguinte não funciona?

SELECT name FROM (SELECT name FROM agentinformation)

Acho que meu entendimento do SQL está errado, porque eu pensaria que isso retornaria a mesma coisa que

SELECT name FROM agentinformation

A instrução de seleção interna não cria um conjunto de resultados que a instrução externa SELECT consulta?

Respostas:


673

Você precisa alias a subconsulta.

SELECT name FROM (SELECT name FROM agentinformation) a  

ou para ser mais explícito

SELECT a.name FROM (SELECT name FROM agentinformation) a  

76
Verifique se o seu alias também é um pouco detalhado! Eu amo quando eu começar a trabalhar em um wuery com T1, T2, T3, T4, T5, T6
Doug Chamberlain

2
Onde uma wherecláusula iria para a consulta externa?
Coronel Panic

3
@ColonelPanic: A cláusula WHERE para a consulta externa seria abordada no final.
18712 Joe

"Certo, eu sou um idiota! Obrigado, aceitarei uma vez permitido." Nah. Apenas ignorante. Como todos nós.
Lucio Mollinedo

2
O Oracle aceita o primeiro selectsem o alias.
precisa

49

A resposta fornecida por Joe Stefanelli já está correta.

SELECT name FROM (SELECT name FROM agentinformation) as a  

Precisamos fazer um alias da subconsulta porque uma consulta precisa de um objeto de tabela que obteremos ao criar um alias para a subconsulta. Conceitualmente, os resultados da subconsulta são substituídos na consulta externa. Como precisamos de um objeto de tabela na consulta externa, precisamos criar um alias da consulta interna.

Instruções que incluem uma subconsulta geralmente assumem uma destas formas:

  • WHERE expressão [NOT] IN (subconsulta)
  • WHERE expressão reference_operator [ANY | ALL] (subconsulta)
  • ONDE EXISTE [NÃO] (subconsulta)

Verifique se há mais regras de subconsulta e tipos de subconsulta .

Mais exemplos de subconsultas aninhadas.

  1. IN / NOT IN - Este operador obtém a saída da consulta interna após a consulta interna ser executada, que pode ter zero ou mais valores, e a envia para a consulta externa. A consulta externa busca todas as linhas correspondentes [operador IN] ou linhas não correspondentes [operador NOT IN].

  2. ANY - [> QUALQUER operador ANY ou ANY pega a lista de valores produzidos pela consulta interna e busca todos os valores maiores que o valor mínimo da lista. o

por exemplo,> QUALQUER (100.200.300), o operador QUALQUER buscará todos os valores maiores que 100.

  1. ALL - [> O operador ALL ou ALL pega a lista de valores produzidos pela consulta interna e busca todos os valores maiores que o máximo da lista. o

por exemplo,> ALL (100,200,300), o operador ALL buscará todos os valores maiores que 300.

  1. EXISTS - A palavra-chave EXISTS produz um valor booleano [TRUE / FALSE]. Isso EXISTA verifica a existência das linhas retornadas pela subconsulta.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.