Declaración de selección anidada en SQL Server
¿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 SELECT externa?
Necesita asignar un alias a 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
La respuesta dada por Joe Stefanelli ya es correcta.
SELECT name FROM (SELECT name FROM agentinformation) as a
Necesitamos crear un alias para la subconsulta porque una consulta necesita un objeto de tabla que obtendremos al crear 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, debemos crear un alias para la consulta interna.
Las declaraciones que incluyen una subconsulta suelen adoptar una de estas formas:
- DONDE expresión [NO] EN (subconsulta)
- DONDE expresión operador_comparación [CUALQUIER | TODOS] (subconsulta)
- DONDE [NO] EXISTE (subconsulta)
Busque más reglas de subconsulta y tipos de subconsulta .
Más ejemplos de subconsultas anidadas.
IN / NOT IN: este operador toma el resultado de la consulta interna después de que se ejecuta la consulta interna, que puede ser cero o más valores, y la envía a la consulta externa. Luego, la consulta externa recupera todas las filas coincidentes [operador IN] o no coincidentes [operador NO IN].
CUALQUIER – [>CUALQUIER o CUALQUIER operador toma la lista de valores producida por la consulta interna y recupera todos los valores que son mayores que el valor mínimo de la lista. El
por ejemplo >ANY(100,200,300), el operador ANY recuperará todos los valores mayores que 100.
- TODOS: el operador [>TODOS o TODOS toma la lista de valores producida por la consulta interna y recupera todos los valores que son mayores que el máximo de la lista. El
por ejemplo, >ALL(100,200,300), el operador ALL recuperará todos los valores mayores que 300.
- EXISTE: la palabra clave EXISTS produce un valor booleano [VERDADERO/FALSO]. Este EXISTS comprueba la existencia de las filas devueltas por la subconsulta.