Sunteți pe pagina 1din 8

Unidad 4

Ordenacin de Datos

[MySQL Bsico]
De Intecap-TICS
[Esta Unidad describe por optimizar las consultas utilizando condiciones que permiten mostrar determinadas filas o columnas; los Objetivos de la Unidad son adquirir las competencias de los siguientes contenidos.]

Unidad 4

MySQL Bsico
Ordenacin de la tabla RESULTADO Siempre que necesitemos visualizar varias filas, normalmente ser aconsejable obtener el resultado siguiendo una secuencia de filas determinada. Esto puede realizarse incluyendo una clusula ORDER BY en la sentencia SELECT. Esta unidad presentar cinco consultas-ejemplo que demuestran la simplicidad y flexibilidad de la clusula ORDER BY. Antes de presentar las consultas-ejemplo se ha de destacar un punto muy importante: el proceso de ejecucin de la sentencia SELECT identifica una tabla que constituye la salida visualizada. Llamemos a esta tabla la tabla resultado. Con frecuencia, esta tabla consiste simplemente en una sola columna y/o una nica fila. Sin embargo, se considera como tabla. El contenido de la tabla resultado deriva de la tabla especificada en la clusula FROM, pero es una tabla diferente. Destacamos con especial nfasis este punto, que por otra parte es bastante obvio, porque la ordenacin slo se aplica a la tabla resultado. Esta tabla es una tabla temporal y no puede ser grabada con ninguna sentencia del SQL. Desaparece cuando se ejecuta la siguiente orden del SQL. (Algunos productos Query Browser tienen herramientas para dar permisos a determinados usuarios para guardar la tabla resultado, pero es poco til guardar resultados obtenidos, considerando que la actualizacin de tablas no se aplica a tablas temporales, MySQL no cuenta con un nombre de sentencia especifica para llevar a cabo esta operacin debido a SQL es set-at-time). El punto clave es que no podemos hacer suposiciones sobre la secuencia de la tabla base especificada en la clusula FROM. Como ya se mencion en la unidad anterior, esta tabla permanente no tiene una secuencia de filas propia. Esto no vara cuando realizamos una consulta que contiene la clusula ORDER BY. LA CLAUSULA ORDER BY La primera consulta-ejemplo muestra el uso de la clusula ORDER BY para ordenar la tabla resultado por una columna simple. Hay que tener en cuenta que esta clusula es simplemente un apndice de la sentencia SELECT estndar, tal y como se describa en la unidad anterior. Consulta-ejemplo 4.1: Visualizar toda la tabla CURSO. Ordenar la salida por los valores CTARIFA. mysql> SELECT * -> FROM CURSO -> ORDER BY CTARIFA;

MySQL es Software Libre

+-----+----------------------+-------------------------+------+---------+-------+ | CNO | CNOMBRE | CDESCP | CRED | CTARIFA | CDEPT | +-----+----------------------+-------------------------+------+---------+-------+ | P44 | SOLIPSISMO | PARA MI MISMO | 6 | 0.00 | PHIL | | C33 | MATEMAT. DISCRETAS | ABSOLUTAMENTE NECESARIO | 3 | 0.00 | CIS | | T33 | HEDONISMO | PARA SANOS | 3 | 0.00 | THEO | | C44 | CIRCUITOS DIGITALES | AH HA! | 3 | 0.00 | CIS | | P22 | RACIONALISMO | PARA USUARIOS CIS | 3 | 50.00 | PHIL | | C22 | ESTRUC. DE DATOS | MUY UTIL | 3 | 50.00 | CIS | | T12 | FUNDAMENTALISMO | PARA DESCUIDADOS | 3 | 90.00 | THEO | | P11 | EMPIRISMO | VER PARA CREER | 3 | 100.00 | PHIL | | C55 | ARQUIT. COMPUTADORAS | MAQ. DE VON NEUMAN | 3 | 100.00 | CIS | | C11 | INTROD. A LOS CC | PARA NOVATOS | 3 | 100.00 | CIS | | T11 | ESCOLASTICISMO | PARA BEATOS | 3 | 150.00 | THEO | | P33 | EXISTENCIALISMO | PARA USUARIOS CIS | 3 | 200.00 | PHIL | | T44 | COMUNISMO | PARA AVAROS | 6 | 200.00 | THEO | | C66 | BASE D. RELACIONALES | IMPRESCINDIBLE | 3 | 500.00 | CIS | +-----+----------------------+-------------------------+------+---------+-------+
2

