* * *
A lo largo de estas lecciones se han estudiado dos tipos de consultas SQL que se diferencian claramente por el resultado que se obtiene:
Consultas SQL llanas:
Son las consultas que seleccionan los campos de una tabla indicados en la cláusula SELECT, de los registros filtrados por la cláusula WHERE.
Consultas SQL de cálculo:
Son las consultas que calculan los totales de una tabla indicados en la cláusula SELECT, mediante funciones de totalización (SUM, MAX,...), sobre los registros filtrados por la cláusula WHERE. Estos totales se pueden agrupar por los campos indicados en la cláusula GROUP BY, en cuyo caso, pueden ser filtrados por las condiciones establecidas en la clausula HAVING.
* * *
Cada cláusula SQL esta relacionada o responde a una pregunta de construcción:
- SELECT: ¿Qué datos nos piden?
- FROM: ¿Dónde están los datos?
- WHERE: ¿Qué requisitos deben cumplir los registros?
- GROUP BY: ¿Como deben agruparse los datos?
- HAVING: ¿Qué requisitos deben cumplir los cálculos de totalización?
- ORDER BY: ¿Por que columnas debe ordenarse el resultado?
Para construir una consulta como mínimo deben intervenir las cláusulas SELECT y FROM, el resto dependerá de lo que se quiera obtener, pero en cualquier caso el orden en que cada cláusula aparece en una consulta SQL no puede cambiarse, la cláusula SELECT siempre será la primera, y ORDER BY, si interviene, siempre será la última.
En general una consulta SQL tiene esta forma:
- Código: Seleccionar todo
select CAMPO_S1, ... , CAMPO_SN
from TABLA_1, ... , TABLA_N
where CONDICIONES_WHERE
group by CAMPO_G1, ... , CAMPO_GN
having CONDICIONES_HAVING
order by CAMPO_O1, ... , CAMPO_ON
En la cláusula SELECT se establecen las lista de campos que mostrará el resultado de la consulta, poniendo DISTINCT precediendo a la lista de campos se eliminan posibles registros duplicados que el resultado pueda devolver. Así mismo podemos rebautizar las columnas de resultado asignando un alias a cada campo.
En la cláusula FROM se establece la fuente de los datos, las tablas que intervienen en la consulta.
En la cláusula GROUP BY se establece los grupos de datos por los que se quiere obtener totales, no tendría sentido usar esta cláusula si no se indican cálculos de totalización (SUM , MAX, AVG , ...) en la cláusula SELECT.
La condiciones establecidas en la cláusula WHERE tienen como propósito filtrar registros de la tabla, mientras que las condiciones de la cláusula HAVING filtran filas de resultados condicionando únicamente los datos calculados por las funciones de totalización (SUM , MAX, AVG , ...). A efectos prácticos para este curso se considera que la cláusula HAVING sólo puede intervenir en una consulta SQL si lo hace la cláusula GROUP BY, de lo contrario no tiene sentido.
La cláusula ORDER BY permite finalmente ordenar el resultado por diferentes columnas, y en sentido ascendente o descendente, antes de ser presentado.
* * *
Si usted ha llegado hasta aquí le animo a que continué con el curso. En las siguientes lecciones se va a abordar lo que quizá es el mayor potencial de las BD relacionales: la reunión de datos. Usted aprenderá a trabajar con más de una tabla en una misma consulta SQL.
* * *
Ejercicio
Supongamos que usted tiene un amigo que es jugador de póquer, el pobre no sabe si sus ganancias en el juego son positivas o negativas porque no lleva un control sobre ello, por lo que usted se ofrece a gestionarle las ganancias. Le dice a su amigo que cuando acabe una sesión de juego le comunique a usted el dinero que ha ganado o perdido, entendiendo perdida como una ganancia o número en negativo.
Diseñe una tabla, es decir, los campos y tipo de dato de cada campo, para poder registrar la información que su amigo le facilita, y mediante SQL pueda responder en cualquier momento a las siguientes preguntas:
¿Cuales son las ganancias actuales?
¿Cuanto dinero se ganó durante el mes de marzo de 2009?
Una vez diseñada la tabla construya las consultas SQL que responden a cada una de estas preguntas.
* * *