Sentencia de selección anidada en SQL Server

389

¿Por qué no funciona lo siguiente?

SELECT name FROM (SELECT name FROM agentinformation)

Supongo que mi comprensión de SQL es incorrecta, porque habría pensado que esto devolvería lo mismo que

SELECT name FROM agentinformation

¿La declaración de selección interna no crea un conjunto de resultados que luego consulta la declaración de selección externa?

Brennan Vincent
fuente

Respuestas:

674

Necesita alias la subconsulta.

SELECT name FROM (SELECT name FROM agentinformation) a  

o para ser más explícito

SELECT a.name FROM (SELECT name FROM agentinformation) a  
Joe Stefanelli
fuente
76
¡Asegúrate de que tu alias sea algo detallado también! Me encanta cuando me pongo a trabajar en una wuery con t1, t2, t3, t4, t5, t6
Doug Chamberlain
2
¿Dónde iría una wherecláusula para la consulta externa?
Coronel Panic el
3
@ColonelPanic: la cláusula WHERE para la consulta externa se agregaría al final.
Joe Stefanelli el
"Correcto, soy un idiota! Gracias, aceptará una vez permitido". Nah Solo ignorante. Como todos nosotros
Lucio Mollinedo
2
Oracle acepta el primero selectsin el alias.
Kjetil S.
49

La respuesta proporcionada por Joe Stefanelli ya es correcta.

SELECT name FROM (SELECT name FROM agentinformation) as a  

Necesitamos hacer un alias de la subconsulta porque una consulta necesita un objeto de tabla que obtendremos al hacer un alias para la subconsulta. Conceptualmente, los resultados de la subconsulta se sustituyen en la consulta externa. Como necesitamos un objeto de tabla en la consulta externa, necesitamos hacer un alias de la consulta interna.

Las declaraciones que incluyen una subconsulta generalmente toman una de estas formas:

  • DONDE expresión [NO] EN (subconsulta)
  • DONDE expresión operador_comparación [CUALQUIER | TODOS] (subconsulta)
  • DONDE EXISTE [NO] (subconsulta)

Busque más reglas de subconsulta y tipos de subconsultas .

Más ejemplos de subconsultas anidadas.

  1. IN / NOT IN: este operador toma el resultado de la consulta interna después de que se ejecuta la consulta interna, que puede tener cero o más valores y la envía a la consulta externa. La consulta externa luego recupera todas las filas coincidentes [operador IN] o no coincidentes [operador NO IN].

  2. ANY - [> ANY o ANY operator toma la lista de valores producidos por la consulta interna y obtiene todos los valores que son mayores que el valor mínimo de la lista. los

ej.> CUALQUIERA (100,200,300), el operador CUALQUIER obtendrá todos los valores mayores que 100.

  1. ALL - [> ALL o ALL operator toma la lista de valores producidos por la consulta interna y obtiene todos los valores que son mayores que el máximo de la lista. los

por ejemplo,> ALL (100,200,300), el operador ALL obtendrá todos los valores mayores que 300.

  1. EXISTA: la palabra clave EXISTA produce un valor booleano [VERDADERO / FALSO]. Esto EXISTE verifica la existencia de las filas devueltas por la subconsulta.
Somnath Muluk
fuente