MySQL Bsico
Comentarios 1. Sintaxis: Cuando se use la clusula ORDER BY, es siempre la ltima en cualquier sentencia SELECT. 2. La ordenacin ocurre en secuencia ascendente. Esto ocurre por defecto, a menos que se especifique lo contrario. Podramos haber pedido, explcitamente, una secuencia de ordenacin ascendente incluyendo, el parmetro ASC en la clusula ORDER BY. La siguiente clusula ORDER BY es equivalente a la mostrada en el ejemplo. ORDER BY CTARIFA ASC El parmetro ASC se usa muy poco en la prctica. Su nico propsito es intensificar la legibilidad de una consulta mediante la indicacin explcita de una secuencia de ordenacin ascendente. Es posible visualizar el resultado en una secuencia de filas descendente. La siguiente consulta ejemplo mostrar el uso del parmetro DESC para lograr este objetivo. 3. El campo ordenado, CTARIFA, es numrico. Por lo tanto, la ordenacin reflejaba una secuencia basada en valores matemticos. Si hubiera valores negativos en la columna CTARIFA, habra aparecido antes el cero y los valores positivos. Podemos tambin ordenar por columnas de tipo cadena de caracteres. La siguiente consulta ejemplo mostrar la ordenacin por una columna de tipo cadena de caracteres. 4. Existen valores duplicados en la columna CTARIFA. No podemos hacer suposiciones sobre la secuencia de ordenacin entre las filas que contienen valores coincidentes. 5. Notar que la columna de ordenacin de esta consulta no es la columna situada ms a la izquierda. La mayora de los usuarios establecen la columna de ordenacin como la columna situada ms a la izquierda. Este ejemplo demuestra que se puede ordenar sobre cualquier columna. 6. Finalmente, destacaremos que la ordenacin afecta nicamente al resultado que aparece por pantalla. Los datos en la tabla almacenada permanecen invariables. Ejercicio

MySQL es Software Libre

4A.

Obtener toda la tabla CURSO. Ordenar el resultado por la columna CDEPT en secuencia ascendente.

MySQL Bsico
ORDENACION DESCENDENTE La siguiente consulta-ejemplo demuestra el uso del parmetro DESC para producir un resultado que se ordena en secuencia descendente. Consulta-ejemplo 4.2: Seleccionar el nmero de curso, nombre y crdito de cualquier curso que ofrezca el departamento de Informtica y Ciencias de la Informacin. Ordenar el resultado por nmero de curso en secuencia descendente. mysql> -> -> -> SELECT FROM WHERE ORDER CNO, CNOMBRE, CRED CURSO CDEPT = 'CIS' BY CNO DESC; +-----+----------------------+------+ | CNO | CNOMBRE | CRED | +-----+----------------------+------+ | C66 | BASE D. RELACIONALES | 3 | | C55 | ARQUIT. COMPUTADORAS | 3 | | C44 | CIRCUITOS DIGITALES | 3 | | C33 | MATEMAT. DISCRETAS | 3 | | C22 | ESTRUC. DE DATOS | 3 | | C11 | INTROD. A LOS CC | 3 | +-----+----------------------+------+ Comentarios 1. Sintaxis: DESC sigue al nombre de la columna en la clusula ORDER BY. Entre el nombre de la columna y el parmetro DESC debe haber uno o ms espacios. (No se puede usar una coma como separador). 2. La columna de ordenacin (CNO) contiene datos en forma de caracteres. Recordemos que el cdigo EBCDIC especifica la secuencia para los datos en forma de caracteres. Revisar los comentarios de la Consulta-ejemplo 1.5, que describe la secuencia EBCDIC. 3. Dentro de la tabla CURSO, cada valor CNO es nico. Por lo tanto, la secuencia de filas estaba totalmente determinada.

MySQL es Software Libre

4. A diferencia de la consulta-ejemplo anterior, esta consulta selecciona nicamente algunas columnas. Se puede situar una clusula ORDER BY al final de cualquier sentencia SELECT vlida. Sin embargo, existe una restriccin: la clusula ORDER BY debe especificar columnas que estn referenciadas en la clusula SELECT. Por ejemplo, el caso que ahora nos ocupa no podra ordenarse por la columna CTARIFA, porque CTARIFA no ha sido seleccionada para su visualizacin. Ejercicio 4B. Visualizar el nombre de curso y TARIFA para todos los cursos ofrecidos por el departamento de Filosofa. Ordenar el resultado por nombre de curso en secuencia descendente.

