Você está na página 1de 15

Unidad 3

Consulta bsica SELECT

[MySQL Bsico]
De Intecap-TICS
[Esta unidad trata de la comunicacin ms frecuente con una base de datos, las CONSULTAS, que consiste en extraer informacin de una BD ya creada y consistente; los Objetivos de la Unidad son adquirir las competencias de los siguientes contenidos.]

Unidad 3

MySQL Bsico
La sentencia SELECT Esta unidad introduce los conceptos fundamentales y la estructura de la sentencia SELECT. Esta es la sentencia que se usa de forma ms frecuente en el SQL. Su propsito es la obtencin de datos de la base de datos y mas especficamente de las tablas. En esta unidad se explicar cmo mostrar en pantalla nicamente algunas columnas y/o filas especficas de una tabla. La sintaxis general SQL de consultas es: SELECT FROM WHERE GROUP HAVING ORDER atributo(s) tabla(s) condicin de seleccin BY atributo(s) de agrupacin condicin de agrupacin BY atributo(s) de ordenamiento ASC/DESC

Se vera cada una de las sentencias de la anterior sintaxis a lo largo del curso, iniciamos con una consulta bsica: OBTENCION DE UNA TABLA ENTERA El objetivo de esta primera pregunta ejemplo es la obtencin de toda la tabla CURSO; es decir, mostrar todas las filas y columnas de la misma. Esto se puede conseguir codificando la ms simple de todas las posibles sentencias SELECT. Consulta-ejemplo 3.1: Obtencin de toda la tabla CURSO. mysql> SELECT * -> FROM CURSO; +-----+----------------------+-------------------------+------+---------+-------+ | CNO | CNOMBRE | CDESCP | CRED | CTARIFA | CDEPT | +-----+----------------------+-------------------------+------+---------+-------+ | T11 | ESCOLASTICISMO | PARA BEATOS | 3 | 50.00 | THEO | | T12 | FUNDAMENTALISMO | PARA DESCUIDADOS | 3 | 90.00 | THEO | | T33 | HEDONISMO | PARA SANOS | 3 | 0.00 | THEO | | T44 | COMUNISMO | PARA AVAROS | 6 | 200.00 | THEO | | P11 | EMPIRISMO | VER PARA CREER | 3 | 100.00 | PHIL | | P22 | RACIONALISMO | PARA USUARIOS CIS | 3 | 50.00 | PHIL | | P33 | EXISTENCIALISMO | PARA USUARIOS CIS | 3 | 200.00 | PHIL | | P44 | SOLIPSISMO | PARA MI MISMO | 6 | 0.00 | PHIL | | C11 | INTROD. A LOS CC | PARA NOVATOS | 3 | 100.00 | CIS | | C22 | ESTRUC. DE DATOS | MUY UTIL | 3 | 50.00 | CIS | | C33 | MATEMAT. DISCRETAS | ABSOLUTAMENTE NECESARIO | 3 | 0.00 | CIS | | C44 | CIRCUITOS DIGITALES | AH HA! | 3 | 0.00 | CIS | | C55 | ARQUIT. COMPUTADORAS | MAQ. DE VON NEUMAN | 3 | 100.00 | CIS | | C66 | BASE D. RELACIONALES | IMPRESCINDIBLE | 3 | 500.00 | CIS | +-----+----------------------+-------------------------+------+---------+-------+ Comentarios 1. El asterisco (*) que aparece a continuacin de la sentencia SELECT es una abreviatura de todas las columnas. La secuencia de salida de columnas, de izquierda a derecha, est determinada por el orden en el que las columnas se especificaron en la sentencia CREATE TABLE. (La sentencia CREATE TABLE fue tratada anteriormente).

MySQL es Software Libre

