Cómo se ejecuta un SELECT

SQL, mySQL, postgreSQL y otros motores
Responder
Avatar de Usuario
Mauricio
Desarrollador de Clarion
Mensajes: 1125
Registrado: Dom Feb 06, 2011 9:34 am
Ubicación: España
Contactar:

Cómo se ejecuta un SELECT

Mensaje por Mauricio » Mar Feb 22, 2011 8:00 am

Para los que trabajamos con motores ejecutar un select es una de las tareas más comunes. Acostumbramos a escribirlos en forma automática sin pensar demasiado en cómo el motor se encargará de resolver la consulta. Sin embargo, si analizamos un poco en cómo lo hace podemos evitar algunos errores comunes.
Vamos a un select común sobre la tabla ARTICULOS.

SELECT CodigoCliente, year(FechaFactura) AS Anio, count(*) AS Numero
FROM FACTURAS
WHERE Vendedor = 51
GROUP BY CodigoCliente, year(FechaFactura)
HAVING Count(*) > 1
ORDER BY CodigoCliente, Anio

He resaltado en azul las cláusulas más comunes.
A la hora de resolver este query, el motor lo hace en el siguiente orden:
1) FROM
2) WHERE
3) GROUP BY
4) HAVING
5) SELECT
6) ORDER BY

En definitiva, lo que hace el motor es esto:
FROM Facturas
WHERE Vendedor = 51
GROUP BY CodigoCliente, year(FechaFactura)
HAVING Count(*) > 1
SELECT CodigoCliente, year(FechaFactura) AS Anio, count(*) AS Numero
ORDER BY CodigoCliente, Anio

Acá es interesante notar algo: al momento de agrupar debemos repetir la función year(FechaFactura), definida en el select y a la cual le asignamos el alias Anio. Sin embargo no fue necesario hacer lo mismo al momento de ordenar el resultado donde ahí sí podemos usar el Anio. A primera vista parece no tener sentido pero cuando comprendemos el orden de ejecución vemos que el GROUP BY se ejecuta antes que el SELECT y en ese momento el alias aún no está definido.

Espero que les haya parecido interesante.

Saludos.
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog


Responder

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 24 invitados