MySQL Bsico
ORDENACION DE COLUMNAS MULTIPLES Recordemos que en la consulta-ejemplo 4.1, la columna de ordenacin (CTARIFA) contena valores que no eran nicos. Por este motivo, la secuencia de filas no estaba completamente determinada. La siguiente consulta-ejemplo muestra que la clusula ORDER BY puede referenciar mltiples columnas. Veremos que la especificacin adecuada de mltiples columnas en la clusula ORDER BY permite la determinacin completa de la secuencia de filas en cualquier orden que deseemos. Consulta-ejemplo 4.3: Obtener la identificacin del departamento y el nombre de cada curso. Ordenar el resultado por identificacin de departamento. Dentro de cada departamento, ordenar por nombre de curso. mysql> SELECT CDEPT, CNOMBRE -> FROM CURSO -> ORDER BY CDEPT, CNOMBRE; +-------+----------------------+ | CDEPT | CNOMBRE | +-------+----------------------+ | CIS | ARQUIT. COMPUTADORAS | | CIS | BASE D. RELACIONALES | | CIS | CIRCUITOS DIGITALES | | CIS | ESTRUC. DE DATOS | | CIS | INTROD. A LOS CC | | CIS | MATEMAT. DISCRETAS | | PHIL | EMPIRISMO | | PHIL | EXISTENCIALISMO | | PHIL | RACIONALISMO | | PHIL | SOLIPSISMO | | THEO | COMUNISMO | | THEO | ESCOLASTICISMO | | THEO | FUNDAMENTALISMO | | THEO | HEDONISMO | +-------+----------------------+ Comentarios

MySQL es Software Libre

1. Terminologa: Este ejemplo tiene dos columnas de ordenacin (campos). Hay diferentes formas de expresar la relacin de ordenacin entre las dos columnas. Las siguientes sentencias son equivalentes. a. CDEPT es el mayor campo de ordenacin, y CNOMBRE es el menor. b. CDEPT es el campo de ordenacin primario, y CNOMBRE es el secundario. c. CDEPT es el campo de ordenacin en el primer nivel, y CNOMBRE es el de segundo nivel. d. La secuencia de ordenacin es CNOMBRE dentro de CDEPT. 2. Sintaxis: La clusula ORDER BY va seguida del mayor campo de ordenacin. Los nombres de columna de campos de ordenacin deben ir separados por una coma. 3. Ambos campos, tanto el principal como el secundario en la ordenacin, toman, por defecto, valor ascendente. Podemos mezclar las secuencias ascendente y descendente dentro de los distintos campos de ordenacin. (Ver Consulta-ejemplo 4.5).

MySQL Bsico
4. Tanto el campo de ordenacin mayor como el menor, contienen datos numricos. Esto no es imprescindible. (Ver Consulta-ejemplo 4.5). 5. No existe lmite prctico en el nmero de campos a ordenar. La siguiente clusula ORDER BY es vlida y establecera una secuencia de ordenacin de cuatro niveles. ORDER BY CRED, CTARIFA, CDEPT, CNOMBRE Ejercicio 4C. Obtener las columnas CTARIFA, CNO y CRED (en ese orden) para todas las filas en la tabla CURSO. Ordenar las filas visualizadas por CNO dentro de CTARIFA. (CTARIFA es el mayor campo de ordenacin y CNO el menor).

LA CLAUSULA ORDER BY REFERIDA AL NUMERO DE COLUMNA La clusula ORDER BY puede tambin referenciar una columna usando su posicin relativa en la salida de datos que hemos obtenido. Esta es una ventaja que puede ahorrarnos trabajo de mecanografiado. La siguiente consulta-ejemplo produce una salida de datos que se ordena por la segunda columna. Consulta-ejemplo 4.4: Obtener los valores CNO, CTARIFA y CRED, en ese orden para todos los cursos. Ordenar el resultado por la segunda columna (CTARIFA). mysql> SELECT CNO, CTARIFA, CRED -> FROM CURSO -> ORDER BY 2; +-----+---------+------+ | CNO | CTARIFA | CRED | +-----+---------+------+ | P44 | 0.00 | 6 | | C33 | 0.00 | 3 | | T33 | 0.00 | 3 | | C44 | 0.00 | 3 | | P22 | 50.00 | 3 | | C22 | 50.00 | 3 | | T12 | 90.00 | 3 | | P11 | 100.00 | 3 | | C55 | 100.00 | 3 | | C11 | 100.00 | 3 | | T11 | 150.00 | 3 | | P33 | 200.00 | 3 | | T44 | 200.00 | 6 | | C66 | 500.00 | 3 | +-----+---------+------+ Comentarios 1. El uso de un gran nmero de columna relativo no es necesario en este ejemplo. La siguiente clusula lograra el mismo objetivo. ORDER BY CTARIFA

