Definición de subconsultas en SQL


Una subconsulta no es más que una consulta que vamos a realizar dentro de otra consulta. Es decir, la consulta padre usa los datos que devuelve la subconsulta para realizar una comparación, visualizar los datos, etc.


Se puede utilizar tres formas de sintaxis para crear una subconsulta:

  • Comparación: Es una expresión y un operador de comparación que compara la expresión con el resultado de la subconsulta.

  • Expresión: Es una expresión por la que se busca el conjunto resultante de la subconsulta.

  • Instrucción sql: Es un select que sigue el mismo formato y reglas que cualquier otra instrucción select. Debe ir entre paréntesis.

Las subconsultas pueden ir:

  • Junto a los campos recuperados de una sentencia select.

SELECT employee_id, first_name, (SELECT department_id FROM job_history jh WHERE jh.employee_id = e.employee_id) departamento FROM employees e.

  • En la cláusula from:

SELECT COUNT (*) FROM (SELECT * FROM employees WHERE department_id = 90).

  • En la cláusula where:

SELECT * FROM job_history WHERE job_id IN (SELECT job_id FROM jobs WHERE job_title = 'Programmer').

  • En la cláusula having:

SELECT department_id "id departamento", COUNT (*) "total empleados" FROM employees GROUP BY department_id HAVING COUNT (*) = (SELECT max (COUNT (*)) FROM employees GROUP BY department_id).


Orden o prioridad de ejecución:

  • Cuando realizamos una consulta que usamos una subconsulta, ejecutamos de primera opcion la subconsulta para obtener los datos y después ejecuta la consulta.

  • La subconsulta se ejecuta por cada fila de la consulta principal.


En una subconsulta:

  • No tiene sentido la cláusula order by, ya que los resultados de una subconsulta se utilizan internamente y no son visibles al usuario.

  • Los nombres de la tabla que aparecen en ella pueden referirse a columnas de la tabla de la consulta principal y se conocen como referencia externa.

  • El resultado de una subconsulta puede ser un valor simple o más de un valor.


Utilización de subconsultas:

  • Para realizar comparaciones.

SELECT department_id, AVG(salary) "salario medio" FROM employees GROUP BY department_id HAVING AVG(salary) > (SELECT AVG(salary) FROM employees).

  • Para realizar tablas temporales para su consulta o comparación.

SELECT COUNT (*) FROM (SELECT * FROM employees WHERE id_departamento = 90).

  • Para crear sentencias dml.

UPDATE employees SET salary = salary + 2000 WHERE job_id IN (SELECT job_id FROM jobs WHERE jobs.job_title = 'Programmer').


Ejemplos Subconsultas:



0 visualizaciones0 comentarios

Entradas Recientes

Ver todo