coge la información y corre

Curiosidad en la sintaxis del SELECT

27 de Octubre del 2008 Escrito por Alex Barros

Hace poco descubrí una curiosidad de SQL símplemente revisando la documentación del SELECT. Por eso creo que es interesante repasar la sintaxis oficial, para que no se nos escape nada.

  1. SELECT
  2.     [ALL | DISTINCT | DISTINCTROW ]
  3.       [HIGH_PRIORITY]
  4.       [STRAIGHT_JOIN]
  5.       [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
  6.       [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
  7.     select_expr, …
  8.     [FROM table_references
  9.     [WHERE where_condition]
  10.     [GROUP BY {col_name | expr | position}
  11.       [ASC | DESC], … [WITH ROLLUP]]
  12.     [HAVING where_condition]
  13.     [ORDER BY {col_name | expr | position}
  14.       [ASC | DESC], …]
  15.     [LIMIT {[offset,] row_count | row_count OFFSET offset}]
  16.     [PROCEDURE procedure_name(argument_list)]
  17.     [INTO OUTFILE ‘file_name’ export_options
  18.       | INTO DUMPFILE ‘file_name’
  19.       | INTO var_name [, var_name]]
  20.     [FOR UPDATE | LOCK IN SHARE MODE]]

La curiosidad

Lo que yo desconocía es que es posible ordenar los resultados por dos campos o más. Es decir, hacer la ordenación en función de varios parámetros.

Un ejemplo:

  1. SELECT a,b,c FROM mi_tabla WHERE a > 100 ORDER BY b,c

En este Select, los resultados son ordenados según b y c de la mejor forma posible. Puede que ni b ni c queden ordenados estrictamente, sinó que adoptan las mejores posiciones para estar ordenados por ambos a la vez.

Yendo más lejos aún, podemos especificar campo a campo si queremos que se ordene ascendentemente o descendientemente, combinando varios criterios.

  1. SELECT a,b,c FROM mi_tabla WHERE a > 100 ORDER BY b ASC,c DESC

Categorias: MySQL |

Aunque la mona se vista de seda, siempre escribe su comentario

Hay 2 comentarios, pero nos falta el tuyo

hanok Ha dicho:

Buenas, solo como aclaración (ya que tal y como lo comentas puede parecer que la ordenación es aleatoria), no es que no queden ordenados estrictamente sino que se ordenará por b y, para cada valor de b, se ordena por c. Es decir:

b c
—————-
1 A
1 B
1 C
2 A
2 B

Un saludote ;)

Alex Barros Ha dicho:

Gracias por la aclaración, hanok. No había reparado en el algoritmo concreto de ordenación, símplemente lo había probado sobre una tabla de prueba, y había notado que los resultados quedaban ordenados por ambos al mismo tiempo.

Realmente era una característica que necesitaba urgentemente, así que al ver que funcionaba la emoción me impidió ir más allá u_u

del.icio.us meneame.net RSS

Buscar:

Bicivalencia Localiza las estaciones de Valenbisi, servicio público de bicicletas en Valencia, España. Ver más Gpsia Descubre y comparte rutas por todo el mundo, tomadas con GPS. Ver más Imaset Edita tus imágenes de Wordpress con este sencillo plugin. Ver más

¡Mi música es tuya!

Digo yo que...

Mis fotos de Flickr

Entradas Recientes

Meta:

Respeta el copyleft

,