Está en la página 1de 24

Tutorial bsico de MySQL

Autor: MySQL AB
Traductor: MySQL Hispano
En esta pgina:
Introduccin
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 re"erido 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 cual podemos conectarnos Si este no es el caso% tenemos
que contactar con nuestro administrador MySQL !Si nosotros somos los
administradores% es necesario consultar la documentacin de MySQL que se re"ieren
a la instalacin y con"iguracin del servidor MySQL$
*ara ver la lista de opciones proporcionadas por mysql% lo invocamos con la opcin
++'elp(
shell> mysql --help
A continuacin se describe el proceso completo de creacin y uso de una base de
datos en MySQL Si se est) interesado slo 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 tpicos cubiertos
aqu-% se recomienda que se consulte el manual de MySQL para obtener m)s
in"ormacin al respecto
.onect)ndose y desconect)ndose al servidor MySQL
Conectndose y desconectndose al servidor MySQL
*ara conectarse al servidor% usualmente necesitamos de un nombre de usuario
!login$ y de una contrase/a !pass0ord$% y si el servidor al que nos deseamos
conectar est) en una m)quina di"erente de la nuestra% tambi&n necesitamos indicar
el nombre o la direccin I* de dic'o servidor 1na ve2 que conocemos estos tres
valores% podemos conectarnos de la siguiente manera(
shell> mysql -h NombreDelServidor -u NombreDeUsuario -p
.uando ejecutamos este comando% se nos pedir) que proporcionemos tambi&n la
contrase/a para el nombre de usuario que estamos usando
Si la cone,in al servidor MySQL se pudo establecer de manera satis"actoria%
recibiremos el mensaje de bienvenida y estaremos en el prompt de mysql(
shell>mysql -h casita -u root -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
Algunas instalaciones permiten que los usuarios se conecten de manera annima 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 opcin(
shell> mysql
3espu&s de que nos 'emos conectado de manera satis"actoria% podemos
desconectarnos en cualquier momento al escribir #quit#% #e,it#% o presionar
.45674L83
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
Ejecutando algunas consultas
En este momento debimos de 'aber podido conectarnos ya al servidor MySQL% a9n
cuando no 'emos seleccionado alguna base de datos para trabajar Lo que 'aremos
a continuacin es escribir algunos comandos para irnos "amiliari2ando con el
"uncionamiento de mysql
mysql> SE"E$/ 2E3S45N678 $U33EN/9D:/E%
;-----------;--------------;
< 2E3S45N67 < $U33EN/9D:/E <
;-----------;--------------;
< +#,+#-. < ,==,-.=-=. <
;-----------;--------------;
. row in set 6=#=+ sec7
mysql>
Esta comando ilustra distintas cosas acerca de mysql(
Un comando normalmente consiste de un sentencia SQL seguida por un punto y coma.
Cuando emitimos un comando mys!l lo manda al servidor para !ue lo ejecute nos muestra los
resultados y regresa el prompt indicando !ue est listo para reci"ir ms consultas.
mys!l muestra los resultados de la consulta como una ta"la #$ilas y columnas%. La primera $ila
contiene eti!uetas para las columnas. Las $ilas siguientes muestran los resultados de la consulta.
&ormalmente las eti!uetas de las columnas son los nom"res de los campos de las ta"las !ue
estamos usando en alguna consulta. Si lo !ue estamos recuperando es el valor de una e'presin
#como en el ejemplo anterior% las eti!uetas en las columnas son la e'presin en s(.
mys!l muestra cuntas $ilas $ueron regresadas y cuanto tiempo tard en ejecutarse la consulta
lo cual puede darnos una idea de la e$iciencia del servidor aun!ue estos valores pueden ser un
tanto imprecisos ya !ue no se muestra la )ora del C*U y por!ue pueden verse a$ectados por
otros $actores tales como la carga del servidor y la velocidad de comunicacin en una red.
Las pala"ras clave pueden ser escritas usando may+sculas y min+sculas.
Las siguientes consultas son equivalentes(
mysql> SE"E$/ 2E3S45N678 $U33EN/9D:/E%
mysql> select version678 current9date%
mysql> Se"e$t vErSi5n678 current9D:/E%
Aqu- est) otra consulta que demuestra como se pueden escribir algunas
e,presiones matem)ticas y trigonom&tricas(
mysql> SE"E$/ S4N6>467?-78 6-;.7*)%
;-------------;---------;
< S4N6>467?-7 < 6-;.7*) <
;-------------;---------;
< =#@=@.=@ < ,) <
;-------------;---------;
Aunque 'asta este momento se 'an escrito sentencias sencillas de una sla 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 <
;---------------------;
< ,==,-.=-,A .-:,*:=- <
;---------------------;
. row in set 6=#=. sec7
1n comando no necesita ser escrito en una sla l-nea% as- que los comandos que
requieran de varias l-neas no son un problema mysql determinar) en donde "inali2a
la sentencia cuando encuentre el punto y coma% no cuando encuentre el "in de
l-nea
Aqu- est) un ejemplo que muestra un consulta simple escrita en varias l-neas(
mysql> SE"E$/
-> USE3678
-> $U33EN/9D:/E%
;----------------;--------------;
< USE367 < $U33EN/9D:/E <
;----------------;--------------;
< rootBlocalhost < ,==,-=C-.- <
;----------------;--------------;
. row in set 6=#== sec7
mysql>
En este ejemplo debe notarse como cambia el prompt !de mysql: a +:$ cuando se
escribe una consulta en varias l-neas Esta es la manera en cmo mysql indica que
est) esperando a que "inalice la consulta Sin embargo si deseamos no terminar de
escribir la consulta% podemos 'acerlo al escribir ;c como se muestra en el siguiente
ejemplo(
mysql> SE"E$/
-> USE3678
-> &c
mysql>
3e nuevo% se nos regresa el comando el prompt mysql: 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 descripcin de su signi"icado para mysql(
Prompt Significado
mysql: 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 comien2a con
una comilla sencilla !<$
#:
Esperando la siguiente l-nea para completar una cadena que comien2a con
una comilla doble !#$
Los comandos multi+l-nea com9nmente ocurren por accidente cuando tecleamos
E56E7% pero olvidamos escribir el punto y coma En este caso mysql se queda
esperando para que "inalicemos 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 <
;----------------;
< rootBlocalhost <
;----------------;
. row in set 6=#== sec7
mysql>
Los prompts <: y #: ocurren durante la escritura de cadenas En mysql podemos
escribir cadenas utili2ando comillas sencillas o comillas dobles !por ejemplo% <'ola< y
#'ola#$% y mysql nos permite escribir cadenas que ocupen multiple l-neas 3e
manera que cuando veamos el prompt <: o #: % mysql nos indica que 'emos
empe2ado a escribir una cadena% pero no la 'emos "inali2ado con la comilla
correspondiente
Aunque esto puede suceder si estamos escribiendo una cadena muy grande% es m)s
"recuente que obtengamos alguno de estos prompts si inadvertidamente escribimos
alguna de estas comillas
*or ejemplo(
mysql> SE"E$/ * D35 mi9tabla WEE3E nombre F G"upita :ND edad H +=%
G>
Si escribimos esta consulta SELE.6 y entonces presionamos E56E7 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 "inalicemos 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 ;c% 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 ;c (
mysql> SE"E$/ * D35 mi9tabla WEE3E nombre F G"upita :ND edad H +=%
G> G &c
mysql>
El prompt cambiar) de nuevo al ya conocido mysql:% indic)ndonos que mysql est)
listo para una nueva consulta
Es sumamente importante conocer lo que signi"ican los prompts <: y #:% ya que si
en alg9n momento nos aparece alguno de ellos% todas la l-neas que escribamos a
continuacin ser)n consideradas como parte de la cadena% inclusive cuando
escribimos Q1I6 Esto puede ser con"uso% especialmente si no sabemos que es
necesario escribir la comilla correspondiente para "inali2ar la cadena% para que
podamos escribir despu&s alg9n otro comando% o terminar la consulta que
deseamos ejecutar
.reando y usando una base de datos
Creando y usando una "ase de datos
A'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 2oolgico$
y deseamos tener registros de los datos acerca de ellas *odemos 'acer esto al
crear tablas que guarden esta in"ormacin% para que posteriormente la consulta de
estos datos sea bastante ")cil y de manera muy pr)ctica Esta seccin 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 #2oolgico# ser) muy simple !deliveradamente$% pero no es di"-cil
pensar de situaciones del mundo real en la cual una base de datos similar puede
ser usada
*rimeramente usaremos la sentencia SH4? para ver cu)les son las bases de datos
e,istentes en el servidor al que estamos conectados(
mysql> SE5W D:/:I:SES%
;----------;
< Database <
;----------;
< mysql <
< test <
;----------;
, rows in set 6=#== sec7
mysql>
Es probable que la lista de bases de datos que veamos sea di"erente 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 in"ormacin
de los privilegios de los usuarios de MySQL La base de datos #test# es creada
durante la instalacin de MySQL con el propsito de servir como )rea de trabajo
para los usuarios que inician en el aprendi2aje de MySQL
Se debe anotar tambi&n que es posible que no veamos todas las bases de datos si
no tenemos el privilegio SH4? 3A6ABASES Se recomienda revisar la seccin del
manual de MySQL dedicada a los comandos @7A56 y 7EA4BE
Si la base de datos #test# e,iste% 'ay que intentar accesar a ella(
mysql> USE test
Database chan'ed
mysql>
4bservar que 1SE% al igual que Q1I6% no requieren el uso del punto y coma% aunque
si se usa &ste% no 'ay ning9n problema El comando 1SE es especial tambi&n de
otra manera( &ste debe ser usado en una sla l-nea
*odr-amos usar la base de datos #test# !si tenemos acceso a ella$ para los ejemplos
que vienen a continuacin% pero cualquier cosa que 'agamos puede ser eliminada
por cualquier otro usuario que tenga acceso a esta base de datos *or esta ra2n%
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 #2oologico# !ntese que no se est) acentuando la palabra$ a la cual slo
nosotros tengamos acceso% para ello el administrador necesita ejecutar un comando
como el siguiente(
mysql> J3:N/ :"" on Koolo'ico#* /5 iNombreUsuarioBi$omputadora
-> 4DEN/4D4ED I( 0i$ontraseLa0%
en donde Mi5ombre1suario es el nombre de usuario asignado dentro del conte,to
de MySQL% Mi.omputadora es el nombre o la direccin I* 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
Ambos% 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 3e otro modo% nosotros debemos crearla(
mysql> USE Koolo'ico
E3353 .=-C: UnMnown database 0Koolo'ico0
mysql>
El mensaje anterior indica que la base de datos no 'a sido creada% por lo tanto
necesitamos crearla
mysql> $3E:/E D:/:I:SE Koolo'ico%
!uery 5N8 . row a11ected 6=#== sec7
mysql> USE Koolo'ico
Database chan'ed
mysql>
Bajo el sistema operativo 1ni,% los nombres de las bases de datos son sensibles al
uso de may9sculas y min9sculas !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
Al crear una base de datos no se selecciona &sta de manera autmaticaC debemos
'acerlo de manera e,pl-cita% por ello usamos el comando 1SE en el ejemplo
anterior
La base de datos se crea slo una ve2% pero nosotros debemos seleccionarla cada
ve2 que iniciamos una sesin 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 Koolo'ico
Enter password: ******
Welcome to the yS!" monitor# $ommands end with % or &'#
(our yS!" connection id is .@ to server version: +#,+#+A-nt
/ype 0help%0 or 0&h0 1or help# /ype 0&c0 to clear the bu11er
mysql>
4bservar que #2oologico# 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
opcin #+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
.reando una tabla
Creando una ta"la
.rear la base de datos es la parte m)s ")cil% pero en este momento la base de
datos est) vac-a% como lo indica el comando SH4? 6ABLES(
mysql> SE5W /:I"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 in"ormacin *or
ejemplo% si m)s de una persona en nuestra "amilia tiene una mascota% es probable
que tengamos que guardar la in"ormacin acerca de quien es el due/o de cada
mascota As- mismo% tambi&n ser-a interesante contar con alguna in"ormacin 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 con"orme
pasa el tiempo% lo cual signi"ica que debemos de actuali2ar los registros
"recuentemente En ve2 de esto% es una mejor idea guardar un valor "ijo% tal como
la "ec'a de nacimiento Entonces% cuando necesitemos la edad% la podemos calcular
como la di"erencia entre la "ec'a actual y la "ec'a de nacimiento MySQL
proporciona "unciones para 'acer operaciones entre "ec'as% as- que no 'ay ning9n
problema
Al almacenar la "ec'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
relacin a otras "ec'as que la "ec'a actual *or ejemplo% si almacenamos la "ec'a en
que muri nuestra mascota en la base de datos% es ")cil calcular que edad ten-a
nuestro animalito cuando "alleci Es probable que estemos pensando en otro tipo
de in"ormacin que ser-a igualmente 9til en la tabla #mascotas#% pero para nosotros
ser) su"iciente por a'ora contar con in"ormacin de nombre% propietario% especie%
nacimiento y "allecimiento
1saremos la sentencia .7EA6E 6ABLE para indicar como estar)n con"ormados los
registros de nuestras mascotas
mysql> $3E:/E /:I"E mascotas6
-> nombre 2:3$E:36,=78 propietario 2:3$E:36,=78
-> especie 2:3$E:36,=78 seOo $E:36.78 nacimiento D:/E8
-> 1allecimento D:/E7%
!uery 5N8 = rows a11ected 6=#=, sec7
mysql>
AA7.HA7 es una buena eleccin para los campos nombre% propietario% y especie% ya
que los valores que almacenar)n son de longitud variable 5o es necesario que la
longitud de estas columnas sea la misma% ni tampoco que sea de EI Se puede
especi"icar cualquier longitud entre D y EJJ% lo que se considere m)s adecuado Si
resulta que la eleccin de la longitud de los campos que 'emos 'ec'o no result
adecuada% MySQL proporciona una sentencia AL6E7 6ABLE que nos puede ayudar a
solventar este problema
El campo se,o puede ser representado en una variedad de "ormas% por ejemplo%
#m# y #"#% o tal ve2 #masculino# y #"emenino#% aunque resulta m)s simple la primera
opcin
El uso del tipo de dato 3A6E para los campos nacimiento y "allecimento debe de
resultar obvio
A'ora que 'emos creado la tabla% la sentencia SH4? 6ABLES debe producir algo
como(
mysql> SE5W /:I"ES%
;---------------------;
< /ables9in9Koolo'ico <
;---------------------;
< mascotas <
;---------------------;
. row in set 6=#== sec7
mysql>
*ara veri"icar que la tabla "u& creada como nosotros esperabamos% usaremos la
sentencia 3ES.7IBE(
mysql> DES$34IE mascotas%
;--------------;-------------;------;-----;---------;-------;
< Dield < /ype < Null < Ney < De1ault < EOtra <
;--------------;-------------;------;-----;---------;-------;
< nombre < varchar6,=7 < (ES < < NU"" < <
< propietario < varchar6,=7 < (ES < < NU"" < <
< especie < varchar6,=7 < (ES < < NU"" < <
< seOo < char6.7 < (ES < < NU"" < <
< nacimiento < date < (ES < < NU"" < <
< 1allecimento < date < (ES < < NU"" < <
;--------------;-------------;------;-----;---------;-------;
* rows in set 6=#=. sec7
mysql>
*odemos 'acer uso de la sentencia 3ES.7IBE en cualquier momento% por ejempo%
si olvidamos los nombres el tipo de las columnas en la tabla
7ecuperando in"ormacin de una tabla
o Seleccionando todos los datos
o Seleccionando registros particulares
o Seleccionando columnas particulares
,ecuperando in$ormacin de una ta"la
La sentencia SELE.6 es usada para obtener la in"ormacin guardada en una tabla
La "orma general de esta sentencia es(
SE"E$/ "a4n1ormaciPn!ueDeseamos D35 De!ue/abla WEE3E $ondiciPn:Satis1acer
Aqu-% LaIn"ormacinQue3eseamos es la in"ormacin que queremos ver Esta puede
ser una lista de columnas% o un K para indicar #todas las columnas# 3eQue6abla
indica el nombre de la tabla de la cual vamos a obtener los datos La cla9sula
?HE7E es opcional Si est) presente% la .ondicinASatis"acer especi"ica las
condiciones que los registros deben satis"acer para que puedan ser mostrados
Seleccionando todos los datos
La manera m)s simple de la sentencia SELE.6 es cuando se recuperan todos los
datos de una tabla(
mysql> SE"E$/ * D35 mascotas%
;--------;-------------;-----------;------;------------;---------------;
< nombre < propietario < especie < seOo < nacimiento < 1allecimiento <
;--------;-------------;-----------;------;------------;---------------;
< Dlu11y < :rnoldo < Jato < 1 < .CCC-=,-=- < NU"" <
< au < Quan < Jato < m < .CCA-=+-.@ < NU"" <
< Iu11y < :rnoldo < >erro < 1 < .CCC-=)-.+ < NU"" <
< DanDan < Ienito < >erro < m < ,===-=A-,@ < NU"" <
< Naiser < Diana < >erro < m < .CCA-=A-+. < .CC@-=@-,C <
< $hispa < 5mar < :ve < 1 < .CCA-=C-.. < NU"" <
< Wicho < /omRs < :ve < NU"" < ,===-=,-=C < NU"" <
< SMim < Ienito < Serpiente < m < ,==.-=--,C < NU"" <
< >elusa < Diana < Eamster < 1 < ,===-=+-+= < NU"" <
;--------;-------------;-----------;------;------------;---------------;
C rows in set 6=#== sec7
Esta "orma del SELE.6 es 9til 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 !mascotast,t$(
parece que Baiser 'a nacido despu&s de que 'a "allecidoL Al revisar un poco el
pedigree de Baiser encontramos que la "ec'a correcta de nacimiento es el a/o
DMNM% no DMMN
Hay por lo menos un par de maneras de solucionar este problema(
Editar el arc'ivo #mascotast,t# para corregir el error% eliminar los datos de la tabla
mascotas con la sentencia 3ELE6E% y cargar los datos nuevamente con el comando
L4A3 3A6A(
mysql> DE"E/E D35 mascotas%
mysql> "5:D D:/: "5$:" 4ND4"E Gmascotas#tOtG 4N/5 /:I"E mascotas%
Sin embargo% si 'acemos esto% debemos ingresar los datos de *elusa% la mascota
de nuestra 'ermana 3iana
La segunda opcin consiste en corregir slo el registro errneo con una sentencia
1*3A6E(
mysql> U>D:/E mascotas SE/ nacimientoFG.CAC-=A-+.G WEE3E nombreFGNaiserG%
.omo se mostr anteriormente% es muy ")cil recuperar los datos de una tabla
completa *ero t-picamente no deseamos 'acer esto% particularmente cuando las
tablas son demasiado grandes En ve2 de ello% estaremos m)s interesados en
responder preguntas particulares% en cuyo caso debemos especi"icar algunas
restricciones para la in"ormacin que deseamos ver
Seleccionando registros particulares
*odemos seleccionar slo registros particulares de una tabla *or ejemplo% si
deseamos veri"icar el cambio que 'icimos a la "ec'a de nacimiento de Baiser%
seleccionamos slo el registro de Baiser de la siguiente manera(
mysql> SE"E$/ * D35 mascotas WEE3E nombreFGNaiserG%
;--------;-------------;---------;------;------------;--------------;
< nombre < propietario < especie < seOo < nacimiento < 1allecimento <
;--------;-------------;---------;------;------------;--------------;
< Naiser < Diana < >erro < m < .CAC-=A-+. < .CC@-=@-,C <
;--------;-------------;---------;------;------------;--------------;
. row in set 6=#== sec7
La salida mostrada con"irma que el a/o 'a sido corregido de DMMN a DMNM
La comparacin de cadenas es normalmente no sensitiva% as- que podemos
especi"icar el nombre como #Oaiser#% #BAISE7#% etc El resultado de la consulta ser)
el mismo
*odemos adem)s especi"icar condiciones sobre cualquier columna% no slo el
#nombre# *or ejemplo% si deseamos conocer qu& mascotas nacieron despu&s del
EIII% tendr-amos que usar la columna #nacimiento#(
mysql> SE"E$/ * D35 mascotas WEE3E nacimiento >F G,===-.-.G%
;--------;-------------;-----------;------;------------;---------------;
< nombre < propietario < especie < seOo < nacimiento < 1allecimiento <
;--------;-------------;-----------;------;------------;---------------;
< DanDan < Ienito < >erro < m < ,===-=A-,@ < NU"" <
< Wicho < /omRs < :ve < NU"" < ,===-=,-=C < NU"" <
< SMim < Ienito < Serpiente < m < ,==.-=--,C < NU"" <
< >elusa < Diana < Eamster < 1 < ,===-=+-+= < NU"" <
;--------;-------------;-----------;------;------------;---------------;
- rows in set 6=#== sec7
*odemos tambi&n combinar condiciones% por ejemplo% para locali2ar a los perros
'embras(
mysql> SE"E$/ * D35 mascotas WEE3E especieFG>erroG :ND seOoFG1G%
;--------;-------------;---------;------;------------;---------------;
< nombre < propietario < especie < seOo < nacimiento < 1allecimiento <
;--------;-------------;---------;------;------------;---------------;
< Iu11y < :rnoldo < >erro < 1 < .CCC-=)-.+ < NU"" <
;--------;-------------;---------;------;------------;---------------;
. row in set 6=#== sec7
La consulta anterior usa el operador lgico A53 Hay tambi&n un operador lgico
47(
mysql> SE"E$/ * D35 mascotas WEE3E especie F G:veG 53 especie F GJatoG%
;--------;-------------;---------;------;------------;---------------;
< nombre < propietario < especie < seOo < nacimiento < 1allecimiento <
;--------;-------------;---------;------;------------;---------------;
< Dlu11y < :rnoldo < Jato < 1 < .CCC-=,-=- < NU"" <
< au < Quan < Jato < m < .CCA-=+-.@ < NU"" <
< $hispa < 5mar < :ve < 1 < .CCA-=C-.. < NU"" <
< Wicho < /omRs < :ve < NU"" < ,===-=,-=C < NU"" <
;--------;-------------;---------;------;------------;---------------;
- rows in set 6=#== sec7
El operador A53 y el operador 47 pueden ser intercambiados Si 'acemos esto% es
buena idea usar par&ntesis para indicar como deben ser agrupadas las condiciones(
mysql> SE"E$/ * D35 mascotas WEE3E 6especie F GJatoG :ND seOo F GmG7
-> 53 6especie F G>erroG :ND seOo F G1G7%
;--------;-------------;---------;------;------------;---------------;
< nombre < propietario < especie < seOo < nacimiento < 1allecimiento <
;--------;-------------;---------;------;------------;---------------;
< au < Quan < Jato < m < .CCA-=+-.@ < NU"" <
< Iu11y < :rnoldo < >erro < 1 < .CCC-=)-.+ < 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 "ec'a de nacimiento de nuestras
mascotas% debemos seleccionar la columna #nombre# y #nacimiento#(
mysql> SE"E$/ nombre8 nacimiento D35 mascotas%
;--------;------------;
< nombre < nacimiento <
;--------;------------;
< Dlu11y < .CCC-=,-=- <
< au < .CCA-=+-.@ <
< Iu11y < .CCC-=)-.+ <
< DanDan < ,===-=A-,@ <
< Naiser < .CAC-=A-+. <
< $hispa < .CCA-=C-.. <
< Wicho < ,===-=,-=C <
< SMim < ,==.-=--,C <
< >elusa < ,===-=+-+= <
;--------;------------;
C rows in set 6=#== sec7
*ara conocer qui&n tiene alguna mascota% usaremos la siguiente consulta(
mysql> SE"E$/ propietario D35 mascotas%
;-------------;
< propietario <
;-------------;
< :rnoldo <
< Quan <
< :rnoldo <
< Ienito <
< Diana <
< 5mar <
< /omRs <
< Ienito <
< Diana <
;-------------;
C rows in set 6=#== sec7
Sin embargo% debemos notar que la consulta recupera el nombre del propietario de
cada mascota% y algunos de ellos aparecen m)s de una ve2 *ara minimi2ar la
salida% agregaremos la palabra clave 3IS6I5.6(
mysql> SE"E$/ D4S/4N$/ propietario D35 mascotas%
;-------------;
< propietario <
;-------------;
< :rnoldo <
< Quan <
< Ienito <
< Diana <
< 5mar <
< /omRs <
;-------------;
* rows in set 6=#=+ sec7
Se puede usar tambi&n una cla9sula ?HE7E para combinar seleccin de "ilas con
seleccin de columnas *or ejemplo% para obtener la "ec'a de nacimiento de los
perritos y los gatitos% usaremos la siguiente consulta(
mysql> SE"E$/ nombre8 especie8 nacimiento D35 mascotas
-> WEE3E especie F GperroG 53 especie F G'atoG%
;--------;---------;------------;
< nombre < especie < nacimiento <
;--------;---------;------------;
< Dlu11y < Jato < .CCC-=,-=- <
< au < Jato < .CCA-=+-.@ <
< Iu11y < >erro < .CCC-=)-.+ <
< DanDan < >erro < ,===-=A-,@ <
< Naiser < >erro < .CAC-=A-+. <
;--------;---------;------------;
) rows in set 6=#== sec7
4rdenando registros
-rdenando registros
Se debe notar en los ejemplos anteriores que las "ilas regresadas son mostradas sin
ning9n orden en particular Sin embargo% "recuentemente es m)s ")cil e,aminar la
salida de una consulta cuando las "ilas son ordenadas en alguna "orma 9til *ara
ordenar los resultados% tenemos que usar una cl)usula 473E7 BH
Aqu- aparecen algunos datos ordenados por "ec'a de nacimiento(
mysql> SE"E$/ nombre8 nacimiento D35 mascotas 53DE3 I( nacimiento%
;--------;------------;
< nombre < nacimiento <
;--------;------------;
< Naiser < .CAC-=A-+. <
< au < .CCA-=+-.@ <
< $hispa < .CCA-=C-.. <
< Dlu11y < .CCC-=,-=- <
< Iu11y < .CCC-=)-.+ <
< Wicho < ,===-=,-=C <
< >elusa < ,===-=+-+= <
< DanDan < ,===-=A-,@ <
< SMim < ,==.-=--,C <
;--------;------------;
C rows in set 6=#== sec7
En las columnas de tipo caracter% el ordenamiento es ejecutado normalmente de
"orma no sensitiva% es decir% no 'ay di"erencia entre may9sculas y min9sculas Sin
embargo% se puede "or2ar un ordenamiento sensitivo al usar el operador BI5A7H
*ara ordenar en orden inverso% debemos agregar la palabra clave 3ES. al nombre
de la columna que estamos usando en el ordenamiento(
mysql> SE"E$/ nombre8 nacimiento D35 mascotas 53DE3 I(
-> nacimiento DES$%
;--------;------------;
< nombre < nacimiento <
;--------;------------;
< SMim < ,==.-=--,C <
< DanDan < ,===-=A-,@ <
< >elusa < ,===-=+-+= <
< Wicho < ,===-=,-=C <
< Iu11y < .CCC-=)-.+ <
< Dlu11y < .CCC-=,-=- <
< $hispa < .CCA-=C-.. <
< au < .CCA-=+-.@ <
< Naiser < .CAC-=A-+. <
;--------;------------;
C rows in set 6=#== sec7
*odemos ordenar m9ltiples 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 D35 mascotas
-> 53DE3 I( especie8 nacimiento DES$%
;--------;-----------;------------;
< nombre < especie < nacimiento <
;--------;-----------;------------;
< Wicho < :ve < ,===-=,-=C <
< $hispa < :ve < .CCA-=C-.. <
< Dlu11y < Jato < .CCC-=,-=- <
< au < Jato < .CCA-=+-.@ <
< >elusa < Eamster < ,===-=+-+= <
< DanDan < >erro < ,===-=A-,@ <
< Iu11y < >erro < .CCC-=)-.+ <
< Naiser < >erro < .CAC-=A-+. <
< SMim < Serpiente < ,==.-=--,C <
;--------;-----------;------------;
C rows in set 6=#== sec7
5otar que la palabra clave 3ES. aplica slo a la columna nombrada que le precede
.)lculos con "ec'as
Clculos con $ec)as
MySQL proporciona diversas "unciones que se pueden usar para e"ectuar c)lculos
sobre "ec'as% por ejemplo% para calcular edades o e,traer partes de una "ec'a !d-a%
mes% a/o% etc$
*ara determinar la edad de cada una de nuestras mascotas% tenemos que calcular
la di"erencia de a/os de la "ec'a actual y la "ec'a de nacimiento% y entonces
substraer uno si la "ec'a actual ocurre antes en el calendario que la "ec'a de
nacimiento Las siguientes consultas muestran la "ec'a actual% la "ec'a de
nacimiento y la edad para cada mascota
mysql> SE"E$/ nombre8 nacimiento8 $U33EN/9D:/E8
-> 6(E:36$U33EN/9D:/E7 - (E:36nacimiento77
-> - 634JE/6$U33EN/9D:/E8)7 H 34JE/6nacimiento8)77 :S edad D35 mascotas%
;--------;------------;--------------;------;
< nombre < nacimiento < $U33EN/9D:/E < edad <
;--------;------------;--------------;------;
< Dlu11y < .CCC-=,-=- < ,==,-.,-,+ < + <
< au < .CCA-=+-.@ < ,==,-.,-,+ < - <
< Iu11y < .CCC-=)-.+ < ,==,-.,-,+ < + <
< DanDan < ,===-=A-,@ < ,==,-.,-,+ < , <
< Naiser < .CAC-=A-+. < ,==,-.,-,+ < .+ <
< $hispa < .CCA-=C-.. < ,==,-.,-,+ < - <
< Wicho < ,===-=,-=C < ,==,-.,-,+ < , <
< SMim < ,==.-=--,C < ,==,-.,-,+ < . <
< >elusa < ,===-=+-+= < ,==,-.,-,+ < , <
;--------;------------;--------------;------;
C rows in set 6=#=. sec7
Aqu-% HEA7! $ obtiene 9nicamente el a/o y 7I@H6! $ obtiene los cinco caracteres
m)s a la derec'a de cada una de las "ec'as% que representan el mes y el d-a !MM+
33$ La parte de la e,presin que compara los valores MM+33 se eval9a a D o I% y
permite ajustar el valor de la edad en el caso de que el valor MM+33 de la "ec'a
actual ocurra antes del valor MM+33 de la "ec'a de nacimiento
3ado que la e,presin en s- es bastante "ea% se 'a usado un alias !edad$ que es el
que aparece como etiqueta en la columna que muestra el resultado de la consulta
Esta consulta debe trabajar bien% pero el resultado puede ser de alguna manera
m)s 9til si las "ilas son presentadas en alg9n orden *ara ello 'aremos uso de la
cl)usula 473E7 BH
*or ejemplo% para ordenar por nombre% usaremos la siguiente consulta(
mysql> SE"E$/ nombre8 nacimiento8 $U33EN/9D:/E8
-> 6(E:36$U33EN/9D:/E7 - (E:36nacimiento77
-> - 634JE/6$U33EN/9D:/E8)7 H 34JE/6nacimiento8)77
-> :S edad D35 mascotas 53DE3 I( nombre%
;--------;------------;--------------;------;
< nombre < nacimiento < $U33EN/9D:/E < edad <
;--------;------------;--------------;------;
< Iu11y < .CCC-=)-.+ < ,==,-.,-,+ < + <
< $hispa < .CCA-=C-.. < ,==,-.,-,+ < - <
< DanDan < ,===-=A-,@ < ,==,-.,-,+ < , <
< Dlu11y < .CCC-=,-=- < ,==,-.,-,+ < + <
< Naiser < .CAC-=A-+. < ,==,-.,-,+ < .+ <
< au < .CCA-=+-.@ < ,==,-.,-,+ < - <
< >elusa < ,===-=+-+= < ,==,-.,-,+ < , <
< SMim < ,==.-=--,C < ,==,-.,-,+ < . <
< Wicho < ,===-=,-=C < ,==,-.,-,+ < , <
;--------;------------;--------------;------;
C rows in set 6=#== sec7
*ara ordenar por edad en lugar de nombre% 9nicamente tenemos que usar una
cl)usula 473E7 BH di"erente(
mysql> SE"E$/ nombre8 nacimiento8 $U33EN/9D:/E8
-> 6(E:36$U33EN/9D:/E7 - (E:36nacimiento77
-> - 634JE/6$U33EN/9D:/E8)7 H 34JE/6nacimiento8)77
-> :S edad D35 mascotas 53DE3 I( edad%
;--------;------------;--------------;------;
< nombre < nacimiento < $U33EN/9D:/E < edad <
;--------;------------;--------------;------;
< SMim < ,==.-=--,C < ,==,-.,-,+ < . <
< DanDan < ,===-=A-,@ < ,==,-.,-,+ < , <
< Wicho < ,===-=,-=C < ,==,-.,-,+ < , <
< >elusa < ,===-=+-+= < ,==,-.,-,+ < , <
< Dlu11y < .CCC-=,-=- < ,==,-.,-,+ < + <
< Iu11y < .CCC-=)-.+ < ,==,-.,-,+ < + <
< au < .CCA-=+-.@ < ,==,-.,-,+ < - <
< $hispa < .CCA-=C-.. < ,==,-.,-,+ < - <
< Naiser < .CAC-=A-+. < ,==,-.,-,+ < .+ <
;--------;------------;--------------;------;
C rows in set 6=#=. sec7
1na consulta similar puede ser usada para determinar la edad que ten-a una
mascota cuando "alleci *ara determinar que animalitos ya "allecieron% la condicin
es que el valor en el campo "allecimiento no sea nulo !51LL$ Entonces% para los
registros con valor no+nulo% calculamos la di"erencia entre los valores "allecimiento
y nacimiento
mysql> SE"E$/ nombre8 nacimiento8 1allecimiento8
-> 6(E:361allecimiento7 - (E:36nacimiento77
-> - 634JE/61allecimiento8)7 H 34JE/6nacimiento8)77
-> :S edad D35 mascotas WEE3E 1allecimiento 4S N5/ NU""%
;--------;------------;---------------;------;
< nombre < nacimiento < 1allecimiento < edad <
;--------;------------;---------------;------;
< Naiser < .CAC-=A-+. < .CC@-=@-,C < @ <
;--------;------------;---------------;------;
. row in set 6=#=. sec7
La consulta usa "allecimiento IS 546 51LL% en ve2 de "alleciimiento P : 51LL
porque 51LL es una valor especial Esto ser) e,plicando m)s a detalle
posteriormente
=Qu& sucede si deseamos conocer cu)les de nuestras mascotas cumplen a/os el
pr,imo mes> *ara este tipo de c)lculos% el a/o y el d-a son irrelevantesC
simplemente tenemos que e,traer el valor del mes en la columna nacimiento .omo
se mencion anteriormente% MySQL proporciona diversas "unciones para trabajar y
manipular "ec'as% en este caso 'aremos uso de la "uncin M456H! $ *ara ver como
trabaja% vamos a ejecutar una consulta muy simple que muestra tanto el valor de
una "ec'a como el valor que regresa la "uncin M456H! $
mysql> SE"E$/ nombre8 nacimiento8 5N/E6nacimiento7 D35 mascotas%
;--------;------------;-------------------;
< nombre < nacimiento < 5N/E6nacimiento7 <
;--------;------------;-------------------;
< Dlu11y < .CCC-=,-=- < , <
< au < .CCA-=+-.@ < + <
< Iu11y < .CCC-=)-.+ < ) <
< DanDan < ,===-=A-,@ < A <
< Naiser < .CAC-=A-+. < A <
< $hispa < .CCA-=C-.. < C <
< Wicho < ,===-=,-=C < , <
< SMim < ,==.-=--,C < - <
< >elusa < ,===-=+-+= < + <
;--------;------------;-------------------;
C rows in set 6=#== sec7
Encontrar los animalitos cuyo cumplea/os es el pr,imo mes es muy sencillo
Suponiendo que el mes actual es Abril !valor Q$% entonces tenemos que buscar los
registros cuyo valor de mes sea J !Mayo$
mysql> SE"E$/ nombre8 nacimiento D35 mascotas WEE3E 5N/E6nacimiento7 F )%
;--------;------------;
< nombre < nacimiento <
;--------;------------;
< Iu11y < .CCC-=)-.+ <
;--------;------------;
. row in set 6=#== sec7
Aqu- 'abr) por supuesto una complicacin si el mes actual es 3iciembre 5o
podemos simplemente agregar uno al n9mero del mes !DE$ y buscar los registros
cuyo mes de nacimiento sea DF porque dic'o mes no e,iste En ve2 de esto%
tenemos que buscar los animalitos que nacieron en Enero !mes D$
Sin embargo% lo mejor es que podemos escribir una consulta que "uncione no
importando cu)l sea el mes actual La "uncin 3A6ERA33! $ nos permite agregar un
intervalo de tiempo a una "ec'a dada Si agregamos un mes al valor regresado por
la "uncin 54?! $% y entonces e,traemos el valor del mes con la "uncin M456H! $%
el resultado es que siempre obtendremos el mes siguiente
La consulta que resuelve nuestro problema queda as-(
mysql> SE"E$/ nombre8 nacimiento D35 mascotas
-> WEE3E 5N/E6nacimiento7 F 5N/E6D:/E9:DD6N5W678 4N/E32:" . 5N/E77%
6rabajando con valores nulos
.ra"ajando con valores nulos
El valor 51LL puede sorprendermos mientras no 'ayamos trabajado con &l
.onceptualmente% 51LL signi"ica un valor que 'ace "alta% o un valor desconocido% y
es tratado de una manera di"erente a otros valores *ara veri"icar si un valor es
51LL no podemos usar los operadores de comparacin tales como S% : o P
*ara probar esto ejecutemos la siguiente consulta(
mysql> SE"E$/ . F NU""8 . H> NU""8 . H NU""8 . > NU""%
;----------;-----------;----------;----------;
< . F NU"" < . H> NU"" < . H NU"" < . > NU"" <
;----------;-----------;----------;----------;
< NU"" < NU"" < NU"" < NU"" <
;----------;-----------;----------;----------;
. row in set 6=#== sec7
.laramente observamos que no obtenemos resultados con alg9n signi"icado con
estos operadores Es por ello que tenemos que usar los operadores IS 51LL e IS
546 51LL(
mysql> SE"E$/ . 4S NU""8 . 4S N5/ NU""%
;-----------;---------------;
< . 4S NU"" < . 4S N5/ NU"" <
;-----------;---------------;
< = < . <
;-----------;---------------;
. row in set 6=#== sec7
En MySQL% I o 51LL signi"ican "also y cualquier otro valor signi"ica verdadero El
valor que se considera verdadero por de"ault es D
.uando se usa un 473E7 BH% los valores 51LL son siempre ordenados primero% a9n
cuando se use la cl)usula 3ES.
.oincidencia de patrones
Coincidencia de patrones
MySQL proporciona m&todos de coincidencia de patrones basados en SQL est)ndar%
as- como tambi&n basados en e,presiones regulares% de manera similar a las
utiler-as de 1ni, tales como vi% grep y sed
La coincidencia de patrones basada en SQL nos permite usar R !guin bajo$ para un
solo caracter y T para un arbitrario n9mero de caracteres En MySQL% los patrones
SQL no son sensibles al uso de may9sculas y min9sculas
Es importante notar que no se usan los operadores S% P o : cuando se usan los
patrones SQLC en su lugar se usan los operadores LIBE y 546 LIBE
A continuacin se presentan algunos ejemplos
*ara encontrar los nombres que comien2an con b(
mysql> SE"E$/ * D35 mascotas WEE3E nombre "4NE GbSG%
;--------;-------------;---------;------;------------;---------------;
< nombre < propietario < especie < seOo < nacimiento < 1allecimiento <
;--------;-------------;---------;------;------------;---------------;
< Iu11y < :rnoldo < >erro < 1 < .CCC-=)-.+ < NU"" <
;--------;-------------;---------;------;------------;---------------;
. row in set 6=#== sec7
*ara encontrar los nombres que "inali2an con fy(
mysql> SE"E$/ * D35 mascotas WEE3E nombre "4NE GS1yG%
;--------;-------------;---------;------;------------;---------------;
< nombre < propietario < especie < seOo < nacimiento < 1allecimiento <
;--------;-------------;---------;------;------------;---------------;
< Dlu11y < :rnoldo < Jato < 1 < .CCC-=,-=- < NU"" <
< Iu11y < :rnoldo < >erro < 1 < .CCC-=)-.+ < NU"" <
;--------;-------------;---------;------;------------;---------------;
, rows in set 6=#== sec7
*ara encontrar nombres que contienen una s(
mysql> SE"E$/ * D35 mascotas WEE3E nombre "4NE GSsSG%
;--------;-------------;-----------;------;------------;---------------;
< nombre < propietario < especie < seOo < nacimiento < 1allecimiento <
;--------;-------------;-----------;------;------------;---------------;
< Naiser < Diana < >erro < m < .CAC-=A-+. < .CC@-=@-,C <
< $hispa < 5mar < :ve < 1 < .CCA-=C-.. < NU"" <
< SMim < Ienito < Serpiente < m < ,==.-=--,C < NU"" <
< >elusa < Diana < Eamster < 1 < ,===-=+-+= < NU"" <
;--------;-------------;-----------;------;------------;---------------;
- rows in set 6=#=. sec7
El otro tipo de coincidencia de patrones proporcionado por MySQL 'ace uso de
e,presiones regulares *ara 'acer uso de estos tipos de patrones se tienen que usar
los operadores 7E@EU* y 546 7E@EU* ! o 7LIBE y 546 7LIBE% los cu)les son
sinnimos$
Algunas caracter-sticas de las e,presiones regulares son(
El caracter punto #.% coincide con cual!uier caracter.
Una clase de caracteres /...0 coincide con cual!uier caracter dentro de los par1ntesis cuadrados.
*or ejemplo /a"c0 coincide con a " o c. *ara nom"rar un rango de caracteres se usa el guin.
/a230 coincide con cual!uier letra min+scula mientras !ue /4250 coincide con cual!uier digito.
El caracter asterisco #6% coincide con cero o ms instancias de lo !ue le preceda. *or ejemplo '6
coincide con cual!uier n+mero de caracteres ' /42506 coincide con cual!uier n+mero de digitos y
.6 #punto asterisco% coincide con cual!uier cosa.
El patrn coincide si 1ste ocurre en cual!uier parte del valor !ue est siendo evaluado. #Los
patrones SQL coinciden +nicamente en los valores completos.%
*ara indicar el inicio o el $inal de un valor !ue est siendo evaluado se usan los caracteres 7 y 8
respectivamente.
*ara demostrar como se usan las e,presiones regulares% se van a mostrar los
ejemplos presentados anteriormente con el operador LIBE% a'ora con el operador
7E@EU*
*ara encontrar los nombre que inician con b(
mysql> SE"E$/ * D35 mascotas WEE3E nombre 3EJET> GUbG%
;--------;-------------;---------;------;------------;---------------;
< nombre < propietario < especie < seOo < nacimiento < 1allecimiento <
;--------;-------------;---------;------;------------;---------------;
< Iu11y < :rnoldo < >erro < 1 < .CCC-=)-.+ < NU"" <
;--------;-------------;---------;------;------------;---------------;
. row in set 6=#=. sec7
Antes de la versin FEFQ de MySQL% el operador 7E@EU* era sensible al uso de
may9sculas y min9sculas% as- que dependiendo de la versin de MySQL con la que
se est) trabajando puede que obtengamos o no alg9n resultado en la consulta
anterior Se puede usar tambi&n la siguiente consulta para buscar los nombres que
inician con la letra b% no importando si es may9scula o min9scula
mysql> SE"E$/ * D35 mascotas WEE3E nombre 3EJET> GUVbIWG%
;--------;-------------;---------;------;------------;---------------;
< nombre < propietario < especie < seOo < nacimiento < 1allecimiento <
;--------;-------------;---------;------;------------;---------------;
< Iu11y < :rnoldo < >erro < 1 < .CCC-=)-.+ < NU"" <
;--------;-------------;---------;------;------------;---------------;
. row in set 6=#== sec7
3esde la versin FEFQ% para "or2ar que el operador 7E@EU* sea sensible al uso de
may9sculas y min9sculas% se tiene que usar la palabra clave BI5A7H para 'acer de
una de las cadenas% una cadena binaria 4bservar los resultados de la siguientes
consultas
mysql> SE"E$/ * D35 mascotas WEE3E nombre 3EJET> I4N:3( GUbG%
Empty set 6=#== sec7
mysql> SE"E$/ * D35 mascotas WEE3E nombre 3EJET> I4N:3( GUIG%
;--------;-------------;---------;------;------------;---------------;
< nombre < propietario < especie < seOo < nacimiento < 1allecimiento <
;--------;-------------;---------;------;------------;---------------;
< Iu11y < :rnoldo < >erro < 1 < .CCC-=)-.+ < NU"" <
;--------;-------------;---------;------;------------;---------------;
. row in set 6=#=. sec7
*ara encontrar los nombres que "inali2an con la palabra fy% 'aremos uso del
caracter V
mysql> SE"E$/ * D35 mascotas WEE3E nombre 3EJET> G1yXG%
;--------;-------------;---------;------;------------;---------------;
< nombre < propietario < especie < seOo < nacimiento < 1allecimiento <
;--------;-------------;---------;------;------------;---------------;
< Dlu11y < :rnoldo < Jato < 1 < .CCC-=,-=- < NU"" <
< Iu11y < :rnoldo < >erro < 1 < .CCC-=)-.+ < NU"" <
;--------;-------------;---------;------;------------;---------------;
, rows in set 6=#== sec7
*ara encontrar los nombres que contienen una letra s% la consulta ser-a(
mysql> SE"E$/ * D35 mascotas WEE3E nombre 3EJET> GsG%
;--------;-------------;-----------;------;------------;---------------;
< nombre < propietario < especie < seOo < nacimiento < 1allecimiento <
;--------;-------------;-----------;------;------------;---------------;
< Naiser < Diana < >erro < m < .CAC-=A-+. < .CC@-=@-,C <
< $hispa < 5mar < :ve < 1 < .CCA-=C-.. < NU"" <
< SMim < Ienito < Serpiente < m < ,==.-=--,C < NU"" <
< >elusa < Diana < Eamster < 1 < ,===-=+-+= < NU"" <
;--------;-------------;-----------;------;------------;---------------;
- rows in set 6=#== sec7
.onteo de "ilas
Conteo de $ilas
Las bases de datos son usadas "recuentemente para responder una pregunta%
#=.on qu& "recuencia ocurre un cierto tipo de dato en una tabla># *or ejemplo% tal
ve2 queremos conocer cu)ntas mascotas tenemos% o cu)ntas mascotas tiene cada
uno de los propietarios
.ontar el n9mero total de animalitos que tenemos es lo mismo que 'acer la
siguiente pregunta #=.u)ntas "ilas 'ay en la tabla mascotas># ya que 'ay un
registro por mascota La "uncin .4156! $ es la que nos ayuda en esta situacin
mysql> SE"E$/ $5UN/6*7 D35 mascotas%
;----------;
< $5UN/6*7 <
;----------;
< C <
;----------;
. row in set 6=#== sec7
Si deseamos conocer cu)ntas mascotas tiene cada uno de los propietarios% la
consulta es la siguiente(
mysql> SE"E$/ propietario8 $5UN/6*7 D35 mascotas J35U> I( propietario %
;-------------;----------;
< propietario < $5UN/6*7 <
;-------------;----------;
< :rnoldo < , <
< Ienito < , <
< Diana < , <
< Quan < . <
< 5mar < . <
< /omRs < . <
;-------------;----------;
* rows in set 6=#== sec7
Se debe notar que se 'a usado una cl)usula @741* BH para agrupar todos los
registros de cada propietario Si no 'acemos esto% obtendremos un mensaje de
error(
mysql> SE"E$/ propietario8 $5UN/6*7 D35 mascotas%
E3353 ..-=: iOin' o1 J35U> columns 64N678:T678$5UN/67###7 with no
J35U> columns is ille'al i1 there is no J35U> I( clause
En e"ecto% el uso de la "uncin .4156! $ en conjunto con la cl)usula @741* BH es
muy 9til en diversas situaciones A continuacin se muestran algunos ejemplos
El n9mero de animalitos por especie(
mysql> SE"E$/ especie8 $5UN/6*7 D35 mascotas J35U> I( especie %
;-----------;----------;
< especie < $5UN/6*7 <
;-----------;----------;
< :ve < , <
< Jato < , <
< Eamster < . <
< >erro < + <
< Serpiente < . <
;-----------;----------;
) rows in set 6=#== sec7
El n9mero de animalitos por se,o(
mysql> SE"E$/ seOo8 $5UN/6*7 D35 mascotas J35U> I( seOo:
;------;----------;
< seOo < $5UN/6*7 <
;------;----------;
< NU"" < . <
< 1 < - <
< m < - <
;------;----------;
+ rows in set 6=#=. sec7
El n9mero de animalitos por combinacin de especie y se,o(
mysql> SE"E$/ especie8 seOo8 $5UN/6*7 D35 mascotas J35U> I( especie8 seOo %
;-----------;------;----------;
< especie < seOo < $5UN/6*7 <
;-----------;------;----------;
< :ve < NU"" < . <
< :ve < 1 < . <
< Jato < 1 < . <
< Jato < m < . <
< Eamster < 1 < . <
< >erro < 1 < . <
< >erro < m < , <
< Serpiente < m < . <
;-----------;------;----------;
A rows in set 6=#== sec7
5o es necesario que se obtengan todos los datos de una tabla cuando se usa la
"uncin .4156! $ *or ejemplo% en la consulta anterior% para ver 9nicamente los
datos de perritos y gatitos% la consulta queda de la siguiente manera(
mysql> SE"E$/ especie8 seOo8 $5UN/6*7 D35 mascotas
-> WEE3E especieFG>erroG 53 especieFGJatoG
-> J35U> I( especie8 seOo%
;---------;------;----------;
< especie < seOo < $5UN/6*7 <
;---------;------;----------;
< Jato < 1 < . <
< Jato < m < . <
< >erro < 1 < . <
< >erro < m < , <
;---------;------;----------;
- rows in set 6=#== sec7
4 bien% si deseamos el n9mero de animalitos por se,o% y cuyo se,o es conocido(
mysql> SE"E$/ especie8 seOo8 $5UN/6*7 D35 mascotas
-> WEE3E seOo 4S N5/ NU""
-> J35U> I( especie8 seOo %
;-----------;------;----------;
< especie < seOo < $5UN/6*7 <
;-----------;------;----------;
< :ve < 1 < . <
< Jato < 1 < . <
< Jato < m < . <
< Eamster < 1 < . <
< >erro < 1 < . <
< >erro < m < , <
< Serpiente < m < . <
;-----------;------;----------;
@ rows in set 6=#== sec7
1sando m)s de una tabla
Usando ms de una ta"la
La tabla mascotas nos 'a servido 'asta este momento para tener guardados los
datos acerca de los animalitos que tenemos Si deseamos guardar alg9n otro tipo
de in"ormacin acerca de ellos% tal como los eventos en sus vidas +visitas al
veterinario% nacimientos de una camada% etc+ necesitaremos de otra tabla =.mo
deber) estar con"ormada esta tabla> Lo que necesitamos es(
El nom"re de la mascota para sa"er a cul de ellas se re$iere el evento.
Una $ec)a para sa"er cuando ocurri el evento.
Una descripcin del evento.
Un campo !ue indi!ue el tipo de evento si deseamos categori3arlos.
3adas estas condiciones% la sentencia para crear la tabla eventos queda de la
siguiente manera(
mysql> $3E:/E /:I"E eventos6nombre varchar6,=78 1echa date8
-> tipo varchar6.)78 descripcion varchar6,))77%
!uery 5N8 = rows a11ected 6=#=+ sec7
3e manera similar a la tabla mascotas% es m)s ")cil cargar los datos de los registros
iniciales al crear un arc'ivo de te,to delimitado por tabuladores en el que se tenga
la siguiente in"ormacin( nombre "ec'a tipo descripcin
Dlu11y ,==.-=)-.) camada - 'atitos8 + hembras8 . macho
Iu11y ,==.-=*-,+ camada ) perritos8 , hembras8 + machos
Iu11y ,==,-=*-.C camada , perritos8 . hembra8 . macho
$hispa ,===-=+-,. veterinario Una pata lastimada
DanDan ,==.-=A-,@ cumpleaLos >rimera veK que se en1ermo de la panKa
DanDan ,==,-=A-=+ veterinario Dolor de panKa
Whicho ,==.-=,-=C cumpleaLos 3emodelaciPn de casa
.argamos los datos en este arc'ivo con la siguiente sentencia(
mysql> "5:D D:/: "5$:" 4ND4"E Geventos#tOtG 4N/5 /:I"E eventos%
!uery 5N8 @ rows a11ected 6=#=, sec7
3ecords: @ Deleted: = SMipped: = Warnin's: =
6omando en cuenta lo que 'emos aprendido en la ejecucin de consultas sobre la
tabla mascotas% debemos de ser capaces de recuperar algunos datos de la tabla
eventosC los principios son los mismos Sin embargo puede suceder que la tabla
eventos por s- misma sea insu"iciente para darnos las respuestas que necesitamos
Supongamos que desemos conocer la edad de cada mascota cuando tuvieron una
camada La tabla eventos indica cuando ocurri dic'o evento% pero para calcular la
edad de la madre% necesitamos sin duda su "ec'a de nacimiento 3ado que este
dato est) almacenado en la tabla mascotas% necesitamos de ambas tablas para
reali2ar esta consulta
mysql> SE"E$/ mascotas#nombre8
-> 6/59D:(S61echa7 - /59D:(S6nacimiento77?+*) :S edad8
-> descripcion D35 mascotas8 eventos
-> WEE3E mascotas#nombreFeventos#nombre
-> :ND tipoF0camada0%
;--------;------;---------------------------------;
< nombre < edad < descripcion <
;--------;------;---------------------------------;
< Dlu11y < ,#,A < - 'atitos8 + hembras8 . macho <
< Iu11y < ,#., < ) perritos8 , hembras8 + machos <
< Iu11y < +#.= < , perritos8 . hembra8 . macho <
;--------;------;---------------------------------;
+ rows in set 6=#=) sec7
Hay diversas cosas que notar acerca de esta consulta(
La clusula 9,-M lista dos ta"las dado !ue la consulta necesita in$ormacin !ue se encuentra
en am"as ta"las.
Cuando se com"ina #junta% in$ormacin de m+ltiples ta"las es necesario especi$icar los registros
de una ta"la !ue pueden coincidir con los registros en la otra ta"la. En nuestro caso am"as
columnas tienen una columna :nom"re:. La consulta usa la clusula ;<E,E para o"tener los
registros cuyo valor en dic)a columna es el mismo en am"as ta"las.
=ado !ue la columna :nom"re: ocurre en am"as ta"las de"emos de especi$icar a cul de las
columnas nos re$erimos. Esto se )ace al anteponer el nom"re de la ta"la al nom"re de la
columna.
Nota: La "uncin 64R3AHS! $ regresa el n9mero de d-as transcurridos desde el a/o
I 'asta la "ec'a dada
5o es necesario que se tengan dos tablas di"erentes para que se puedan juntar
Algunas veces es 9til juntar una tabla consigo misma si se desean comparar
registros de la misma tabla *or ejemplo% para encontrar las posibles parejas entre
nuestras mascotas de acuerdo a la especie% la consulta ser-a la siguiente(
mysql> SE"E$/ m.#nombre8 m.#seOo8 m,#nombre8 m,#seOo8 m.#especie
-> D35 mascotas :S m.8 mascotas :S m,
-> WEE3E m.#especieFm,#especie :ND m.#seOoFG1G :ND m,#seOoFGmG%
;--------;------;--------;------;---------;
< nombre < seOo < nombre < seOo < especie <
;--------;------;--------;------;---------;
< Dlu11y < 1 < au < m < Jato <
< Iu11y < 1 < DanDan < m < >erro <
< Iu11y < 1 < Naiser < m < >erro <
;--------;------;--------;------;---------;
+ rows in set 6=#== sec7
En esta consulta se 'a especi"icado un alias para el nombre de la tabla% y es &ste el
que se utili2a para re"erirse a las columnas
1sando mysql en modo batc'
Usando mys!l en modo "atc)
En todos los ejemplos mostrados anteriormente )emos usado mys!l de manera interactiva para ejecutar
algunas consultas y ver los resultados. Sin em"argo es posi"le usar mys!l en modo "atc). *ara )acer
esto tenemos !ue poner los comandos !ue deseamos ejecutar dentro de un arc)ivo y entonces decirle a
mys!l !ue lea los comandos de dic)o arc)ivo:
shell> mysql H archivo-batch
Si se usa mys!l de esta manera se est creando un pe!ue>o script y posteriormente se est ejecutando
dic)o script. ?l ejecutar las sentencias y comandos !ue se encuentran en el script es posi"le !ue suceda
alg+n error. Si se desea !ue se continuen ejecutando las dems sentencias a pesar de !ue )aya ocurrido
un error se tiene !ue usar la opcin 22$orce
shell> mysql --1orce H archivo-batch
:sY mismo8 es posible especi1icar los parRmetros de coneOiPn desde la lYnea de
comandos# >or eZemplo:
s)ell@ mys!l 2) casita 2u "lueman 2p A arc)ivo2"atc)
=*or qu& usar un script>
Aqu- 'ay algunas cuantas ra2ones(
Si se ejecutan un cierto n+mero de consultas $recuentemente #cada d(a o cada semana% al
)acer un script nos evitamos tener !ue volver a teclear cada una de las consultas.
Se pueden generar nuevas consultas !ue sean similares a las e'istentes al copiar y editar estos
scripts.
?l escri"ir consultas de varias l(neas los scripts ayudan "astante para !ue no se tengan !ue
escri"ir todas las l(neas nuevamente si se comete alg+n error.
Si se estn ejecutando consultas !ue producen una gran cantidad de datos es posi"le usar un
paginador para e'aminar los resultados de una mejor manera.
shell> mysql H archivo-batch < less
Se puede guardar la salida en un arc)ivo para revisarla posteriormente.
shell> mysql H archivo-batch > salida-del-script#tOt
Se pueden distri"uir los scripts a otras personas para !ue puedan ejecutar tam"i1n nuestros
comandos y sentencias.
En algunas situaciones no se permite el uso interactivo de mys!l. *or ejemplo cuando se ejecuta
un cron. En este caso es indispensa"le usar el modo "atc).
.abe mencionar que el "ormato de la salida es di"erente !m)s conciso$ cuando se
ejecuta mysql en modo batc'% que cuando se usa de manera interactiva
Aer el siguiente ejemplo
La consulta es( SELE.6 3IS6I5.6 especie W74M mascotas
Si se ejecuta en modo interactivo(
mysql> SE"E$/ D4S/4N$/ especie D35 mascotas%
;-----------;
< especie <
;-----------;
< Jato <
< >erro <
< :ve <
< Serpiente <
;-----------;
- rows in set 6=#== sec7
Si se ejecuta en modo batc'(
shell> mysql -h casita -u blueman -p H especies-distintas#sql
Enter password: ******
especie
Jato
>erro
:ve
Serpiente
3onde el "ic'ero especies+distintassql contiene la consulta a ejecutar Si se
desea obtener la salida que proporciona el modo interactivo% se tiene que usar la
opcin +t
shell> mysql -t -h casita -u blueman -p H especies-distintas#sql
Enter password: ******
;-----------;
< especie <
;-----------;
< Jato <
< >erro <
< :ve <
< Serpiente <
;-----------;

También podría gustarte