SQL - script - subqueries

From Ibbddunq

Revision as of 01:20, 28 April 2009 by Carlos (Talk | contribs)

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
Personal tools