You are on page 1of 17

TUTORIAL BSICO MYSQL

Autor: MySQL AB http://www.mysql.com Fuente: MySQLHispano http://www.mysql-hispano.org

Introduccin
El objetivo de este tutorial es mostrar el uso del programa cliente mysql para crear y usar una sencilla base de datos. mysql (algunas veces referido como "monitor mysql") es un programa interactivo que permite conectarnos a un servidor MySQL ejecutar algunas consultas y ver los resultados. mysql puede ser usado tambi!n en modo batc"# es decir se pueden colocar toda una serie de consultas en un arc"ivo y posteriormente decirle a mysql que ejecute dic"as consultas. Este tutorial asume que mysql est$ instalado en alguna m$quina y que disponemos de un servidor MySQL al cu$l podemos conectarnos. Si este no es el caso tenemos que contactar con nuestro administrador MySQL. (Si nosotros somos los administradores es necesario consultar la documentaci%n de MySQL que se refiere a la instalaci%n y configuraci%n del servidor MySQL). &ara ver la lista de opciones proporcionadas por mysql lo invocamos con la opci%n ''"elp# shell> mysql --help

( continuaci%n se describe el proceso completo de creaci%n y uso de una base de datos en MySQL. Si se est$ interesado s%lo en el acceso y uso de una base de datos e)istente se pueden omitir las secciones que describen como crear la base de datos y las tablas correspondientes. &uesto que es imposible que se describan a detalle muc"os de los t%picos cubiertos en este art*culo se recomienda que se consulte el manual de MySQL para obtener m$s informaci%n al respecto.

Conectndose y desconectndose al servidor MySQL


&ara conectarse al servidor usualmente necesitamos de un nombre de usuario (login) y de una contrase+a (pass,ord) y si el servidor al que nos deseamos conectar est$ en una m$quina diferente de la nuestra tambi!n necesitamos indicar el nombre o la direcci%n -& de dic"o servidor. .na ve/ que conocemos estos tres valores podemos conectarnos de la siguiente manera# shell> mysql -h NombreDelServidor -u NombreDeUsuario -p

0uando ejecutamos este comando se nos pedir$ que proporcionemos tambi!n la contrase+a para el nombre de usuario que estamos usando. Si la cone)i%n al servidor MySQL se pudo establecer de manera satisfactoria recibiremos el mensaje de bienvenida y estaremos en el prompt de mysql# shell>mysql -h casita -u blueman -p Enter password: ******

Welcome to the yS!" monitor# $ommands end with % or &'# (our yS!" connection id is ))*+ to server version: +#,+#-. /ype 0help%0 or 0&h0 1or help# /ype 0&c0 to clear the bu11er# mysql>

Este prompt nos indica que mysql est$ listo para recibir comandos. (lgunas instalaciones permiten que los usuarios se conecten de manera an%nima al servidor corriendo en la m$quina local. Si es el caso de nuestra m$quina debemos de ser capaces de conectarnos al servidor invocando a mysql sin ninguna opci%n# shell> mysql

1espu!s de que nos "emos conectado de manera satisfactoria podemos desconectarnos en cualquier momento al escribir "quit" "e)it" o presionar 023452L61. La mayor*a de los ejemplos siguientes asume que estamos conectados al servidor lo cual se indica con el prompt de mysql. Ejecutando algunas consultas En este momento debimos de "aber podido conectarnos ya al servidor MySQL a7n cuando no "emos seleccionado alguna base de datos para trabajar. Lo que "aremos a continuaci%n es escribir algunos comandos para irnos familiari/ando con el funcionamiento de mysql mysql> SE"E$/ 2E3S45N678 $U33EN/9D:/E% ;-----------;--------------; < 2E3S45N67 < $U33EN/9D:/E < ;-----------;--------------; < +#,+#-. < ,==,-.=-=. < ;-----------;--------------; . row in set 6=#=+ sec7 mysql>

Este comando ilustra distintas cosas acerca de mysql# .n comando normalmente consiste de un sentencia SQL seguida por un punto y coma. 0uando emitimos un comando mysql lo manda al servidor para que lo ejecute nos muestra los resultados y regresa el prompt indicando que est$ listo para recibir m$s consultas. mysql muestra los resultados de la consulta como una tabla (filas y columnas). La primera fila contiene etiquetas para las columnas. Las filas siguientes muestran los resultados de la consulta. 3ormalmente las etiquetas de las columnas son los nombres de los campos de las tablas que estamos usando en alguna consulta. Si lo que estamos recuperando es el valor de una e)presi%n (como en el ejemplo anterior) las etiquetas en las columnas son la e)presi%n en s*. mysql muestra cu$ntas filas fueron regresadas y cuanto tiempo tard% en ejecutarse la consulta lo cual puede darnos una idea de la eficiencia del servidor aunque estos valores pueden ser un tanto imprecisos ya que no se muestra la "ora del 0&. y porque pueden verse afectados por otros factores tales como la carga del servidor y la velocidad de comunicaci%n en una red.