MySQL es Software Libre

MySQL Bsico
El uso de los nmeros relativos a columnas es una ventaja aceptable para usar en las antiguas consultas ad hoc. Para sentencias que se grabarn para ejecutarlas con posterioridad, es preferible nombrar explcitamente el nombre de la columna en la clusula ORDER BY. Esto facilita la legibilidad y no se ve afectado por una reordenacin de los nombres de Las columnas en la sentencia SELECT. (Esto es especialmente vlido para sentencias que vayan a ser incluidas en programas de aplicaciones). 2. Hay situaciones que requieren el uso del nmero relativo a la columna para la ordenacin. Las unidades siguientes presentarn funciones incorporadas y columnas calculadas. Las columnas generadas por estas tcnicas no tienen nombres predefinidos. Tales columnas deben ser mencionadas por su posicin relativa. Las consultas-ejemplo que aparezcan a continuacin ilustrarn este punto. 3. El parmetro DESC puede usarse con los nmeros relativos a las columnas. La siguiente clusula es vlida. ORDER BY 2 DESC Ejercicio 4D. Obtener la tabla CURSO ordenada en secuencia descendente por la tercera columna.

La ltima consulta-ejemplo de esta unidad demuestra que todas las variaciones anteriormente descritas en la clusula ORDER BY pueden incorporarse a una sola sentencia. Esta clusula menciona tanto los nmeros de las columnas como los nombres. Este ejemplo no es muy real. Sin embargo, demuestra la flexibilidad de la clusula ORDER BY. Consulta-ejemplo 4.5: Obtener los valores CDEPT, CTARIFA y CRED, en ese orden, para todos los cursos. CDEPT es el campo de ordenacin del primer nivel (ascendente), CRED es el de segundo nivel (descendente) y CTARIFA es el de tercer nivel (descendente). mysql> SELECT CDEPT, CTARIFA, CRED -> FROM CURSO -> ORDER BY CDEPT, 3 DESC, CTARIFA DESC; +-------+---------+------+ | CDEPT | CTARIFA | CRED | +-------+---------+------+ | CIS | 500.00 | 3 | | CIS | 100.00 | 3 | | CIS | 100.00 | 3 | | CIS | 50.00 | 3 | | CIS | 0.00 | 3 | | CIS | 0.00 | 3 | | PHIL | 0.00 | 6 | | PHIL | 200.00 | 3 | | PHIL | 100.00 | 3 | | PHIL | 50.00 | 3 | | THEO | 200.00 | 6 | | THEO | 150.00 | 3 | | THEO | 90.00 | 3 | | THEO | 0.00 | 3 | +-------+---------+------+

MySQL es Software Libre

MySQL Bsico
Comentarios 1. Esta consulta-ejemplo ordena por tres columnas. La clusula ORDER BY: a. Se refiere a algunas columnas por el nombre (CDEPT y CTARIFA), y a otras, por el nmero relativo a la columna (CRED se identifica como la tercera columna). b. Ordena una columna (CDEPT) en secuencia ascendente y dos columnas (CRED y CTARIFA) en secuencia descendente. 2. Notar que ninguna de las columnas visualizadas contienen valores nicos. Debido a esto, pueden aparecer filas duplicadas en el resultado. Observar que a causa de que el resultado aparece ordenado, es ms fcil detectar filas duplicadas. Recordemos que las filas duplicadas pueden ser eliminadas de la salida usando DISTINCT. Ejercicio 4E. Obtener los valores CDEPT, CTARIFA y CNOMBRE de todos los cursos con tres crditos. Ordenar el resultado. CDEPT es el campo de ordenacin de primer nivel (ascendente), CTARIFA es el de segundo nivel (descendente), CNOMBRE es el de tercer nivel (ascendente).

BIBLIOGRAFIAS 1. FUNDAMENTOS DE BASES DE DATOS. Abraham S. Henry F. Cuarta edicin. McGrawHill. Mxico. 2008. 2. Beginning Oracle SQL. Oracle Lex de Haan Et.Al Apress. USA. 2009. 3. http://dev.mysql.com/doc/refman/5.6/en/ MySQL 5.6 Reference Manual

MySQL es Software Libre

S-ar putea să vă placă și