sábado, 12 de noviembre de 2016

Es muy importante a la hora de hacer consultas MySQL conocer bien cuándo se usa la cláusula WHERE y cuándo HAVING. Cuando uno empieza puede resulta dificultoso el aprendizaje en este punto, ya que algunas personas piensan que se debe utilizar una u otra cláusula, pero eso no es cierto, se pueden usar las dos en la misma sentencia. Espero que con los siguientes ejemplos podáis entender mejor cuando se usa cada una de ellas.
Antes de poner un ejemplo, me gustaría explicar brevemente cuándo se usa cada una de ellas.
WHERE. La cláusula where se utiliza para realizar comparaciones fila por fila.
HAVING. La cláusula having se utiliza, en caso de requerirlo, después de usar GROUP BY que sirve para agrupar por diferentes campos, por tanto having sirve para comparaciones con conjuntos de filas, es decir, cuando los datos mostrados por pantalla son datos calculados y no se encuentran propiamente escritos en la tabla, pudiendo usar funciones como SUM(), AVG(), etc...

Buscar por contenido

Normalmente no querremos ver todos los datos que hemos introducido, sino sólo aquellos que cumplan cierta condición. Esta condición se indica añadiendo un apartado WHERE a la orden "SELECT". Por ejemplo, se podrían ver los datos de una persona a partir de su nombre de la siguiente forma:
SELECT nombre, direccion FROM personas WHERE nombre = 'juan';

Mostrar datos ordenados

Cuando una consulta devuelva muchos resultados, resultará poco legible si éstos se encuentran desordenados. Por eso, será frecuente añadir "ORDER BY" seguido del nombre del campo que se quiere usar para ordenar (por ejemplo "ORDER BY nombre").
Es posible indicar varios campos de ordenación, de modo que se mire más de un criterio en caso de que un campo coincida (por ejemplo "ORDER BY apellidos, nombre").
Si se quiere que alguno de los criterios de ordenación se aplique en orden contrario (por ejemplo, textos de la Z a la A o números del valor más grande al más pequeño), se puede añadir la palabra "DESC" (de "descending", "descendiendo") al criterio correspondiente, como en "ORDER BY precio DESC". Si no se indica esa palabra, se sobreentiende que se quiere obtener los resultados en orden ascendente (lo que indicaría la palabra "ASC", que es opcional).
SELECT nombre, direccion 
FROM personas 
WHERE direccion LIKE '%calle%'

ORDER BY nombre, direccion DESC;

No hay comentarios:

Publicar un comentario