Subquery o subconsulta
Un subquery es una sentencia SELECT que su salida es utilizada por
otra sentencia SELECT. Un Subquery es una consulta que esta anidado dentro de
una sentencia SELECT, INSERT, UPDATE o DELETE o dentro de otro subquery. Un subquery
puede devolver un conjunto de filas o solo una fila a la consulta padre. Un subquery
Escalar es una consulta que devuelve exactamente un valor: una sola fila con
una sola columna. Subquery escalares pueden ser utilizados en muchos lugares,
en una sentencia SQL donde puede haber una expresión o un valor literal.
Lugares en una consulta donde puede ser utilizado un subquery son:
·
En la Lista SELECT.
·
En la clausula FROM.
·
En la clausula WHERE.
·
En la clausula HAVING.
Un subquery es a menudo referido como
un inner query y la sentencia dentro de la cual aparece es llamada el
outer query. La implementación de subquery en Oracle no tiene niveles de
anidamiento, solo en la clausula WHERE es de 255 como máximo.
Un subquery puede tener cualquiera de las clausula usuales de proyección
y selección. Las siguientes clausulas son requeridas:
·
SELECT
·
FROM
Las siguientes son opcionales:
·
WHERE
·
GROUP BY
·
HAVING
Ejemplos:
-- SUBQUERY EN LA LISTA SELECT
SELECT (SELECT COUNT(*) FROM employees) NO_EMPLEADOS,
(SELECT COUNT(*) FROM
departments) NO_DEPARTAMENTOS,
(SELECT COUNT(*) FROM
countries) NO_PAISES,
(SELECT COUNT(*) FROM
LOCATIONS) NO_LOCALIZACIONES
FROM DUAL;
-- SUBQUERY EN LA CLAUSULA FROM
SELECT *
FROM (SELECT employee_id,
first_name, department_id FROM employees WHERE department_id = 50);
-- SUBQUERY EN LA CLAUSULA WHERE
SELECT *
FROM jobs
WHERE job_id IN (SELECT
DISTINCT job_id FROM job_history);
-- SUBQUERY EN LA CLAUSULA HAVING
SELECT employee_id, first_name, last_name, COUNT(*)
FROM employees
GROUP BY employee_id, first_name, last_name
HAVING COUNT(*) <= (SELECT COUNT(*) FROM DUAL);
-- SUBQUERY EN LA CLAUSULA GROUP BY
NO PUEDE EXISTIR EN ESTA
CLAUSULA PORQUE PARA AGRUPAR DEBEN SER ELEMENTOS
DE LAS TABLAS QUE ESTAN EN LA
CLAUSULA FROM
-- SUBQUERY EN LA CAUSULA ORDER BY
NO SE PUEDE ORDER EN BASE A
UN SUBQUERY POR QUE LO QUE SE ORDENA ES EL RESULTADO
DE UNA COSNSULTA
Comentarios
Publicar un comentario