Las palabras clave pueden ser escritas usando may7sculas y min7sculas.

Las siguientes consultas son equivalentes# mysql> SE"E$/ 2E3S45N678 $U33EN/9D:/E% mysql> select version678 current9date% mysql> Se"e$t vErSi5n678 current9D:/E% :qu> est? otra consulta que demuestra como se pueden escribir al'unas e@presiones matem?ticas y tri'onomAtricas: mysql> SE"E$/ S4N6B467C-78 6-;.7*)% ;-------------;---------; < S4N6B467C-7 < 6-;.7*) < ;-------------;---------; < =#D=D.=D < ,) < ;-------------;---------;

(unque "asta este momento se "an escrito sentencias sencillas de una s%la l*nea es posible escribir m$s de una sentencia por l*nea siempre y cuando est!n separadas por punto y coma# mysql> SE"E$/ 2E3S45N67% SE"E$/ N5W67% ;-----------; < 2E3S45N67 < ;-----------; < +#,+#-. < ;-----------; . row in set 6=#=. sec7 ;---------------------; < N5W67 < ;---------------------; < ,==,-.=-,E .-:,*:=- < ;---------------------; . row in set 6=#=. sec7

.n comando no necesita ser escrito en una s%la l*nea as* que los comandos que requieran de varias l*neas no son un problema. mysql determinar$ en d%nde finali/a la sentencia cuando encuentre el punto y coma no cuando encuentre el fin de l*nea. (qu* est$ un ejemplo que muestra un consulta simple escrita en varias l*neas# mysql> SE"E$/ -> USE3678 -> $U33EN/9D:/E% ;-------------------;--------------; < USE367 < $U33EN/9D:/E < ;-------------------;--------------; < bluemanFlocalhost < ,==,-=G-.< ;-------------------;--------------; . row in set 6=#== sec7

mysql>

En este ejemplo debe notarse como cambia el prompt (de mysql8 a '8) cuando se escribe una consulta en varias l*neas. Esta es la manera en c%mo mysql indica que est$ esperando a que finalice la consulta. Sin embargo si deseamos no terminar de escribir la consulta podemos "acerlo al escribir 9c como se muestra en el siguiente ejemplo# mysql> SE"E$/ -> USE3678 -> &c mysql>

1e nuevo se nos regresa el comando el prompt mysql8 que nos indica que mysql est$ listo para una nueva consulta. En la siguiente tabla se muestran cada uno de los prompts que podemos obtener y una breve descripci%n de su significado para mysql#

&rompt mysql8 '8 :8 "8

Significado Listo para una nueva consulta. Esperando la l*nea siguiente de una consulta multi'l*nea. Esperando la siguiente l*nea para completar una cadena que comien/a con una comilla sencilla ( : ). Esperando la siguiente l*nea para completar una cadena que comien/a con una comilla doble ( " ).

Los comandos multi'l*nea com7nmente ocurren por accidente cuando tecleamos E34E5 pero olvidamos escribir el punto y coma. En este caso mysql se queda esperando para que finalicemos la consulta# mysql> SE"E$/ USE367 ->

Si esto llega a suceder muy probablemente mysql estar$ esperando por un punto y coma de manera que si escribimos el punto y coma podremos completar la consulta y mysql podr$ ejecutarla# mysql> SE"E$/ USE367 -> % ;----------------; < USE367 < ;----------------; < rootFlocalhost < ;----------------; . row in set 6=#== sec7

mysql>

Los prompts :8 y "8 ocurren durante la escritura de cadenas. En mysql podemos escribir cadenas utili/ando comillas sencillas o comillas dobles (por ejemplo :"ola: y ""ola") y mysql nos permite escribir cadenas que ocupen m7ltiples l*neas. 1e manera que cuando veamos el prompt :8 o "8 mysql nos indica que "emos empe/ado a escribir una cadena pero no la "emos finali/ado con la comilla correspondiente. (unque esto puede suceder si estamos escribiendo una cadena muy grande es m$s frecuente que obtengamos alguno de estos prompts si inadvertidamente escribimos alguna de estas comillas. &or ejemplo# mysql> SE"E$/ * H35 K> mi9tabla WIE3E nombre J K"upita :ND edad L +=%

Si escribimos esta consulta SELE04 y entonces presionamos E34E5 para ver el resultado no suceder$ nada. En lugar de preocuparnos porque la consulta "a tomado muc"o tiempo debemos notar la pista que nos da mysql cambiando el prompt. Esto nos indica que mysql est$ esperando que finalicemos la cadena iniciada ("Lupita). En este caso ;qu! es lo que debemos "acer< . La cosa m$s simple es cancelar la consulta. Sin embargo no basta con escribir 9c ya que mysql interpreta esto como parte de la cadena que estamos escribiendo. En lugar de esto debemos escribir antes la comilla correspondiente y despu!s 9c # mysql> SE"E$/ * H35 K> K &c mysql> mi9tabla WIE3E nombre J K"upita :ND edad L +=%

El prompt cambiar$ de nuevo al ya conocido mysql8 indic$ndonos que mysql est$ listo para una nueva consulta. Es sumamente importante conocer lo que significan los prompts :8 y "8 ya que si en alg7n momento nos aparece alguno de ellos todas la l*neas que escribamos a continuaci%n ser$n consideradas como parte de la cadena inclusive cuando escribimos Q.-4. Esto puede ser confuso especialmente si no sabemos que es necesario escribir la comilla correspondiente para finali/ar la cadena para que podamos escribir despu!s alg7n otro comando o terminar la consulta que deseamos ejecutar.

Creando y usando una ase de datos


("ora que conocemos como escribir y ejecutar sentencias es tiempo de accesar a una base de datos. Supongamos que tenemos diversas mascotas en casa (nuestro peque+o /ool%gico) y deseamos tener registros de los datos acerca de ellas. &odemos "acer esto al crear tablas que guarden esta informaci%n para que posteriormente la consulta de estos datos sea bastante f$cil y de manera

muy pr$ctica. Esta secci%n muestra como crear una base de datos crear una tabla incorporar datos en una tabla y recuperar datos de las tablas de diversas maneras. La base de datos "/ool%gico" ser$ muy simple (deliveradamente) pero no es dif*cil pensar de situaciones del mundo real en la cual una base de datos similar puede ser usada. &rimeramente usaremos la sentencia S=2> para ver cu$les son las bases de datos e)istentes en el servidor al que estamos conectados# mysql> SI5W D:/:M:SES% ;----------; < Database < ;----------; < mysql < < test < ;----------; , rows in set 6=#== sec7 mysql>

Es probable que la lista de bases de datos que veamos sea diferente en nuestro caso pero seguramente las bases de datos "mysql" y "test" estar$n entre ellas. En particular la base de datos "mysql" es requerida ya que !sta tiene la informaci%n de los privilegios de los usuarios de MySQL. La base de datos "test" es creada durante la instalaci%n de MySQL con el prop%sito de servir como $rea de trabajo para los usuarios que inician en el aprendi/aje de MySQL. Se debe anotar tambi!n que es posible que no veamos todas las bases de datos si no tenemos el privilegio S=2> 1(4(?(SES. Se recomienda revisar la secci%n del manual de MySQL dedicada a los comandos @5(34 y 5EA2BE. Si la base de datos "test" e)iste "ay que intentar accesar a ella# mysql> USE test Database chan'ed mysql>

2bservar que .SE al igual que Q.-4 no requieren el uso del punto y coma aunque si se usa !ste no "ay ning7n problema. El comando .SE es especial tambi!n de otra manera# !ste debe ser usado en una s%la l*nea. &odr*amos usar la base de datos "test" (si tenemos acceso a ella) para los ejemplos que vienen a continuaci%n pero cualquier cosa que "agamos puede ser eliminada por cualquier otro usuario que tenga acceso a esta base de datos. &or esta ra/%n es recomendable que preguntemos al administrador MySQL acerca de la base de datos que podemos usar. Supongamos que deseamos tener una base de datos llamada "/oologico" (n%tese que no se est$ acentuando la palabra) a la cual s%lo nosotros tengamos acceso para ello el administrador necesita ejecutar un comando como el siguiente# mysql> N3:N/ :"" on Ooolo'ico#* /5 iNombreUsuarioF i$omputadora -> 4DEN/4H4ED M( 0 i$ontrasePa0%

en donde Mi om!re"suario es el nombre de usuario asignado dentro del conte)to de MySQL Mi#omputa$ora es el nombre o la direcci%n -& de la computadora desde la que nos conectamos al servidor MySQL y Mi#ontrase%a es la contrase+a que se nos "a asignado igualmente dentro del ambiente de MySQL e)clusivamente. (mbos nombre de usuario y contrase+a no tienen nada que ver con el nombre de usuario y contrase+a manejados por el sistema operativo (si es el caso). Si el administrador cre% la base de datos al momento de asignar los permisos podemos "acer uso de ella. 1e otro modo nosotros debemos crearla# mysql> USE Ooolo'ico E3353 .=-G: UnQnown database 0Ooolo'ico0 mysql>

El mensaje anterior indica que la base de datos no "a sido creada por lo tanto necesitamos crearla. mysql> $3E:/E D:/:M:SE Ooolo'ico% !uery 5R8 . row a11ected 6=#== sec7 mysql> USE Ooolo'ico Database chan'ed mysql>

?ajo el sistema operativo .ni) los nombres de las bases de datos son sensibles al uso de may7sculas y min7sculas (no como las palabras clave de SQL) por lo tanto debemos de tener cuidado de escribir correctamente el nombre de la base de datos. Esto es cierto tambi!n para los nombres de las tablas. (l crear una base de datos no se selecciona !sta de manera aut%maticaC debemos "acerlo de manera e)pl*cita por ello usamos el comando .SE en el ejemplo anterior. La base de datos se crea s%lo una ve/ pero nosotros debemos seleccionarla cada ve/ que iniciamos una sesi%n con mysql. &or ello es recomendable que se indique la base de datos sobre la que vamos a trabajar al momento de invocar al monitor de MySQL. &or ejemplo# shell>mysql -h casita -u blueman -p Ooolo'ico Enter password: ****** Welcome to the yS!" monitor# $ommands end with % or &'# (our yS!" connection id is .D to server version: +#,+#+E-nt /ype 0help%0 or 0&h0 1or help# /ype 0&c0 to clear the bu11er mysql>

2bservar que "/oologico" no es la contrase+a que se est$ proporcionando desde la l*nea de comandos sino el nombre de la base de datos a la que deseamos acceder. Si deseamos proporcionar la contrase+a en la l*nea de comandos despu!s de la opci%n "'p" debemos de "acerlo sin dejar espacios (por ejemplo -p"olaDEF no como -p "olaDEF). Sin embargo escribir

nuestra contrase+a desde la l*nea de comandos no es recomendado ya que es bastante inseguro.

Creando una ta la
0rear la base de datos es la parte m$s f$cil pero en este momento la base de datos est$ vac*a como lo indica el comando S=2> 4(?LES# mysql> SI5W /:M"ES% Empty set 6=#== sec7

La parte un tanto complicada es decidir la estructura que debe tener nuestra base de datos# qu! tablas se necesitan y qu! columnas estar$n en cada tabla. En principio necesitamos una tabla que contenga un registro para cada una de nuestras mascotas. Gsta puede ser una tabla llamada mascotas y debe contener por lo menos el nombre de cada uno de nuestros animalitos. Ha que el nombre en s* no es muy interesante la tabla debe contener alguna otra informaci%n. &or ejemplo si m$s de una persona en nuestra familia tiene una mascota es probable que tengamos que guardar la informaci%n acerca de quien es el due+o de cada mascota. (s* mismo tambi!n ser*a interesante contar con alguna informaci%n m$s descriptiva tal como la especie y el se)o de cada mascota. ;H que sucede con la edad<. Esto puede ser tambi!n de inter!s pero no es una buena idea almacenar este dato en la base de datos. La edad cambia conforme pasa el tiempo lo cual significa que debemos de actuali/ar los registros frecuentemente. En ve/ de esto es una mejor idea guardar un valor fijo tal como la fec"a de nacimiento. Entonces cuando necesitemos la edad la podemos calcular como la diferencia entre la fec"a actual y la fec"a de nacimiento. MySQL proporciona funciones para "acer operaciones entre fec"as as* que no "ay ning7n problema. (l almacenar la fec"a de nacimiento en lugar de la edad tenemos algunas otras ventajas# &odemos usar la base de datos para tareas tales como generar recordatorios para cada cumplea+os pr%)imo de nuestras mascotas. &odemos calcular la edad en relaci%n a otras fec"as que la fec"a actual. &or ejemplo si almacenamos la fec"a en que muri% nuestra mascota en la base de datos es f$cil calcular que edad ten*a nuestro animalito cuando falleci%. Es probable que estemos pensando en otro tipo de informaci%n que ser*a igualmente 7til en la tabla "mascotas" pero para nosotros ser$ suficiente por a"ora contar con informaci%n de nombre propietario especie nacimiento y fallecimiento. .saremos la sentencia 05E(4E 4(?LE para indicar como estar$n conformados los registros de nuestras mascotas. mysql> $3E:/E /:M"E mascotas6 -> nombre 2:3$I:36,=78 propietario 2:3$I:36,=78 -> especie 2:3$I:36,=78 se@o $I:36.78 nacimiento D:/E8 -> 1allecimento D:/E7% !uery 5R8 = rows a11ected 6=#=, sec7 mysql>

A(50=(5 es una buena elecci%n para los campos nombre propietario y especie ya que los

valores que almacenar$n son de longitud variable. 3o es necesario que la longitud de estas columnas sea la misma ni tampoco que sea de EI. Se puede especificar cualquier longitud entre D y EJJ lo que se considere m$s adecuado. Si resulta que la elecci%n de la longitud de los campos que "emos "ec"o no result% adecuada MySQL proporciona una sentencia (L4E5 4(?LE que nos puede ayudar a solventar este problema. El campo se)o puede ser representado en una variedad de formas por ejemplo "m" y "f" o tal ve/ "masculino" y "femenino" aunque resulta m$s simple la primera opci%n. El uso del tipo de dato 1(4E para los campos nacimiento y fallecimento debe de resultar obvio. ("ora que "emos creado la tabla la sentencia S=2> 4(?LES debe producir algo como# mysql> SI5W /:M"ES% ;---------------------; < /ables9in9Ooolo'ico < ;---------------------; < mascotas < ;---------------------; . row in set 6=#== sec7 mysql>

&ara verificar que la tabla fu! creada como nosotros esperabamos usaremos la sentencia 1ES05-?E# mysql> DES$34ME mascotas% ;--------------;-------------;------;-----;---------;-------; < Hield < /ype < Null < Rey < De1ault < E@tra < ;--------------;-------------;------;-----;---------;-------; < nombre < varchar6,=7 < (ES < < NU"" < < < propietario < varchar6,=7 < (ES < < NU"" < < < especie < varchar6,=7 < (ES < < NU"" < < < se@o < char6.7 < (ES < < NU"" < < < nacimiento < date < (ES < < NU"" < < < 1allecimento < date < (ES < < NU"" < < ;--------------;-------------;------;-----;---------;-------; * rows in set 6=#=. sec7 mysql>

&odemos "acer uso de la sentencia 1ES05-?E en cualquier momento por ejempo si olvidamos los nombres % el tipo de las columnas en la tabla.

Car!ando datos en una ta la


1espu!s de "aber creado la tabla a"ora podemos incorporar algunos datos en ella para lo cual "aremos uso de las sentencias -3SE54 y L2(1 1(4(. Supongamos que los registros de nuestras mascotas pueden ser descritos por los datos mostrados en la siguiente tabla.

3ombre Kluffy Mau ?uffy KanKan Baiser 0"ispa >ic"o SQim

&ropietario (rnoldo Nuan (rnoldo ?enito 1iana 2mar 4om$s ?enito

Especie @ato @ato &erro &erro &erro (ve (ve Serpiente

Se)o f m f m m f m

3acimiento DLLL'IE'IM DLLO'IF'DP DLLL'IJ'DF EIII'IO'EP DLLO'IO'FD DLLO'IL'DD EIII'IE'IL EIID'IM'EL

Kallecimento

DLLP'IP'EL

1ebemos observar que MySQL espera recibir fec"as en el formato HHHH'MM'11 que puede ser diferente a lo que nosotros estamos acostumbrados. Ha que estamos iniciando con una tabla vac*a la manera m$s f$cil de poblarla es crear un arc"ivo de te)to que contenga un registro por l*nea para cada uno de nuestros animalitos para que posteriormente carguemos el contenido del arc"ivo en la tabla 7nicamente con una sentencia. &or tanto debemos de crear un arc"ivo de te)to "mascotas.t)t" que contenga un registro por l*nea con valores separados por tabuladores cuidando que el orden de las columnas sea el mismo que utili/amos en la sentencia 05E(4E 4(?LE. &ara valores que no cono/camos podemos usar valores nulos (3.LL). &ara representar estos valores en nuestro arc"ivo debemos usar 93. El arc"ivo mascotas.t)t contendr$# Hlu11y au Mu11y HanHan Raiser $hispa Wicho SQim :rnoldo Suan :rnoldo Menito Diana 5mar /om?s Menito Nato 1 Nato m Berro 1 Berro m Berro m :ve 1 :ve &N Serpiente .GGG-=,-=&N .GGE-=+-.D &N .GGG-=)-.+ &N ,===-=E-,D &N .GGE-=E-+. .GGD-=D-,G .GGE-=G-.. &N ,===-=,-=G &N m ,==.-=--,G &N

&ara cargar el contenido del arc"ivo en la tabla mascotas usaremos el siguiente comando# mysql> "5:D D:/: "5$:" 4NH4"E Kmascotas#t@tK 4N/5 /:M"E mascotas%

La sentencia L2(1 1(4( nos permite especificar cu$l es el separador de columnas y el separador de registros por default el tabulador es el separador de columnas (campos) y el salto de l*nea es el separador de registros que en este caso son suficientes para que la sentencia L2(1 1(4( lea correctamente el arc"ivo "mascotas.t)t". Si lo que deseamos es a+adir un registro a la ve/ entonces debemos "acer uso de la sentencia -3SE54. En la manera m$s simple debemos proporcionar un valor para cada columna en el orden en el cual fueron listados en la sentencia 05E(4E 4(?LE. Supongamos que nuestra "ermana 1iana compra un nuevo "amster nombrado &elusa. &odemos usar la sentencia -3SE54 para agregar su registro en nuestra base de datos.

mysql> 4NSE3/ 4N/5 mascotas -> 2:"UES60Belusa080Diana080Iamster0801080,===-=+-+=08NU""7%

3otar que los valores de cadenas y fec"as deben estar encerrados entre comillas. 4ambi!n con la sentencia -3SE54 podemos insertar el valor 3.LL directamente para representar un valor nulo un valor que no conocemos. En este caso no se usa 93 como en el caso de la sentencia L2(1 1(4(. 1e este ejemplo debemos ser capaces de ver que es un poco m$s la tarea que se tiene que reali/ar si inicialmente cargamos los registros con varias sentencias -3SE54 en lugar de una 7nica sentencia L2(1 1(4(.

Recu"erando in#or$acin de una ta la


La sentencia SELE04 es usada para obtener la informaci%n guardada en una tabla. La forma general de esta sentencia es# SE"E$/ "a4n1ormaciTn!ueDeseamos H35 De!ue/abla WIE3E $ondiciTn:Satis1acer

(qu* La&n'ormaci(nQue)eseamos es la informaci%n que queremos ver. Esta puede ser una lista de columnas o un R para indicar "todas las columnas". )eQue*a!la indica el nombre de la tabla de la cual vamos a obtener los datos. La cla7sula >=E5E es opcional. Si est$ presente la #on$ici(nASatis'acer especifica las condiciones que los registros deben satisfacer para que puedan ser mostrados.

Seleccionando todos los datos

La manera m$s simple de la sentencia SELE04 es cuando se recuperan todos los datos de una tabla# mysql> SE"E$/ * H35 mascotas% ;--------;-------------;-----------;------;------------;---------------; < nombre < propietario < especie < se@o < nacimiento < 1allecimiento < ;--------;-------------;-----------;------;------------;---------------; < Hlu11y < :rnoldo < Nato < 1 < .GGG-=,-=- < NU"" < < au < Suan < Nato < m < .GGE-=+-.D < NU"" < < Mu11y < :rnoldo < Berro < 1 < .GGG-=)-.+ < NU"" < < HanHan < Menito < Berro < m < ,===-=E-,D < NU"" < < Raiser < Diana < Berro < m < .GGE-=E-+. < .GGD-=D-,G < < $hispa < 5mar < :ve < 1 < .GGE-=G-.. < NU"" < < Wicho < /om?s < :ve < NU"" < ,===-=,-=G < NU"" < < SQim < Menito < Serpiente < m < ,==.-=--,G < NU"" < < Belusa < Diana < Iamster < 1 < ,===-=+-+= < NU"" < ;--------;-------------;-----------;------;------------;---------------; G rows in set 6=#== sec7

Esta forma del SELE04 es 7til si deseamos ver los datos completos de la tabla por ejemplo para asegurarnos de que est$n todos los registros despu!s de la carga de un arc"ivo. &or ejemplo en este caso que estamos tratando al consultar los registros de la tabla nos damos cuenta de que "ay un error en el arc"ivo de datos (mascotas.t)t)# parece que +aiser "a nacido despu!s de que "a fallecidoS. (l revisar un poco el pedigree de +aiser encontramos que la fec"a correcta de nacimiento es el a+o DLOL no DLLO. =ay por lo menos un par de maneras de solucionar este problema# Editar el arc"ivo "mascotas.t)t" para corregir el error eliminar los datos de la tabla mascotas con la sentencia 1ELE4E y cargar los datos nuevamente con el comando L2(1 1(4(# mysql> DE"E/E H35 mascotas% mysql> "5:D D:/: "5$:" 4NH4"E Kmascotas#t@tK 4N/5 /:M"E mascotas%

Sin embargo si "acemos esto debemos ingresar los datos de ,elusa la mascota de nuestra "ermana 1iana. La segunda opci%n consiste en corregir s%lo el registro err%neo con una sentencia .&1(4E# mysql> UBD:/E mascotas SE/ nacimientoJK.GEG-=E-+.K WIE3E nombreJKRaiserK%

0omo se mostr% anteriormente es muy f$cil recuperar los datos de una tabla completa. &ero t*picamente no deseamos "acer esto particularmente cuando las tablas son demasiado grandes. En ve/ de ello estaremos m$s interesados en responder preguntas particulares en cuyo caso debemos especificar algunas restricciones para la informaci%n que deseamos ver.

Seleccionando registros particulares

&odemos seleccionar s%lo registros particulares de una tabla. &or ejemplo si deseamos verificar el cambio que "icimos a la fec"a de nacimiento de +aiser seleccionamos s%lo el registro de +aiser de la siguiente manera# mysql> SE"E$/ * H35 mascotas WIE3E nombreJKRaiserK% ;--------;-------------;---------;------;------------;--------------; < nombre < propietario < especie < se@o < nacimiento < 1allecimento < ;--------;-------------;---------;------;------------;--------------; < Raiser < Diana < Berro < m < .GEG-=E-+. < .GGD-=D-,G < ;--------;-------------;---------;------;------------;--------------; . row in set 6=#== sec7

La salida mostrada confirma que el a+o "a sido corregido de DLLO a DLOL. La comparaci%n de cadenas es normalmente no sensitiva as* que podemos especificar el nombre como "Qaiser" "B(-SE5" etc. El resultado de la consulta ser$ el mismo. &odemos adem$s especificar condiciones sobre cualquier columna no s%lo el "nombre". &or ejemplo si deseamos conocer qu! mascotas nacieron despu!s del EIII tendr*amos que usar la

columna "nacimiento"# mysql> SE"E$/ * H35 mascotas WIE3E nacimiento >J K,===-.-.K% ;--------;-------------;-----------;------;------------;---------------; < nombre < propietario < especie < se@o < nacimiento < 1allecimiento < ;--------;-------------;-----------;------;------------;---------------; < HanHan < Menito < Berro < m < ,===-=E-,D < NU"" < < Wicho < /om?s < :ve < NU"" < ,===-=,-=G < NU"" < < SQim < Menito < Serpiente < m < ,==.-=--,G < NU"" < < Belusa < Diana < Iamster < 1 < ,===-=+-+= < NU"" < ;--------;-------------;-----------;------;------------;---------------; - rows in set 6=#== sec7

&odemos tambi!n combinar condiciones por ejemplo para locali/ar a los perros "embras# mysql> SE"E$/ * H35 mascotas WIE3E especieJKBerroK :ND se@oJK1K% ;--------;-------------;---------;------;------------;---------------; < nombre < propietario < especie < se@o < nacimiento < 1allecimiento < ;--------;-------------;---------;------;------------;---------------; < Mu11y < :rnoldo < Berro < 1 < .GGG-=)-.+ < NU"" < ;--------;-------------;---------;------;------------;---------------; . row in set 6=#== sec7 "a consulta anterior usa el operador lT'ico :ND# Iay tambiAn un operador lT'ico 53: mysql> SE"E$/ * H35 mascotas WIE3E especie J K:veK 53 especie J KNatoK% ;--------;-------------;---------;------;------------;---------------; < nombre < propietario < especie < se@o < nacimiento < 1allecimiento < ;--------;-------------;---------;------;------------;---------------; < Hlu11y < :rnoldo < Nato < 1 < .GGG-=,-=- < NU"" < < au < Suan < Nato < m < .GGE-=+-.D < NU"" < < $hispa < 5mar < :ve < 1 < .GGE-=G-.. < NU"" < < Wicho < /om?s < :ve < NU"" < ,===-=,-=G < NU"" < ;--------;-------------;---------;------;------------;---------------; - rows in set 6=#== sec7

El operador (31 y el operador 25 pueden ser intercambiados. Si "acemos esto es buena idea usar par!ntesis para indicar como deben ser agrupadas las condiciones# mysql> SE"E$/ * H35 mascotas WIE3E 6especie J KNatoK :ND se@o J KmK7 -> 53 6especie J KBerroK :ND se@o J K1K7% ;--------;-------------;---------;------;------------;---------------; < nombre < propietario < especie < se@o < nacimiento < 1allecimiento < ;--------;-------------;---------;------;------------;---------------; < au < Suan < Nato < m < .GGE-=+-.D < NU"" < < Mu11y < :rnoldo < Berro < 1 < .GGG-=)-.+ < NU"" < ;--------;-------------;---------;------;------------;---------------; , rows in set 6=#== sec7

Seleccionando columnas particulares

Si no deseamos ver los registros completos de una tabla entonces tenemos que usar los nombres de las columnas en las que estamos interesados separ$ndolas por coma. &or ejemplo si deseamos conocer la fec"a de nacimiento de nuestras mascotas debemos seleccionar la columna "nombre" y "nacimiento"# mysql> SE"E$/ nombre8 nacimiento H35 ;--------;------------; < nombre < nacimiento < ;--------;------------; < Hlu11y < .GGG-=,-=- < < au < .GGE-=+-.D < < Mu11y < .GGG-=)-.+ < < HanHan < ,===-=E-,D < < Raiser < .GEG-=E-+. < < $hispa < .GGE-=G-.. < < Wicho < ,===-=,-=G < < SQim < ,==.-=--,G < < Belusa < ,===-=+-+= < ;--------;------------; G rows in set 6=#== sec7 mascotas%

&ara conocer qui!n tiene alguna mascota usaremos la siguiente consulta# mysql> SE"E$/ propietario H35 ;-------------; < propietario < ;-------------; < :rnoldo < < Suan < < :rnoldo < < Menito < < Diana < < 5mar < < /om?s < < Menito < < Diana < ;-------------; G rows in set 6=#== sec7 mascotas%

Sin embargo debemos notar que la consulta recupera el nombre del propietario de cada mascota y algunos de ellos aparecen m$s de una ve/. &ara minimi/ar la salida agregaremos la palabra clave 1-S4-304# mysql> SE"E$/ D4S/4N$/ propietario H35 ;-------------; < propietario < ;-------------; < :rnoldo < < Suan < mascotas%

< Menito < < Diana < < 5mar < < /om?s < ;-------------; * rows in set 6=#=+ sec7

Se puede usar tambi!n una cla7sula >=E5E para combinar selecci%n de filas con selecci%n de columnas. &or ejemplo para obtener la fec"a de nacimiento de los perritos y los gatitos usaremos la siguiente consulta# mysql> SE"E$/ nombre8 especie8 nacimiento H35 mascotas -> WIE3E especie J KperroK 53 especie J K'atoK% ;--------;---------;------------; < nombre < especie < nacimiento < ;--------;---------;------------; < Hlu11y < Nato < .GGG-=,-=- < < au < Nato < .GGE-=+-.D < < Mu11y < Berro < .GGG-=)-.+ < < HanHan < Berro < ,===-=E-,D < < Raiser < Berro < .GEG-=E-+. < ;--------;---------;------------; ) rows in set 6=#== sec7

Ordenando re!istros
Se debe notar en los ejemplos anteriores que las filas regresadas son mostradas sin ning7n orden en particular. Sin embargo frecuentemente es m$s f$cil e)aminar la salida de una consulta cuando las filas son ordenadas en alguna forma 7til. &ara ordenar los resultados tenemos que usar una cl$usula 251E5 ?H . (qu* aparecen algunos datos ordenados por fec"a de nacimiento# mysql> SE"E$/ nombre8 nacimiento H35 ;--------;------------; < nombre < nacimiento < ;--------;------------; < Raiser < .GEG-=E-+. < < au < .GGE-=+-.D < < $hispa < .GGE-=G-.. < < Hlu11y < .GGG-=,-=- < < Mu11y < .GGG-=)-.+ < < Wicho < ,===-=,-=G < < Belusa < ,===-=+-+= < < HanHan < ,===-=E-,D < < SQim < ,==.-=--,G < ;--------;------------; G rows in set 6=#== sec7 mascotas 53DE3 M( nacimiento%

En las columnas de tipo caracter el ordenamiento es ejecutado normalmente de forma no sensitiva es decir no "ay diferencia entre may7sculas y min7sculas. Sin embargo se puede for/ar un ordenamiento sensitivo al usar el operador ?-3(5H . &ara ordenar en orden inverso debemos agregar la palabra clave 1ES0 al nombre de la columna que estamos usando en el ordenamiento# mysql> SE"E$/ nombre8 nacimiento H35 -> nacimiento DES$% ;--------;------------; < nombre < nacimiento < ;--------;------------; < SQim < ,==.-=--,G < < HanHan < ,===-=E-,D < < Belusa < ,===-=+-+= < < Wicho < ,===-=,-=G < < Mu11y < .GGG-=)-.+ < < Hlu11y < .GGG-=,-=- < < $hispa < .GGE-=G-.. < < au < .GGE-=+-.D < < Raiser < .GEG-=E-+. < ;--------;------------; G rows in set 6=#== sec7 mascotas 53DE3 M(

&odemos ordenar m7ltiples columnas. &or ejemplo para ordenar por tipo de animal y poner al inicio los animalitos m$s peque+os de edad usaremos la siguiente consulta# mysql> SE"E$/ nombre8 especie8 nacimiento H35 -> 53DE3 M( especie8 nacimiento DES$% ;--------;-----------;------------; < nombre < especie < nacimiento < ;--------;-----------;------------; < Wicho < :ve < ,===-=,-=G < < $hispa < :ve < .GGE-=G-.. < < Hlu11y < Nato < .GGG-=,-=- < < au < Nato < .GGE-=+-.D < < Belusa < Iamster < ,===-=+-+= < < HanHan < Berro < ,===-=E-,D < < Mu11y < Berro < .GGG-=)-.+ < < Raiser < Berro < .GEG-=E-+. < < SQim < Serpiente < ,==.-=--,G < ;--------;-----------;------------; G rows in set 6=#== sec7 mascotas

3otar que la palabra clave 1ES0 aplica s%lo a la columna nombrada que le precede.

You might also like