MySQL Bsico
2. Para pasar a escribir la siguiente lnea de instrucciones (FROM CURSO) en MySQL presionar ENTER. La clusula FROM CURSO identifica la tabla. En un sistema aparecern, sin duda, varias tablas. Cada una de ellas tendr un nombre nico que ir a continuacin de la partcula FROM. 3. Observe tambin que los espacios en blanco entre las palabras FROM y CURSO no son significativos en la escritura de la sintaxis del SQL, esto aplica para cualquier otra sentencia SQL y sus respectivas condiciones o atributos. 4. SELECT y FROM son palabras clave en el lenguaje SQL. Una palabra clave tiene siempre un significado especfico e invariable en el lenguaje. En este caso, esto implica que estas palabras se usarn, inevitablemente, en la seleccin de datos a partir de una tabla de la base de datos. Los nombres de tablas y columnas no son palabras clave. Estos nombres los establece, de acuerdo con ciertas reglas, la persona que asigna la sentencia CREATE TABLE. Una de las reglas es que a una tabla o columna no puede asignrsele como nombre ninguna de las palabras clave. Por esta razn, las palabras clave se denominan tambin palabras reservadas. 5. Toda instruccin SQL debe terminar en con punto y coma (;) y presionar ENTER para ejecutar la instruccin de lo contrario hasta que no se escriba ; MySQL no ejecutara la instruccin escrita y seguir insertando lneas, este punto no aplica en PhpMyAdmin. 6. Tambin note que las palabras reservadas del SQL son escritas con maysculas de igual manera las condiciones o atributos, en principio SQL no es CASE SENSITIVE (es decir que para SQL y MySQL no hay diferencia entre maysculas y minsculas) es decir que puede usar minsculas para hacer sus consultas; pero las aplicaciones donde se har inmerso el SQL (por ejemplo java, C, Php) si lo son, y puede ser causa de errores a la hora de la compilacin de estas aplicaciones. 7. La sentencia SELECT puede tambin introducirse utilizando una sola lnea, ya que el resultado obtenido es el mismo. SELECT * FROM CURSO; 8. En la mayor parte de este curso comenzaremos la clusula FROM en una nueva lnea. Esto har que el cdigo SQL sea ms fcilmente legible. En la prctica puede ser que el usuario encuentre ms sencillo teclear una sola lnea. El punto clave es que, independientemente de cmo se teclee el cdigo, la sentencia SELECT se interpreta como una sola sentencia. Es buena prctica alinear todas las sentencias (palabras claves) en una columna y las condiciones o atributos en otra columna, esto se hace generando espaci os con la tecla barra espaciadora , como se ve en la sintaxis general al inicio de la Unidad.

MySQL es Software Libre

9. Observar que las filas de los datos obtenidos en pantalla no estn ordenarlos. Esto se debe a las siguientes causas: a. No se ha definido previamente en las tablas una consecuencia de ordenacin. b. La sentencia SELECT no contiene la clusula ORDER BY. En general, no podemos suponer que el primer resultado obtenido en pantalla va a aparecer ordenado, a menos que se aplique alguna ordenacin usando la clusula ORDER BY. Esta clusula se estudiar en la siguiente Unidad. 10. Esta orden no contiene la clusula WHERE. En el prximo ejemplo veremos el uso de esta clusula, para seleccionar solo unas determinadas columnas de una tabla.

