Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment fonctionne la sous-requête dans l'instruction select dans Oracle

C'est simple-

SELECT empname,
       empid,
       (SELECT COUNT (profileid)
          FROM profile
         WHERE profile.empid = employee.empid)
           AS number_of_profiles
  FROM employee;

C'est encore plus simple lorsque vous utilisez une jointure de table comme celle-ci :

  SELECT e.empname, e.empid, COUNT (p.profileid) AS number_of_profiles
    FROM employee e LEFT JOIN profile p ON e.empid = p.empid
GROUP BY e.empname, e.empid;

Explication de la sous-requête :

Essentiellement, une sous-requête dans un select obtient une valeur scalaire et la transmet à la requête principale. Une sous-requête dans select n'est pas autorisé à passer plus d'une ligne et plus d'une colonne, ce qui est une restriction. Ici, nous passons un count à la requête principale, qui, comme nous le savons, ne serait toujours qu'un nombre - une valeur scalaire. Si une valeur n'est pas trouvée, la sous-requête renvoie null à la requête principale. De plus, une sous-requête peut accéder aux colonnes du from clause de la requête principale, comme indiqué dans ma requête où employee.empid est passé de la requête externe à la requête interne.

Modifier :

Lorsque vous utilisez une sous-requête dans un select clause, Oracle la traite essentiellement comme une jointure gauche (vous pouvez le voir dans le plan d'explication de votre requête), la cardinalité des lignes étant juste une à droite pour chaque ligne à gauche.

Explication pour la jointure gauche

Une jointure à gauche est très pratique, surtout lorsque vous souhaitez remplacer le select sous-requête en raison de ses restrictions. Il n'y a aucune restriction ici sur le nombre de lignes des tables de part et d'autre du LEFT JOIN mot-clé.

Pour plus d'informations, lisez Oracle Docs sur les sous-requêtes et la jointure gauche ou la jointure externe gauche.