SQL - script - subqueries
From Ibbddunq
Concepto
Básicamente es lo que ya saben de AR: puedo hacer jugar el resultado de una consulta en otra, combinando operaciones.
Muchas veces se hace innecesario por la sintaxis básica de la sentencia SELECT de SQL, que permite hacer muchos joins, una selección (que se optimiza, entonces es como si fueran varias) y una proyección todo en una sola sentencia, y además lo del nombre compuesto de atributo evita la necesidad de renombrado.
Por otro lado, aparecen casos en donde la técnica de meter una consulta adentro de otra es muy útil. Veamos algunos.
Subqueries en el FROM
Una fácil: UNION ordenado, p.ej. quiero las funciones donde aparecen osos o leones ordenadas por fecha.
select * from (select diaFn, horaFn from formaParte where nomActo = 'osos' union select diaFn, horaFn from formaParte where nomActo = 'leones') order by diaFn, horaFn;
Si quiero usar funciones agrupadas sobre grupos, entonces mi tabla es la de grupos
-- la duracion de la funcion mas larga select max(duracionFuncion) from (select diaFn, horaFn, sum(duracion) duracionFuncion from formaParte group by diaFn, horaFn) as duracionPorFuncion);
Repaso de situaciones donde puede ser útil
- en el FROM
- UNION ordenado
- cuando quiero hacer un join con una tabla agrupada
- tabla de 1x1 en comparaciones en el WHERE
- IN con tabla de 1 atributo
- NOT EXISTS vs NOT IN, queries correlacionados