Oracle
 sql >> Database >  >> RDS >> Oracle

Come funziona Subquery nell'istruzione select in Oracle

È semplice-

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

È ancora più semplice quando usi un join di tabella come questo:

  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;

Spiegazione per la sottoquery:

In sostanza, una sottoquery in un select ottiene un valore scalare e lo passa alla query principale. Una sottoquery in select non è consentito passare più di una riga e più di una colonna, il che è una restrizione. Qui stiamo passando un count alla query principale, che, come sappiamo, sarebbe sempre solo un numero, un valore scalare. Se non viene trovato un valore, la sottoquery restituisce null alla domanda principale. Inoltre, una sottoquery può accedere alle colonne da from clausola della query principale, come mostrato nella mia query dove employee.empid viene passato dalla query esterna alla query interna.

Modifica :

Quando utilizzi una sottoquery in un select clausola, Oracle essenzialmente lo tratta come un join sinistro (puoi vederlo nel piano di spiegazione della tua query), con la cardinalità delle righe che è solo una a destra per ogni riga a sinistra.

Spiegazione per il join sinistro

Un left join è molto utile, specialmente quando vuoi sostituire il select subquery a causa delle sue restrizioni. Non ci sono restrizioni qui sul numero di righe delle tabelle in entrambi i lati di LEFT JOIN parola chiave.

Per ulteriori informazioni, leggi Oracle Docs su subquery e left join o left outer join.