MySQL Bsico
LA CLAUSULA WHERE La mayora de las bases de datos existentes cuentan con tablas que contienen demasiadas filas para ser examinadas visualmente por el usuario. (De hecho, muchas bases de datos MySQL tienen tablas que contienen ms de un milln de filas. Con la excepcin de las tablas pequeas, normalmente el usuario no desear obtener toda la tabla. Por el contrario, usar la clusula WHERE en la sentencia SELECT para extraer slo aquellas filas que desee examinar. (WHERE es otra palabra reservada del SQL). La siguiente consulta-ejemplo ilustra lo mencionado anteriormente. Consulta-ejemplo 3.2: Obtener toda la informacin disponible sobre un curso donde CTARIFA sea 0. Es decir, seleccionar nicamente aquellas filas de la tabla CURSO donde el valor CTARIFA es 0. Obtener todas las columnas de estas filas. mysql> SELECT * -> FROM CURSO -> WHERE CTARIFA = 0.00; +-----+---------------------+-------------------------+------+---------+-------+ | CNO | CNOMBRE | CDESCP | CRED | CTARIFA | CDEPT | +-----+---------------------+-------------------------+------+---------+-------+ | T33 | HEDONISMO | PARA SANOS | 3 | 0.00 | THEO | | P44 | SOLIPSISMO | PARA MI MISMO | 6 | 0.00 | PHIL | | C33 | MATEMAT. DISCRETAS | ABSOLUTAMENTE NECESARIO | 3 | 0.00 | CIS | | C44 | CIRCUITOS DIGITALES | AH HA! | 3 | 0.00 | CIS | +-----+---------------------+-------------------------+------+---------+-------+ Comentarios 1. La clusula WHERE sigue a la clusula FROM. Tambin podra haber sido introducida la sentencia SELECT en una lnea. La siguiente orden es equivalente a la mencionada anteriormente SELECT * FROM CURSO WHERE CTARIFA = 0 .00; 2. La sintaxis de, la clusula WHERE es:

MySQL es Software Libre

WHERE condicin La condicin, en nuestro ejemplo, es CTARIFA = 0.00. Es la condicin la que especifica qu columnas van a ser seleccionadas. Examine la tabla CURSO y observe el resultado. Cuatro de las filas en la tabla CURSO tienen valores CTARIFA igual a cero. Estas filas forman el resultado que va a obtener. Slo las filas que cumplen la condicin van a ser elegidas. 3. Debido a que CTARIFA se ha definido como un campo numrico, este ejemplo slo puede ser comparado con campos del mismo tipo. Esto quiere decir que el sistema compara valores matemticos (o caracteres alfabticos). Las siguientes condiciones WHERE son equivalentes, y seleccionaran tambin las mismas filas que el ejemplo original. WHERE CTARIFA = 0 WHERE CTARIFA = 0.0 WHERE CTARIFA = 00.00 4. Los valores numricos pueden contener un signo negativo situado a la izquierda (). Sin embargo, no se permite ninguna otra puntuacin.
4

MySQL Bsico
5. El ejemplo compara una condicin igual (=). Otros operadores de comparacin son: menor que (<) mayor que (>) menor o igual que (<=) mayor o igual que (>=) no igual que (<>) igual (LIKE) [De preferencia aplicar solo a cadena de caracteres].

6. El ejemplo presenta una condicin WHERE simple. Referencia slo una columna (CTARIFA) y no contiene ningn operador booleano como AND, OR y NOT los cuales permiten combinar varias condiciones. Estudiaremos estos operadores en las siguientes unidades. 7. Un cuidadoso examen de la salida obtenida, muestra que est ordenada por CNO. Este es un efecto secundario casual. No debe esperar que esto ocurra siempre. La siguiente consulta-ejemplo contiene una clusula WHERE para seleccionar filas, basada en el valor de CDEPT. Esta consulta es similar a la anterior, pero presenta una excepcin importante. La columna CDEPT contiene datos en forma de caracteres. Esto significa que el valor de comparacin debe aparecer incluido entre apstrofos (comillas simples). Consulta-ejemplo 3.3: Obtener toda la informacin sobre cualquier curso que ofrezca el departamento de Filosofa. (Para ser ms precisos, seleccionar slo aquellas filas de la tabla CURSO en las que el valor CDEPT sea PHIL. Visualizar todas las columnas. mysql> SELECT * -> FROM CURSO -> WHERE CDEPT = 'PHIL'; +-----+-----------------+-------------------+------+---------+-------+ | CNO | CNOMBRE | CDESCP | CRED | CTARIFA | CDEPT | +-----+-----------------+-------------------+------+---------+-------+ | P11 | EMPIRISMO | VER PARA CREER | 3 | 100.00 | PHIL | | P22 | RACIONALISMO | PARA USUARIOS CIS | 3 | 50.00 | PHIL | | P33 | EXISTENCIALISMO | PARA USUARIOS CIS | 3 | 200.00 | PHIL | | P44 | SOLIPSISMO | PARA MI MISMO | 6 | 0.00 | PHIL | +-----+-----------------+-------------------+------+---------+-------+

MySQL es Software Libre

Comentarios 1. Sintaxis: La cadena de caracteres debe estar contenida entre apstrofos. Nuestro ejemplo ilustra WHERE CDEPT = 'PHIL'. (Ha de destacar que esto no ocurre con los datos numricos. El ejemplo anterior se refera a CTARIFA. Esa clausula WHERE no contena apstrofos. 2. Los datos en forma de cadenas de caracteres son comparados carcter por carcter. Dos cadenas son iguales slo si coinciden todos los caracteres. Hay que observar si las dos cadenas tienen la misma longitud. En el ejemplo anterior, debido a que se esta comparando CDEPT, que es una columna de cuatro caracteres con PHIL, tiene un simple caso de comparacin de cadenas de la misma longitud. Cada carcter de CDEPT debe coincidir exactamente con PHIL para que una fila sea seleccionada. Ocurre un caso especial cuando las cadenas que se estn comparando no tienen la misma longitud. Cuando esto ocurre, se produce la misma comparacin carcter a carcter. Sin embargo, el sistema asume que la cadena ms corta tiene espacios en blanco anexados a la derecha. Esto implica que no hay que teclear estos espacios en blanco al final de las
5

MySQL Bsico
constantes de caracteres colocadas en las clusulas WHERE. Por ejemplo, si desea visualizar informacin sobre los cursos ofrecidos por el departamento CIS, podra usar una de las siguientes clusulas. WHERE CDEPT = 'CIS' WHERE CDEPT = 'CISC' Se debe recalcar que dos cadenas slo son consideradas como idnticas si coinciden todos sus caracteres. Esto significa que hay que prestar especial atencin a los caracteres en blanco que aparezcan en la posicin inicial y los espacios en blanco insertados. Observe que las siguientes clusulas WHERE no coincidiran con un valor de cuatro caracteres CDEPT justificado a la izquierda de CIS. WHERE CDEPT = 'CCIS' WHERE CDEPT = 'CCICSC' 3. CDEPT es una columna de longitud fija. (Esta es la razn por la que el sistema almacena los trailing blanks (espacios en blanco) en CDEPT cuando un operador de consola introduce una cadena menor de cuatro caracteres. Las mismas normas de comparacin se aplican a las columnas que contengan datos en forma de caracteres de longitud variable. Estudiar la siguiente consulta-ejemplo. La consulta que aparece a continuacin referencia CNOMBRE, una columna que contiene datos en forma de caracteres de longitud variable. Observe que el proceso de comparacin de las cadenas de caracteres es el mismo que se ha descrito para las cadenas de caracteres de longitud fija. Consulta-ejemplo 3.4: Obtener toda la informacin disponible sobre el curso con el valor CNOMBRE de COMUNISMO. mysql> SELECT * -> FROM CURSO -> WHERE CNOMBRE = 'COMUNISMO'; +-----+-----------+-------------+------+---------+-------+ | CNO | CNOMBRE | CDESCP | CRED | CTARIFA | CDEPT | +-----+-----------+-------------+------+---------+-------+ | T44 | COMUNISMO | PARA AVAROS | 6 | 200.00 | THEO | +-----+-----------+-------------+------+---------+-------+ Comentarios 1. Debido a que CNOMBRE contiene datos en forma de caracteres de longitud variable, el sistema no colocar los espacios en blanco a la derecha a cualquier valor de datos que sea menor que la longitud mxima de columna. 2. Aunque no exista una buena razn para hacerlo, podemos aadir espacios en blanco a una cadena de caracteres. La siguiente clusula WHERE es vlida. WHERE CNOMBRE = 'COMUNISMO '

MySQL es Software Libre

3. Los ejemplos anteriores presentan comparaciones entre cadenas completas de caracteres. Esto significa que se selecciona una fila slo si cada pareja de caracteres coincide. Esto ayudar a buscar cualquier modelo de cadena de caracteres independientemente de su posicin dentro de la columna.
6

MySQL Bsico
4. Recuerde: A menudo se define como cadena de caracteres un nmero. Tal es el caso de la columna nmero de curso (CNO). Los sistemas reales contienen nmeros fraccionarios, nmeros de pliza, nmeros de la Seguridad Social, etc., almacenados como cadenas de caracteres simplemente porque no se va a realizar ninguna operacin con ellos. Tambin, a veces, contienen caracteres alfabticos. Cuando estos nmeros se almacenan como cadenas de caracteres, hay que usar apstrofos en la clusula WHERE. Ejercicios 3A. 3B. Obtener todas las filas en la que tarifa sea menor que $150. Obtener todas las filas en las que el nmero de crditos sea superior a 3.

Normalmente, se compara las cadenas de caracteres usando la condicin igual (=). Ocasionalmente, quiz necesitemos comparar caracteres usando otros operadores de comparacin (<, >, <=, >=, <>, LIKE). Considere la siguiente consulta-ejemplo que requiere esa comparacin. Consulta-ejemplo 3.5: Obtener toda la informacin disponible sobre los cursos que tengan valores CNOMBRE que sigan a HEDONISMO en secuencia alfabtica. mysql> SELECT * -> FROM CURSO -> WHERE CNOMBRE >= 'HEDONISMO'; +-----+--------------------+-------------------------+------+---------+-------+ | CNO | CNOMBRE | CDESCP | CRED | CTARIFA | CDEPT | +-----+--------------------+-------------------------+------+---------+-------+ | T33 | HEDONISMO | PARA SANOS | 3 | 0.00 | THEO | | P22 | RACIONALISMO | PARA USUARIOS CIS | 3 | 50.00 | PHIL | | P44 | SOLIPSISMO | PARA MI MISMO | 6 | 0.00 | PHIL | | C11 | INTROD. A LOS CC | PARA NOVATOS | 3 | 100.00 | CIS | | C33 | MATEMAT. DISCRETAS | ABSOLUTAMENTE NECESARIO | 3 | 0.00 | CIS | +-----+--------------------+-------------------------+------+---------+-------+ Comentarios

MySQL es Software Libre

1. El sistema comparar cada valor CNOMBRE cori la cadena de caracteres HEDONISMO. Todos los valores CNOMBRE contienen nicamente los caracteres alfabticos estndar (A-Z). Esto implica que la evaluacin estar basada en el orden alfabtico convencional. 2. Un caso especial se produce cuando las cadenas de caracteres que van a compararse contienen dgitos, smbolos especiales y letras maysculas y minsculas. El MySQL evaluar una secuencia de caracteres de acuerdo con la secuencia especificada en el cdigo EBCDIC. Este cdigo especifica la secuencia de ordenacin para todos los caracteres que se encuentran en el sistema. La Figura 3.1 muestra la secuencia EBCDIC.

Figura 3.1 Jerarqua de caracteres EBCDIC.


7

MySQL Bsico
Dentro del cdigo EBCDIC se observa que los caracteres especiales (por ejemplo, &, ?, +) se ordenar antes que las letras minsculas, que a su vez se ordenan antes que las maysculas. Estas, a su vez, se ordenan antes que los dgitos. Siempre que compare cadenas de caracteres, el sistema rellenar el lado derecho de la cadena de caracteres ms corta con espacios en blanco, y despus comparar las cadenas siguiendo las secuencias EBCDIC. A continuacin, aparecen algunas cadenas de caracteres que han sido ordenadas siguiendo la secuencia EBCDIC. ???FIDO??? jessie julia Jessie JULla JULIA Zeek 3M 77aaaaaaaAAAAAAAAA Ejercicio 3C. Obtener todas las filas en las que el nombre de curso sea mayor o igual que RACIONALISMO.

LA VISUALIZACION DE COLUMNAS ESPECIFICADAS Todos los ejemplos anteriores seleccionaban todas las columnas. Esto era debido a que la sentencia comenzaba con SELECT. En la prctica normalmente se deseara examinar slo algunas columnas especificadas. El ejemplo actual muestra cmo lograr este objeti vo. Simplemente especifique los nombres de las columnas despus de SELECT. Slo aquellas columnas especificadas van a ser visualizadas. Consulta-ejemplo 3.6: Obtener los valores CNO, CNOMBRE y CDEPT (en ese orden) para todas las filas de la tabla CURSO. mysql> SELECT CNO, CNOMBRE, CDEPT -> FROM CURSO; +-----+----------------------+-------+ | CNO | CNOMBRE | CDEPT | +-----+----------------------+-------+ | T11 | ESCOLASTICISMO | THEO | | T12 | FUNDAMENTALISMO | THEO | | T33 | HEDONISMO | THEO | | T44 | COMUNISMO | THEO | | P11 | EMPIRISMO | PHIL | | P22 | RACIONALISMO | PHIL | | P33 | EXISTENCIALISMO | PHIL | | P44 | SOLIPSISMO | PHIL | | C11 | INTROD. A LOS CC | CIS | | C22 | ESTRUC. DE DATOS | CIS | | C33 | MATEMAT. DISCRETAS | CIS | | C44 | CIRCUITOS DIGITALES | CIS | | C55 | ARQUIT. COMPUTADORAS | CIS | | C66 | BASE D. RELACIONALES | CIS | +-----+----------------------+-------+

MySQL es Software Libre

MySQL Bsico
Comentarios 1. Sintaxis: Cada nombre de columna debe aparecer separado por una coma. Opcionalmente puede incluir uno o ms espacios antes o despus de la coma. 2. Se debe conocer los nombres de las columnas. Normalmente se estar trabajando con una base de datos que se sea familiar y, por lo tanto, esto no ser un problema. De lo contrario, hay que seguir uno de los mtodos siguientes: a. Preguntar a alguien que conozca la base de datos. b. Asignar una orden que comience con SELECT * La salida nos ofrecer todos los nombres de columna. En este caso se estar malgastando los recursos informticos, especialmente s esta orden selecciona muchas filas. c. Examinar la documentacin realizada por el administrador de la base de datos. Esta documentacin debera contener los nombres de las columnas a las que puede acceder. d. Suponga que la documentacin no est disponible y que rechaza los dos primeros mtodos. Entonces deber examinar el catlogo del sistema. En l aparece informacin sobre las tablas y columnas. 3. Este ejemplo selecciona las tres columnas en el mismo orden de izquierda a derecha que fue fijado por el administrador de la base de datos. Este es el mismo orden que aparece cuando asignamos una consulta comenzando por SELECT *. Esto no es as siempre. Las columnas pueden visualizarse en cualquier orden de izquierda a derecha. Ver la siguiente consultaejemplo. 4. Observar que la actual consulta no tiene clusula WHERE. Por lo tanto, todas las filas de la tabla CURSO se recuperan. Pero slo se visualizan las tres columnas especificadas. El siguiente ejemplo produce, en esencia, el mismo resultado que el ejemplo anterior. La nica diferencia es la especificacin de la secuencia, de izquierda a derecha, de las columnas. Consulta-ejemplo 3.7: Obtener los valores CDEPT, CNOMBRE y CNO (en ese orden) para todas las filas de la tabla CURSO. mysql> SELECT CDEPT, CNOMBRE, CNO -> FROM CURSO;

MySQL es Software Libre

+-------+----------------------+-----+ | CDEPT | CNOMBRE | CNO | +-------+----------------------+-----+ | THEO | ESCOLASTICISMO | T11 | | THEO | FUNDAMENTALISMO | T12 | | THEO | HEDONISMO | T33 | | THEO | COMUNISMO | T44 | | PHIL | EMPIRISMO | P11 | | PHIL | RACIONALISMO | P22 | | PHIL | EXISTENCIALISMO | P33 | | PHIL | SOLIPSISMO | P44 | | CIS | INTROD. A LOS CC | C11 | | CIS | ESTRUC. DE DATOS | C22 | | CIS | MATEMAT. DISCRETAS | C33 | | CIS | CIRCUITOS DIGITALES | C44 | | CIS | ARQUIT. COMPUTADORAS | C55 | | CIS | BASE D. RELACIONALES | C66 | +-------+----------------------+-----+
9

MySQL Bsico
Comentarios 1. La clusula SELECT especifica la ordenacin, de izquierda a derecha, de las columnas visualizadas. Este ejemplo muestra que CDEPT es la columna ms a la izquierda, seguida de CNOMBRE y despus CNO. 2. Tampoco aqu se tiene la clusula WHERE. Por lo tanto, se recuperan todas las filas. 3. Pude especificar cualquier nombre de columna CURSO vlida despus de SELECT, ya que la tabla CURSO se ha referenciado en la clusula FROM. Puede incluso introducir el mismo nombre de columna ms de una vez. Esto significa que la siguiente consulta es vlida. SELECT CDEPT, CNOMBRE, CTARIFA, CTARIFA FROM CURSO; Esto es obviamente innecesario, pero es vlido y producir tres columnas CTARIFA idnticas. (Hay una situacin en la que s tiene sentido. En algunos sistemas, el resultado de la consulta puede ser transferido a un programa externo para su posterior procesamiento. Este programa externo puede entonces realizar diferentes clculos sobre los mismos datos. Ejercicios 3D. Seleccionar el departamento, nmero de curso, tarifa y crditos, en ese orden, para todos los cursos.

LA VISUALIZACION DE UN SUBCONJUNTO DE FILAS Y COLUMNAS El siguiente ejemplo combina las tcnicas descritas anteriormente para seleccionar unos subconjuntos de filas (utilizando la clusula WHERE) y algunos subconjuntos de columnas (especificando los nombres de columnas despus de la sentencia SELECT). El eje mplo no introduce ninguna palabra reservada del SQL que no hayamos visto anteriormente. Consulta-ejemplo 3.8: Seleccionar los valores CNO, CDEPT y CTARIFA para todos los cursos que tengan un valor CTARIFA inferior a $100. mysql> SELECT CNO, CDEPT, CTARIFA -> FROM CURSO -> WHERE CTARIFA < 100.00;

MySQL es Software Libre

+-----+-------+---------+ | CNO | CDEPT | CTARIFA | +-----+-------+---------+ | T12 | THEO | 90.00 | | T33 | THEO | 0.00 | | P22 | PHIL | 50.00 | | P44 | PHIL | 0.00 | | C22 | CIS | 50.00 | | C33 | CIS | 0.00 | | C44 | CIS | 0.00 | +-----+-------+---------+

10

MySQL Bsico
Comentarios 1. Este ejemplo muestra el formato general de una sentencia SELECT tpica. Este es: SELECT col1, col2,, coln FROM nombre_de_tabla WHERE condicin; 2. En el ejemplo que ahora se esta revisando, la condicin WHERE, referencia a CTARIFA, y ha sido seleccionado para aparecer en la salida por pantalla. No es necesario visualizar una columna usada en una condicin de recuperacin. El ejemplo siguiente, que recupera todos los cursos con tres crditos, slo visualiza el nombre del curso y la descripcin. No es razonable visualizar la columna CRED porque ser la misma para todas las filas visualizadas. SELECT CNOMBRE, CDESCP FROM CURSO WHERE CRED = 3; 3. Recuerde que no se permite ningn signo de puntuacin en las constantes numricas. Por lo tanto, incluso aunque este comparando con 100 dlares el ejemplo no muestra el signo $ antes del nmero 100. Ejercicios 3E. Seleccionar el nmero de curs y tarifa para todos los cursos en los que tarifa sea mayor de $100.

Observemos que la salida visualizada de todas las consultas ejemplo anteriores no contena ninguna fila duplicada. Esto puede ocurrir. Considere la siguiente consulta-ejemplo. Consulta-ejemplo 3.9: Obtener todos los departamentos acadmicos que ofrezcan cursos. (Seleccionar todas las filas de la tabla CURSO. Visualizar nicamente la columna CDEPT). mysql> SELECT CDEPT -> FROM CURSO; +-------+ | CDEPT | +-------+ | THEO | | THEO | | THEO | | THEO | | PHIL | | PHIL | | PHIL | | PHIL | | CIS | | CIS | | CIS | | CIS | | CIS | | CIS | +-------+

MySQL es Software Libre

11

MySQL Bsico
Comentarios 1. Esta consulta-ejemplo realiza el objetivo de visualizar todos los departamentos que ofrecen cursos. Sin embargo, debido a que un mismo departamento ofrece varios cursos, hay muchas filas duplicadas en la salida. El sistema no elimina automticamente las filas duplicadas. Hay que usar la palabra reservada DISTINCT para impedir que las filas duplicadas aparezcan en la visualizacin. Esto se describir en la siguiente consulta-ejemplo. 2. El usuario debera prever cundo puede darse el caso de que existan filas duplicadas. Esto implica que ste conoce algunos hechos sobre el contenido de la tabla CURSO. Supongamos que nuestro colegio ficticio ha establecido una poltica razonable que dice que los nmeros de curso, los nombres de curso deben ser nicos (estos son atributos candidatos a ser claves). Suponiendo que la tabla CURSO refleje esta regla, puede estar seguros de que las filas duplicadas no aparecern en los siguientes casos. a. Cuando la clusula SELECT contenga CNO o CNOMBRE (o una SELECT referenci e implcitamente estas columnas). b. La clusula WHERE compara las columnas CNO, CNOMBRE o CDESCP usando el operando de comparacin igual (=). Esto implica que slo se puede seleccionar una fila. Todas las consultas-ejemplo y los ejercicios anteriores cumplan una de estas condiciones. Por lo tanto, nunca aparecan filas duplicadas en ninguna de las salidas de datos anteriores. El ejemplo que ahora se trata slo referencia CDEPT. No se ha realizado ninguna referencia a CNO o CNOMBRE. Por lo tanto, pueden producirse filas duplicadas en el resultado. 3. Consejo general: Examinar todas las sentencias SELECT (antes de que sean ejecutadas) para comprobar si referencian una nica columna que impedir que se visualicen las filas duplicadas. Si ste no es el caso, habr que prever filas duplicadas en la salida de datos. Ejercicio 3F. Seleccionar todas las filas. Visualizar slo las tarifas de curso. (No intente eliminar las posibles filas duplicadas).

LA PALABRA CLAVE DISTINCT

MySQL es Software Libre

La consulta-ejemplo que ahora se presenta es idntica a la anterior, con la condicin adicional de que la salida de datos no contenga ninguna fila duplicada. Se usa la palabra reservada DISTINCT para lograr este objetivo. Consulta-ejemplo 3.10: Visualizar todos los departamentos acadmicos que ofrezcan cursos. Rechazar los valores duplicados de forma que no aparezcan en la salida de datos. mysql> SELECT DISTINCT CDEPT -> FROM CURSO; +-------+ | CDEPT | +-------+ | THEO | | PHIL | | CIS | +-------+
12

MySQL Bsico
Comentarios 1. Sintaxis: La palabra reservada DISTINCT debe seguir directamente a SELECT. 2. Slo se eliminarn las filas duplicadas. En este ejemplo, la fila consiste en una sola columna. La siguiente consulta-ejemplo presentar varas columnas. Se vera que una fila se considera como duplicada de otra slo si todos los valores de la columna en la primera fila coinciden con los de la columna en la segunda fila. 3. No se requiere que eliminemos filas duplicadas. La consulta-ejemplo anterior, visualizando las filas duplicadas, indicaba cuntos cursos eran ofertados por varios departamentos acadmicos. (La funcin COUNT, ser tratada ms adelante y es la que servir mejor para este propsito). El uso de DISTINCT depende completamente de la preferencia del usuario. La siguiente consulta-ejemplo selecciona slo algunas filas y visualiza mltiples columnas. Tales consultas es menos probable que produzcan filas duplicadas. Sin embargo, como muestra el ejemplo, puede ocurrir que aparezcan estas filas duplicadas.

Consulta-ejemplo 3.11: Para cada curso con tarifa menor de $100, visualizar el departamento acadmico que ofrece ese curso y el nmero de crditos concedidos. mysql> SELECT CDEPT, CRED -> FROM CURSO -> WHERE CTARIFA < 100.00; +-------+------+ | CDEPT | CRED | +-------+------+ | THEO | 3 | | THEO | 3 | | PHIL | 3 | | PHIL | 6 | | CIS | 3 | | CIS | 3 | | CIS | 3 | +-------+------+ Comentarios 1. La palabra clave SELECT no referencia ninguna de las columnas calificadas como nicas (CNO, CNOMBRE, CDESCP). Por lo tanto, pueden aparecer filas duplicadas en el resultado. 2. Podra decidir simplemente si desea o no filas duplicadas, excluyendo o incluyendo la palabra DISTINCT. Este es un mtodo adecuado. Sin embargo, el uso de DISTINCT pide al sistema que realice un trabajo extra para eliminar las filas duplicadas. Por lo tanto, si el resultado es grande y decide que no contenga filas duplicadas, es mejor evitar al sistema que realice un trabajo extra eliminando las filas duplicadas existentes.
13

MySQL es Software Libre

MySQL Bsico
Consulta-ejemplo 3.12: Realizarlo mismo que en la consulta anterior. Sin embargo, esta vez no visualizar las filas duplicadas. mysql> SELECT DISTINCT CDEPT, CRED -> FROM CURSO -> WHERE CTARIFA < 100.00; +-------+------+ | CDEPT | CRED | +-------+------+ | THEO | 3 | | PHIL | 3 | | PHIL | 6 | | CIS | 3 | +-------+------+ Comentario Slo las filas que son idnticas a otras no han sido visualizadas. (El lector deber examinar cuidadosamente los resultados de estas consultas, comparados con los de la anterior). El concepto clave es que DISTINCT no se refiere a ninguna columna individual . Se refiere a toda la fila.

Ejercicios 3G. Obtener los crditos y tarifas para todos los cursos CIS. Permitir que aparezcan las filas duplicadas.

LA VISUALIZACION DE CONSTANTES Es posible incorporar constantes a una columna de la tabla resultado. La siguiente consultaejemplo muestra la inclusin de una cadena de caracteres que sirve para describir la tabla resultado. Consulta-ejemplo 3.13: Visualizar el nmero de curso y el nombre de todos los cursos que tengan una tarifa superior a $100. Incluir una tercera columna en la tabla resultado que aparezca como CURSO CARO en cada fila. mysql> SELECT CNO, CNOMBRE, 'CURSO CARO' COSTO -> FROM CURSO -> WHERE CTARIFA > 100.00; +-----+----------------------+------------+ | CNO | CNOMBRE | COSTO | +-----+----------------------+------------+ | T11 | ESCOLASTICISMO | CURSO CARO | | T44 | COMUNISMO | CURSO CARO | | P33 | EXISTENCIALISMO | CURSO CARO | | C66 | BASE D. RELACIONALES | CURSO CARO | +-----+----------------------+------------+

MySQL es Software Libre

14

MySQL Bsico
Comentarios 1. La constante que va a aparecer en la tabla resultado se especifica en la clusula SELECT. Se puede especificar cualquier constante, numrica o de caracteres. 2. La constante aparece en cada fila. Esta es la nica opcin que permite el SQL. 3. El sistema generar un nombre cabecera para la columna para los datos constantes. (En este caso, el Manager Data del MySQL ha generado COSTO porque fue indicado despus de 'CURSO CARO' sin agregar una coma ,). Si no se hubiese especificado la palabra COSTO, el encabezado seria igual a la constante CURSO CARO, tambin puede agregar un sobre nombre o Alias a una columna, la siguiente consulta-ejemplo muestra el caso. Consulta-ejemplo 3.13: Asignando un Alias a la columna CON y CNOMBRE de la tabla CURSO. mysql> SELECT CNO AS 'No De Curso', CNOMBRE 'Nombre de Curso' -> FROM CURSO; +-------------+----------------------+ | No De Curso | Nombre de Curso | +-------------+----------------------+ | T11 | ESCOLASTICISMO | | T12 | FUNDAMENTALISMO | | T33 | HEDONISMO | | T44 | COMUNISMO | | P11 | EMPIRISMO | | P22 | RACIONALISMO | | P33 | EXISTENCIALISMO | | P44 | SOLIPSISMO | | C11 | INTROD. A LOS CC | | C22 | ESTRUC. DE DATOS | | C33 | MATEMAT. DISCRETAS | | C44 | CIRCUITOS DIGITALES | | C55 | ARQUIT. COMPUTADORAS | | C66 | BASE D. RELACIONALES | +-------------+----------------------+

MySQL es Software Libre

1. El encabezado de columna cambio. Cuando se renombrar las columnas de una tabla se llama ALIAS y es temporal, aplica solo mientras se ejecuta la consulta. 4. Note que puede omitir el AS siempre el que Alias no vaya seguido de coma (,). 5. Cuando se trabaje con consultas Join el uso de ALIAS es importante para combinar tablas. 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

15

Você também pode gostar