SUBQUERY
El subquery es la misma sentencia del SELECT, solo que en vez de poner la condición como tal colocaremos un paréntesis en donde llamaremos otra sentencia SELECT; esto se denomina SELECT anidado. Su sentencia general es:
A continuación varios ejemplos:
1. SELECT valor_pagado FROM tadm_det_pago WHERE num_pago=1;
Nos traerá lo siguiente:
/*trae el valor de 300000*/
2. SELECT valor_pagado FROM tadm_det_pago WHERE valor_pagado<(SELECT valor_pagado FROM tadm_det_pago WHERE num_pago=1);
Esta sentencia esta ajustada a la estructura SUBQUERY y nos traera la siguiente:
/*trae valores menores a la condicion del selecto anidado; en este caso menor a 300000*/
3. SELECT avg(valor_pagado) FROM tadm_det_pago;
Esta sentencia nos dará:
/*promedio de los pagos realizados*/
SELECT num_pago, valor_pagado FROM tadm_det_pago WHERE valor_pagado<>(SELECT avg(valor_pagado) FROM tadm_det_pago);
Nuevamente la ajustamos a un SUBQUERY y nos mostrará:
/*consulta que nos trae el numero de pago y el valor pagado siempre y cuando el pago sea diferente que el promedio de todos los pagos realizados*/
5. SELECT num_pago, valor_pagado FROM tadm_det_pago WHERE valor_pagado>(SELECT avg(valor_pagado) FROM tadm_det_pago);
Nos traerá:
EJERCICIO:
Hacer una consulta que traiga aquellos valores pagados que sean mayores al minimo valor pagado en la tabla detalle.
SELECT num_pago, valor_pagado FROM tadm_det_pago WHERE valor_pagado>(SELECT min(valor_pagado) FROM tadm_det_pago);
Ahora utilizaremos la siguiente consulta:
SELECT num_pago, valor_pagado FROM tadm_det_pago WHERE valor_pagado<(SELECT min(valor_pagado) FROM tadm_det_pago);
Al probarla no nos mostrará ningún campo debido a que no hay ni un solo valor pagado que sea menor al menor.
Probemos con esta sentencia:
SELECT num_pago, valor_pagado FROM tadm_det_pago WHERE valor_pagado<(SELECT max(valor_pagado) FROM tadm_det_pago);
/*trae los valores menores al maximo valor pagado*/
EJERCICIO:
Hacer una consulta que traiga los maximos valores pagados agrupado por concepto y cuyo promedio sea superior al promedio de los pagos.
SELECT num_pago, max(valor_pagado) FROM tadm_det_pago GROUP BY num_pago HAVING (avg(valor_pagado))>(SELECT avg(valor_pagado) FROM tadm_det_pago);
Nos traerá lo siguiente:
No hay comentarios:
Publicar un comentario