web-dev-qa-db-fra.com

Instruction select imbriquée dans SQL Server

Pourquoi les suivants ne fonctionnent pas?

SELECT name FROM (SELECT name FROM agentinformation)

Je suppose que ma compréhension de SQL est fausse, car j’aurais pensé que cela retournerait la même chose que

SELECT name FROM agentinformation

L'instruction de sélection interne ne crée-t-elle pas un ensemble de résultats que l'instruction SELECT externe interroge ensuite?

350
Brennan Vincent

Vous devez aliaser la sous-requête.

SELECT name FROM (SELECT name FROM agentinformation) a  

ou pour être plus explicite

SELECT a.name FROM (SELECT name FROM agentinformation) a  
608
Joe Stefanelli

Réponse fourni par Joe Stefanelli est déjà correct.

SELECT name FROM (SELECT name FROM agentinformation) as a  

Nous devons créer un alias de sous-requête car la requête a besoin d'un objet table que nous obtiendrons en créant un alias en sous-requête. Conceptuellement, les résultats de la sous-requête sont substitués dans la requête externe. Comme nous avons besoin d'un objet table dans une requête externe, nous devons créer un alias de requête interne.

Les instructions qui incluent une sous-requête prennent généralement l'un des formats suivants:

  • WHERE expression [NOT] IN (sous-requête)
  • WHERE expression compare_operator [ANY | ALL] (sous-requête)
  • O [NOT] EXISTS (sous-requête)

Recherchez d'autres règles de sous-requête et types de sous-requête .

Plus d'exemples de sous-requête imbriquée.

  1. IN/NOT IN - Cet opérateur prélève la sortie de la requête interne après exécution de la requête interne (valeur pouvant être égale à zéro ou plusieurs valeurs) et l'envoie à la requête externe. La requête externe extrait ensuite toutes les lignes correspondantes [opérateur IN] ou non correspondantes [opérateur NOT IN].

  2. TOUT - [> TOUT ou TOUT opérateur prend la liste des valeurs générées par la requête interne et extrait toutes les valeurs supérieures à la valeur minimale de la liste. le

par exemple. > ANY (100,200,300), l'opérateur ANY récupère toutes les valeurs supérieures à 100.

  1. ALL - [> L'opérateur ALL ou ALL prend la liste des valeurs générées par la requête interne et extrait toutes les valeurs supérieures au maximum de la liste. le

par exemple. > ALL (100,200,300), l'opérateur ALL récupérera toutes les valeurs supérieures à 300.

  1. EXISTS - Le mot-clé EXISTS produit une valeur booléenne [TRUE/FALSE]. Cet EXISTS vérifie l'existence des lignes renvoyées par la sous-requête.
38
Somnath Muluk