sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo funciona la subconsulta en la declaración de selección en Oracle?

Es simple-

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

Es aún más simple cuando usa una combinación de tabla como esta:

  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;

Explicación de la subconsulta:

Esencialmente, una subconsulta en un select obtiene un valor escalar y lo pasa a la consulta principal. Una subconsulta en select No se permite pasar más de una fila y más de una columna, lo cual es una restricción. Aquí, estamos pasando un count a la consulta principal, que, como sabemos, siempre sería solo un número, un valor escalar. Si no se encuentra un valor, la subconsulta devuelve null a la consulta principal. Además, una subconsulta puede acceder a columnas desde from cláusula de la consulta principal, como se muestra en mi consulta donde employee.empid se pasa de la consulta externa a la consulta interna.

Editar :

Cuando usa una subconsulta en un select Oracle esencialmente lo trata como una combinación izquierda (puede ver esto en el plan de explicación de su consulta), con la cardinalidad de las filas siendo solo una a la derecha para cada fila a la izquierda.

Explicación de la combinación izquierda

Una combinación izquierda es muy útil, especialmente cuando desea reemplazar select subconsulta debido a sus restricciones. Aquí no hay restricciones sobre el número de filas de las tablas a ambos lados de LEFT JOIN palabra clave.

Para obtener más información, lea Oracle Docs sobre subconsultas y combinación izquierda o combinación externa izquierda.