Uso Del Cliente Mysql

36
  Proyecto Agenda  Administración de base de datos  Sexto cuatrimestre en ciencias computacionales proporciona el planteamiento y el prototipo de una agenda empresarial como el fin de implementar lo aprendido en el salón de clase.

Transcript of Uso Del Cliente Mysql

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 1/36

 

 

Proyecto Agenda Administración de base de datos 

Sexto cuatrimestre en ciencias computacionales proporciona el planteamiento y el prototipo de

una agenda empresarial como el fin de implementar lo aprendido en el salón de clase.

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 2/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

Planteamiento del Problema

La manera actual en la cual nuestra empresa mantiene actualizado los datos de contacto de los

 proveedores, clientes y/o amigos, es poco eficiente y rudimentaria, ya que se guardan en agendasconvencionales a las cuales solo tienen acceso personal especifico en lugares establecidos.

Se plantea la necesidad de encontrar de manera rápida y eficiente cualquier información de contacto

especifico y que los datos de la agenda sean útiles y fidedignos para otros fines diferentes a una

agenda comercial y estos datos sean accesibles desde cualquier sitio, a personal autorizado y

debidamente acreditado.

Propuesta de solución del problema 

Se propone la implementación de una agenda electrónica , la cual almacenara la información de loscontactos en una base de datos, que sea accesible para consulta, así como para la implementación en

otras aplicaciones.

*Terminar de chorear 

Motores de Base de Datos. 

  MS SQL SERVER 

  ORACLE

  SYBASE

  MYSQL

  POSTGRESS

  MS ACCESS

 YB

M

DB2

Plataformas 

  BSD

  FREEBSD

  HP-UX 

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 3/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

  GNU-LINUX 

  MAC OSX 

  SOLARIS

  SU N OS

  WINDOWS

Aplicaciones 

  JAVA

  PERL

  PHP 

  C/C++

  VISUALBASIC

  VISUAL STUDIO 

  DELPHI

O pcion 1.

MYSQL

MySQL es un sistema de gestión de bases de datos relacional, multihilo y multiusuario con más de

seis millones de instalaciones.1 MySQL AB ²desde enero de 2008 una subsidiaria de Sun

Microsystems y ésta a su vez de Oracle Corporation desde abril de 2009² desarrolla MySQL

como software libre en un esquema de licenciamiento dual. 

Por un lado se ofrece bajo la GNUGPL para cualquier uso compatible con esta licencia, pero para

aquellas empresas que quieran incorporarlo en productos privativos deben comprar a la empresauna licencia específica que les permita este uso. Está desarrollado en su mayor parte en ANSI C. 

Al contrario de proyectos como Apache, donde el software es desarrollado por una comunidad

 pública y los derechos de autor del código están en poder del autor individual, MySQL es

 patrocinado por una empresa privada, que posee el copyright de la mayor parte del código. 

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 4/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

Esto es lo que posibilita el esquema de licenciamiento anteriormente mencionado. Además de la

venta de licencias privativas, la compañía ofrece soporte y servicios. Para sus operaciones contratan

trabajadores alrededor del mundo que colaboran vía Internet.

O pción 2.

Access

Microsoft Access es un programa, utilizado en los sistemas operativos MicrosoftWindows, para la

gestión de bases de datos creado y modificado por Microsoft y orientado a ser usado en entornos

 personal o en pequeñas organizaciones. Es un componente de la suite Microsoft Office. Permite

crear ficheros de bases de datos relacionales que pueden ser fácilmente gestionadas por una interfaz

gráfica sencilla. Además, estas bases de datos pueden ser consultadas por otros programas. Dentro

de un sistema de información, entraría dentro de la categoría de  gestión, y no en la de ofimática,como podría pensarse. Este programa permite manipular los datos en forma de tablas (formadas por 

filas y columnas), crear relaciones entre tablas, consultas, formularios para introducir datos e

informes para presentar la información 

Tabla Comparativa. 

Motor de Base de Datos a utilizar 

MYSQL

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 5/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

Justificación 

-MySQL es gratuito

-Es un gestor de BD, MySQL es cliente/servidor, o sea, tienes tu BD en un servidor potente y solo

tienes aplicaciones clientes en las estaciones de trabajo. Esto te da la ventaja de que la única

maquina potente que necesitas es el servidor, además de que puedes usar storedprocedures que al

correr en el servidor se ejecutan mucho más rápido.

-Familiaridad con el motor de base de datos Mysql.

-Es un motor multiplataforma. 

-Existe una gran cantidad de información disponible.

-Escaso conocimiento del motor de base de datos postgreSQL.

-Mayor velocidad de MYSQL sobre PostgreSQL.

-MySQL es un motor de base de datos con mayor tiempo en el mercado en comparación con

PostgreSQL lo que genera más confianza en el motor.

-A pesar que MySQL tiene una integridad de datos menor a la de PostgreSQL para la envergadura

del proyecto no tiene mayor influencia. 

USO DEL CLIENTE MYSQL

(Información utilizada para comprender, entender y aprender funciones

del motor de la base de datos)

El cliente mysql, 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 batch: es

decir, se pueden colocar toda una serie de consultas en un archivo, y posteriormente decirle

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 6/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

a mysql que ejecute dichas consultas.

Asumimos 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).

Para ver la lista de opciones proporcionadas por mysql , lo invocamos con la opción --help:

shell>mysql --help 

A 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 existente, se pueden omitir lassecciones que describen como crear la base de datos y las tablas correspondientes.

Puesto que es imposible que se describan a detalle muchos de los tópicos cubiertos en esteDocumento, se recomienda que se consulte el manual deMySQL para obtener más información al

respecto. 

Conectándose y desconectándose al servidor MySQL 

Para conectarse al servidor, usualmente necesitamos de un nombre de usuario (login) y de unacontraseña (password), y si el servidor al que nos deseamos conectar está en una máquina diferentede la nuestra, también necesitamos indicar el nombre o la dirección IP de dicho servidor. Una vez

que conocemos estos tres valores, podemos conectarnos de la siguiente manera: 

shell>mysql -h NombreDelServidor -u NombreDeUsuario -p

Cuando ejecutamos este comando, se nos pedirá que proporcionemos también la contraseña para elnombre de usuario que estamos usando.

Si la conexió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 theMySQL monitor.

Commands end with ; or \g. Your MySQL connection id is 5563 to server version: 3.23.41 Type'help;' or '\h' for help. Type '\c' toclearthe buffer. mysql>

Este prompt nos indica que mysql está listo para recibir comandos.

Algunas 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 

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 7/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

Después de que nos hemos conectado de manera satisfactoria, podemos desconectarnos encualquier momento al escribir "quit", "exit", o presionar CO NTR OL+D.

La mayoría de los ejemplos siguientes asume que estamos conectados al servidor, lo cual se indicacon el prompt de mysql . 

EJECUTANDO ALGUNAS CONSULTAS

En este momento debimos de haber podido conectarnos ya al servidor MySQL, aún cuando nohemos seleccionado alguna base de datos para trabajar. Lo que haremos a continuación es escribir 

algunos comandos para irnos familiarizando con el funcionamiento de mysql

mysql> SELECT VERSIO N(), CURRENT_DATE; +-----------+--------------+ | VERSIO N() |

CURRENT_DATE | +-----------+--------------+ | 3.23.41 | 2002-10-01 | +-----------+--------------+ 1row in set (0.03 sec) mysql>

Este comando ilustra distintas cosas acerca de mysql : 

y  Un comando normalmente consiste de un sentencia SQL seguida por un punto y coma.

y  Cuando 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.

y  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. Normalmente las etiquetas de las columnas son los nombres de los campos de lastablas que estamos usando en alguna consulta. Si lo que estamos recuperando es el valor deuna expresión (como en el ejemplo anterior) las etiquetas en las columnas son la expresión

en sí.

y  mysql muestra cuántas filas fueron regresadas y cuanto tiempo tardó en ejecutarse laconsulta, 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 hora del CPU, y porque pueden

verse afectados por otros factores, tales como la carga del servidor y la velocidad decomunicación en una red.

y  Las palabras clave pueden ser escritas usando mayúsculas y minúsculas.

Las siguientes consultas son equivalentes: mysql> SELECT VERSIO N(), CURRENT_DATE; mysql> select version(), current_date;

mysql>SeLeCtvErSiOn(), current_DATE; 

Aquí está otra consulta que demuestra como se pueden escribir algunas expresiones matemáticas y

trigonométricas:

mysql>SELECT SIN(PI()/4), (4+1)*5; +-------------+---------+ | SIN(PI()/4) | (4+1)*5 | +-------------+---------+ | 0.707107 | 25 | +-------------+---------+

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 8/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

Aunque hasta este momento se han 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> SELECT VERSIO N(); SELECT NOW(); +-----------+ | VERSIO N() | +-----------+ | 3.23.41

| +-----------

+ 1 row in set (0.01 sec) +---------------------

+ | NOW

() | +---------------------

+ | 2002-10-

28 14:26:04 | +---------------------+ 1 row in set (0.01 sec) 

EL PROMPT DE MYSQL

Un comando no necesita ser escrito en una sóla línea, así que los comandos que requieran de variaslíneas no son un problema. mysql determinará en dónde finaliza la sentencia cuando encuentre el

 punto y coma, no cuando encuentre el fin de línea.

Aquí está un ejemplo que muestra un consulta simple escrita en varias líneas:

mysql> SELECT -> USER(), ->CURRENT_DATE; +-------------------+--------------+ | USER() |CURRENT_DATE | +-------------------+--------------+ | blueman@localhost | 2002-09-14 | +----------

---------+--------------+ 1 row in set (0.00 sec) mysql>

En este ejemplo debe notarse como cambia el prompt (de mysql> a ->) cuando se escribe unaconsulta en varias líneas. Esta es la manera en cómo mysql indica que está esperando a que finalicela consulta. Sin embargo si deseamos no terminar de escribir la consulta, podemos hacerlo al

escribir c como se muestra en el siguiente ejemplo:

mysql> SELECT -> USER(), -> c mysql>De nuevo, se nos regresa el comando el promptmysql> 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 :

Los comandos multi-línea comúnmente ocurren por accidente cuando tecleamos ENTER, peroolvidamos escribir el punto y coma. En este caso mysql se queda esperando para que finalicemos la

consulta: 

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 comienza con una

comilla sencilla ( ' ).

">Esperando la siguiente línea para completar una cadena que comienza con unacomilla doble ( " ).

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 9/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

mysql>SELECTUSER() ->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 ymysql podrá ejecutarla: 

mysql> SELECTU

SER()-> ; +

----------------+ |U

SER() | +----------------

+ | root@localhost | +------

----------+ 1 row in set (0.00 sec) mysql> 

Los prompts '> y "> ocurren durante la escritura de cadenas. En mysql podemos escribir cadenasutilizando comillas sencillas o comillas dobles (por ejemplo, 'hola' y "hola"), y mysql nos permite

escribir cadenas que ocupen múltiples líneas. De manera que cuando veamos el prompt '> o ">, mysql nos indica que hemos empezado a escribir una cadena, pero no la hemos finalizado con lacomilla correspondiente.

Aunque 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.

Por ejemplo:

mysql>SELECT * FR OMmi_tablaWHERE nombre = "Lupita AND edad < 30; ">

Si escribimos esta consulta SELECT y entonces presionamos ENTER para ver el resultado, nosucederá nada. En lugar de preocuparnos porque la consulta ha tomado mucho tiempo, debemos

notar la pista que nos da mysql cambiando el prompt. Esto nos indica que mysql está esperando quefinalicemos la cadena iniciada ("Lupita).

En este caso, ¿qué es lo que debemos hacer? . 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> SELECT * FR OM mi_tabla WHERE nombre = "Lupita AND edad< 30; "> " 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 significan los prompts '> y ">, ya que si en algún

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 QUIT. Esto puede ser confuso,

especialmente si no sabemos que es necesario escribir la comilla correspondiente para finalizar la

cadena, para que podamos escribir después algún otro comando, o terminar la.

CALCULOS CON FECHAS

MySQL proporciona diversas funciones que se pueden usar para efectuar cálculos sobre fechas, por ejemplo, para calcular edades o extraer partes de una fecha (día, mes, año, etc).

Para determinar la edad de cada una de nuestras mascotas, tenemos que calcular la diferencia de

años de la fecha actual y la fecha de nacimiento, y entonces substraer uno si la fecha actual ocurre

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 10/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

antes en el calendario que la fecha de nacimiento. Las siguientes consultas muestran la fecha actual,

la fecha de nacimiento y la edad para cada mascota.

mysql>SELECT nombre, nacimiento, CU

RRENT_DATE,-> (YEAR(C

URRENT_DATE)

- YEAR(nacimiento)) -> - (RIGHT(CURRENT_DATE,5) <RIGHT(nacimiento,5)) AS edad FR OM 

mascotas; +--------+------------+--------------+------+ | nombre | nacimiento | CURRENT_DATE |

edad | +--------+------------+--------------+------+ | Fluffy | 1999-02-04 | 2002-12-23 | 3 | | Mau | 1998-03-17 | 2002-12-23 | 4 | | Buffy | 1999-05-13 | 2002-12-23 | 3 | | FanFan | 2000-08-27 | 2002-12-23 |

2 | | Kaiser | 1989-08-31 | 2002-12-23 | 13 | | Chispa | 1998-09-11 | 2002-12-23 | 4 | | Wicho | 2000-02-09 | 2002-12-23 | 2 | | Skim | 2001-04-29 | 2002-12-23 | 1 | | Pelusa | 2000-03-30 | 2002-12-23 | 2| +--------+------------+--------------+------+ 9 rows in set (0.01 sec)

Aquí, YEAR( ) obtiene únicamente el año y RIGHT( ) obtiene los cinco caracteres más a la derechade cada una de las fechas, que representan el mes y el día (MM-DD). La parte de la expresión quecompara los valores MM-DD se evalúa a 1 o 0, y permite ajustar el valor de la edad en el caso de

que el valor MM-DD de la fecha actual ocurra antes del valor MM-DD de la fecha de nacimiento.

Dado que la expresión en sí es bastante fea, se ha 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 útil si las filasson presentadas en algún orden. Para ello haremos uso de la cláusula ORDERBY.

Por ejemplo, para ordenar por nombre, usaremos la siguiente consulta:

mysql>SELECT nombre, nacimiento, CURRENT_DATE, -> (YEAR(CURRENT_DATE) - YEAR(nacimiento)) -> - (RIGHT(CURRENT_DATE,5) <RIGHT(nacimiento,5)) -> AS edad

FR OM mascotas ORDERBY nombre; +--------+------------+--------------+------+ | nombre |nacimiento | CURRENT_DATE | edad | +--------+------------+--------------+------+ | Buffy | 1999-05-13 | 2002-12-23 | 3 | | Chispa | 1998-09-11 | 2002-12-23 | 4 | | FanFan | 2000-08-27 | 2002-12-23 | 2 || Fluffy | 1999-02-04 | 2002-12-23 | 3 | | Kaiser | 1989-08-31 | 2002-12-23 | 13 | | Mau | 1998-03-17 |

2002-12-23 | 4 | | Pelusa | 2000-03-30 | 2002-12-23 | 2 | | Skim | 2001-04-29 | 2002-12-23 | 1 | |

Wicho | 2000-02-09 | 2002-12-23 | 2 | +--------+------------+--------------+------+ 9 rows in set (0.00sec)

Para ordenar por edad en lugar de nombre, únicamente tenemos que usar una cláusula ORDERBY

diferente: mysql>SELECT nombre, nacimiento, CURRENT_DATE, -> (YEAR(CURRENT_DATE) - 

YEAR(nacimiento)) -> - (RIGHT(CURRENT_DATE,5) <RIGHT(nacimiento,5)) -> AS edad

FR OM mascotas ORDERBY edad; +--------+------------+--------------+------+ | nombre | nacimiento |

CURRENT_DATE | edad | +--------+------------+--------------+------+ | Skim | 2001-04-29 | 2002-12-23 | 1 | | FanFan | 2000-08-27 | 2002-12-23 | 2 | | Wicho | 2000-02-09 | 2002-12-23 | 2 | | Pelusa |

2000-03-30 | 2002-12-23 | 2 | | Fluffy | 1999-02-04 | 2002-12-23 | 3 | | Buffy | 1999-05-13 | 2002-12-23 | 3 | | Mau | 1998-03-17 | 2002-12-23 | 4 | | Chispa | 1998-09-11 | 2002-12-23 | 4 | | Kaiser | 1989-08-31 | 2002-12-23 | 13 | +--------+------------+--------------+------+ 9 rows in set (0.01 sec) 

consulta que deseamos ejecutar.

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 11/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

Coincidencia de patrones

MySQL posee capacidades estándar para utilizar patrones así como también una forma de patrones

 basada en expresiones regulares extendidas similares a las que se encuentran en utilidades de

U NIX, como ser vi, grep, ysed.

Los patrones SQL permiten emplear el caracter ' _ ' para representar coincidencia con un carácter 

individual y '%' EnMySQL, por defecto, los patrones SQL no son case-sensitive. Abajo se

muestran algunos ejemplos. Advierta que no se emplean los operadores = o <> para trabajar con

 patrones SQL, en lugar de eso se usan los operadores de comparación LIKE o NOTLIKE.

Para encontrar nombres que comiencen con 'b':

mysql> SELECT * FROM pet WHERE name LIKE 'b%';

+--------+--------+---------+------+------------+------------+

| name | owner | species | sex | birth | death |

+--------+--------+---------+------+------------+------------+

| Buffy | Harold | dog | f | 1989-05-13 | NULL |

| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |

+--------+--------+---------+------+------------+------------+

Para encontrar nombres que terminen con 'fy':

mysql> SELECT * FROM pet WHERE name LIKE '%fy';

+--------+--------+---------+------+------------+-------+

| name | owner | species | sex | birth | death |

+--------+--------+---------+------+------------+-------+

| Fluffy | Harold | cat | f | 1993-02-04 | NULL |

| Buffy | Harold | dog | f | 1989-05-13 | NULL |

+--------+--------+---------+------+------------+-------+

Para encontrar nombres que contengan 'w':

mysql> SELECT * FROM pet WHERE name LIKE '%w%';

+----------+-------+---------+------+------------+------------+

| name | owner | species | sex | birth | death |

+----------+-------+---------+------+------------+------------+

| Claws | Gwen | cat | m | 1994-03-17 | NULL |

| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |

| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |

+----------+-------+---------+------+------------+------------+

Para encontrar nombres que contengan exactamente 5 caracteres, use 5 veces el caracter patrón ' _ ':

mysql> SELECT * FROM pet WHERE name LIKE '_____';

+-------+--------+---------+------+------------+-------+

| name | owner | species | sex | birth | death |

+-------+--------+---------+------+------------+-------+

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 12/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

| Claws | Gwen | cat | m | 1994-03-17 | NULL |

| Buffy | Harold | dog | f | 1989-05-13 | NULL |

+-------+--------+---------+------+------------+-------+

Los otros patrones que pueden emplearse con MySQL usan expresiones regulares extendidas.

Cuando busque coincidencias con este tipo de patrones, use los

operadores REGEXP y NOTREGEXP (o bien los sinónimos RLIKE yNOTRLIKE).

Algunas características de las expresiones regulares extendidas:

y  '.' detecta coincidencia con cualquier carácter individual.

y  Una clase de carácter '[...]' detecta coincidencia con cualquier caracter entre los corchetes. Por 

ejemplo, '[abc]' coincidirá con 'a', 'b', o 'c'. Para hacer referencia a un rango de caracteres, use un

guión. '[a-z]' detecta coincidencia con cualquier letra, mientras que '

[0-9]' lo hace con cualquier 

dígito.

y  '*' detecta coincidencia con cero o más apariciones de los caracteres que lo preceden. Por 

ejemplo, 'x*' detecta cualquier número de caracteres 'x', '[0-9]*' detecta cualquier cantidad de

dígitos, y '.*' coincidirá con cualquier número de cualquier carácter.

y  REGEXP tendrá éxito si el patrón suministrado encuentra coincidencia en cualquier parte del

valor examinado (esto difiere de LIKE en que este último solo tiene éxito si el patrón concuerda

con todo el valor).

y  Para lograr que un patrón detecte coincidencias solamente al principio o al final del valor 

examinado, utilice '^' al principio o '$' al final del patrón.

Para demostrar el funcionamiento de las expresiones regulares extendidas, las consultas

con LIKE expuestas anteriormente se han reescrito utilizando REGEXP.

Para hallar nombres que comiencen con 'b', use '^' para buscar coincidencia al principio del valor:

mysql> SELECT * FROM pet WHERE name REGEXP '^b';

+--------+--------+---------+------+------------+------------+

| name | owner | species | sex | birth | death |

+--------+--------+---------+------+------------+------------+

| Buffy | Harold | dog | f | 1989-05-13 | NULL |

| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |

+--------+--------+---------+------+------------+------------+

EnMySQL 5.0, si realmente quiere forzar a que la comparación realizada por REGEXP sea case

sensitive, utilice la palabra clave BINARY para convertir a una de las cadenas en una cadena

 binaria. Esta consulta solamente encontrará coincidencia con 'b' minúsculas al comienzo de un

nombre:

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 13/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

mysql> SELECT * FROM pet WHERE name REGEXP BINARY '^b';

Para hallar nombres finalizados en 'fy', emplee '$' para buscar la coincidencia en el final del

nombre:mysql> SELECT * FROM pet WHERE name REGEXP 'fy$';

+--------+--------+---------+------+------------+-------+

| name | owner | species | sex | birth | death |

+--------+--------+---------+------+------------+-------+

| Fluffy | Harold | cat | f | 1993-02-04 | NULL |

| Buffy | Harold | dog | f | 1989-05-13 | NULL |

+--------+--------+---------+------+------------+-------+

Para encontrar nombres conteniendo una 'w', utilice esta consulta:

mysql> SELECT * FROM pet WHERE name REGEXP 'w';

+----------+-------+---------+------+------------+------------+| name | owner | species | sex | birth | death |

+----------+-------+---------+------+------------+------------+

| Claws | Gwen | cat | m | 1994-03-17 | NULL |

| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |

| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |

+----------+-------+---------+------+------------+------------+

Debido a que un patrón de expresión regular encuentra coincidencia sin importar el lugar del valor 

donde se produce, en la consulta previa no es necesario colocar un comodín a cada lado del patrón

 para obtener coincidencia en cualquier parte del valor, como hubiera sucedido de utilizar un patrón

SQL

Para hallar nombres conteniendo exactamente cinco caracteres, use '^' y '$' para obligar a que la

coincidencia deba estar al principio y al final del nombre, y cinco instancias de '.' entre ellas.

mysql> SELECT * FROM pet WHERE name REGEXP '^.....$';

+-------+--------+---------+------+------------+-------+

| name | owner | species | sex | birth | death |

+-------+--------+---------+------+------------+-------+

| Claws | Gwen | cat | m | 1994-03-17 | NULL |

| Buffy | Harold | dog | f | 1989-05-13 | NULL |

+-------+--------+---------+------+------------+-------+

La consulta anterior también se podría haber escrito empleando el operador '{n}' ³repetir -n-veces´:

mysql> SELECT * FROM pet WHERE name REGEXP '^.{5}$';

+-------+--------+---------+------+------------+-------+

| name | owner | species | sex | birth | death |

+-------+--------+---------+------+------------+-------+

| Claws | Gwen | cat | m | 1994-03-17 | NULL |

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 14/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

| Buffy | Harold | dog | f | 1989-05-13 | NULL |

+-------+--------+---------+------+------------+-------+

¿Qué información hay?

Un primer paso antes de ver cómo borrar información es saber qué información tenemos

almacenada.

Podemos saber las bases de datos que hay creadas en nuestro sistema con:

showdatabases;

Una vez que estamos trabajando con una base de datos concreta (con la orden "use"), podemos

saber las tablas que contiene con:

showtables;

Y para una tabla concreta, podemos saber los campos (columnas) que la forman con "show

columnsfrom":

showcolumnsfrom personas;

Por ejemplo, esto daría como resultado:

+-----------+--------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-----------+--------------+------+-----+---------+-------+

| nombre | varchar(20) | YES | | NULL | |

| direccion | varchar(40) | YES | | NULL | |

| edad | decimal(3,0) | YES | | NULL | |

| codciudad | varchar(3) | YES | | NULL | |

+-----------+--------------+------+-----+---------+-------+

Borrar toda la base de datos

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 15/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

En alguna ocasión, como ahora que estamos practicando, nos puede interesar borrar toda la base de

datos. La orden para conseguirlo es:

dropdatabase ejemplo2;

Si esta orden es parte de una secuencia larga de órdenes, que hemos cargado con la orden "source"

(por ejemplo) y la base de datos no existe, obtendríamos un mensaje de error y se interrumpiría el proceso. Podemos evitarlo añadiendo "ifexists", para que se borre la base de datos sólo si realmente

existe:

dropdatabase ejemplo2 ifexists;

Borrar una tabla

Es más frecuente que creemos alguna tabla de forma incorrecta. La solución razonable es corregir ese error, cambiando la estructura de la tabla, pero todavía no sabemos hacerlo. Al menos veremos

cómo borrar una tabla. La orden es:

droptable personas;

Al igual que para las bases de datos, podemos hacer que la tabla se borre sólo cuando realmente

existe:

drop table personas if exists;

Borrar datos de una tabla

También podemos borrar los datos que cumplen una cierta condición. La orden es "deletefrom", y

con "where" indicamos las condiciones que se deben cumplir, de forma similar a como hacíamos en

la orden "select":

delete from personas where nombre = 'juan';

Esto borraría todas las personas llamadas "juan" que estén almacenadas en la tabla "personas".

Cuidado: si no se indica la parte de "where", no se borrarían los datos que cumplen una condición,

sino TODOS los datos. Si es eso lo que se pretende, una forma más rápida de conseguirlo es usar:

truncatetable personas;

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 16/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

Modificación de datos

Ya sabemos borrar datos, pero existe una operación más frecuente que esa (aunque tambiénligeramente más complicada): modificar los datos existentes. Con lo que sabíamos hasta ahora,

 podíamos hacer algo parecido: si un dato es incorrecto, podríamos borrarlo y volver a introducirlo, pero esto, obviamente, no es lo más razonable... debería existir alguna orden para cambiar los datos.

Así es. El formato habitual para modificar datos de una tabla es "update tabla set

campo=nuevoValorwherecondicion".

Por ejemplo, si hemos escrito "Alberto" en minúsculas ("alberto"), lo podríamos corregir con:

update personas set nombre = 'Alberto' where nombre = 'alberto';

Y si queremos corregir todas las edades para sumarles un año se haría con

update personas set edad = edad+1;

(al igual que habíamos visto para "select" y para "delete", si no indicamos la parte del "where", los

cambios se aplicarán a todos los registros de la tabla).

Modificar la estructura de una tabla

Algo más complicado es modificar la estructura de una tabla: añadir campos, eliminarlos, cambiar su nombre o el tipo de datos. En general, para todo ello se usará la orden "alter table". Vamos a ver 

las posibilidades más habituales.

Para añadir un campo usaríamos "add":

altertable ciudades add habitantes decimal(7);

Si no se indica otra cosa, el nuevo campo se añade al final de la tabla. Si queremos que sea el

 primer campo, lo indicaríamos añadiendo "first" al final de la orden. También podemos hacer que se

añada después de un cierto campo, con "afternombreCampo".

Podemos modificar el tipo de datos de un campo con "modify". Por ejemplo, podríamos hacer queel campo "habitantes" no fuera un "decimal" sino un entero largo ("bigint") con:

altertable ciudades modify habitantes bigint;

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 17/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

Si queremos cambiar el nombre de un campo, debemos usar "change" (se debe indicar el nombreantiguo, el nombre nuevo y el tipo de datos). Por ejemplo, podríamos cambiar el nombre

"habitantes" por "numhabitantes":

altertable ciudades change habitantes numhabitantesbigint;

Si queremos borrar algún campo, usaremos "dropcolumn":

altertable ciudades dropcolumnnumhabitantes;

Muchas de estas órdenes se pueden encadenar, separadas por comas. Por ejemplo, podríamos borrar 

dos campos con "alter table ciudades dropcolumnnum habitantes, dropcolumn provincia;"

Finalmente, también podríamos cambiar el nombre de una tabla con "rename":

altertable ciudades rename ciudad;

Operaciones matemáticas

Desde SQL podemos realizar operaciones a partir de los datos antes de mostrarlos. Por ejemplo,

 podemos mostrar cual era la edad de una persona hace un año, con

select edad-1 from personas;

Los operadores matemáticos que podemos emplear son los habituales en cualquier lenguaje de

 programación, ligeramente ampliados: + (suma), - (resta y negación), * (multiplicación), / (división). La división calcula el resultado con decimales; si queremos trabajar con números enteros, también

tenemos los operadores DIV (división entera) y MOD (resto de la división):

select 5/2, 5 div 2, 5 mod 2;

Daría como resultado

+--------+---------+---------+

| 5/2 | 5 div 2 | 5 mod 2 |

+--------+---------+---------+

| 2.5000 | 2 | 1 |

+--------+---------+---------+

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 18/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

También podríamos utilizar incluso operaciones a nivel de bits, como las del lenguaje C:

select 25 >> 1, 25 > 1 | 25 24;

que mostraría

+----------+------+

| count(*) | edad |

+----------+------+

| 1 | 25 |

+----------+------+

¿Qué es una subconsulta?

A veces tenemos que realizar operaciones más complejas con los datos, operaciones en las que nos

interesaría ayudarnos de una primera consulta auxiliar que extrajera la información en la que nos

queremos basar. Esta consulta auxiliar recibe el nombre de "subconsulta" o "subquery".

Por ejemplo, si queremos saber qué clientes tenemos en la ciudad que más habitantes tenga, laforma "razonable" de conseguirlo sería saber en primer lugar cual es la ciudad que más habitantes

tenga, y entonces lanzar una segunda consulta para ver qué clientes hay en esa ciudad.

Como la estructura de nuestra base de datos de ejemplo es muy sencilla, no podemos hacer grandes

cosas, pero un caso parecido al anterior (aunque claramente más inútil) podría ser saber qué personas tenemos almacenadas que vivan en la última ciudad de nuestra lista.

Para ello, la primera consulta (la "subconsulta") sería saber cual es la última ciudad de nuestra lista.

Si lo hacemos tomando la que tenga el último código, la consulta podría ser 

SELECTMAX(codigo) FR OM ciudades;

Vamos a imaginar que pudiéramos hacerlo en dos pasos. Si llamamos "maxCodigo" a ese código

obtenido, la "segunda" consulta podría ser:

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 19/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

SELECT * FR OM personas WHERE codciudad= maxCodigo;

Pero estos dos pasos se pueden dar en uno: al final de la "segunda" consulta (la "grande") incluimos

la primera consulta (la "subconsulta"), entre paréntesis, así

SELECT * FR OM personas WHERE codciudad= (

SELECTMAX(codigo) FR OM ciudades

);

Subconsultas que devuelven conjuntos de datos

Si la subconsulta no devuelve un único dato, sino un conjunto de datos, la forma de trabajar será básicamente la misma, pero para comprobar si el valor coincide con uno de la lista, no usaremos el

símbolo "=", sino la palabra "in".

Por ejemplo, vamos a hacer una consulta que nos muestre las personas que viven en ciudades cuyo

nombre tiene una "a" en segundo lugar (por ejemplo, serían ciudades válidas Madrid o Barcelona,

 pero no Alicante).

Para consultar qué letras hay en ciertas posiciones de una cadena, podemos usar SUBSTRING (enel próximo apartado veremos las funciones más importantes de manipulación de cadenas). Así, una

forma de saber qué ciudades tienen una letra A en su segunda posición sería:

SELECT codigo FR OM ciudades

WHERE SUBSTRING(nombre,2,1)='a';

Como esta subconsulta puede tener más de un resultado, deberemos usar IN para incluirla en la

consulta principal, que quedaría de esta forma:

SELECT * FR OM personas

WHERE codciudad IN

(

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 20/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

SELECT codigo FR OM ciudadesWHERE SUBSTRING(nombre,2,1)='a'

);

Funciones de cadena

EnMySQL tenemos muchas funciones para manipular cadenas: calcular su longitud, extraer un

fragmento situado a la derecha, a la izquierda o en cualquier posición, eliminar espacios finales o

iniciales, convertir a hexadecimal y a binario, etc. Vamos a comentar las más habituales. Losejemplos estarán aplicados directamente sobre cadenas, pero (por supuesto) también se pueden

aplicar a campos de una tabla:

Funciones de conversión a mayúsculas/minúsculas

� LOWER o LCASE convierte una cadena a minúsculas: SELECTLOWER('Hola'); -> hola

� UPPER oUCASE convierte una cadena a mayúsculas: SELECTUPPER('Hola'); -> HOLA

Funciones de extracción de parte de la cadena

� LEFT(cadena, longitud) extrae varios caracteres del comienzo (la parte izquierda) de la

cadena: SELECTLEFT('Hola',2); -> Ho

� RIGHT(cadena, longitud) extrae varios caracteres del final (la parte derecha) de la cadena:

SELECTRIGHT('Hola',2); -> la

� MID(cadena, posición, longitud), SUBSTR(cadena, posición, longitud) oSUBSTRING(cadena, posición, longitud) extrae varios caracteres de cualquier posición de una

cadena, tantos como se indique en "longitud": SELECTSUBSTRING('Hola',2,2); ->ol (Nota: a

 partir MySQL 5 se permite un valor negativo en la posición, y entonces se comienza a contar desdela derecha -el final de la cadena-)

� CO NCAT une (concatena) varias cadenas para formar una nueva: SELECTCO NCAT('Ho',

'la'); -> Hola

� CO NCAT_ WS une (concatena) varias cadenas para formar una nueva, usando un separador 

que se indique (WithSeparator): SELECTCO NCAT_ WS('-','Ho','la','Que','tal'); -> Ho-la-Que-tal

� LTRIM devuelve la cadena sin los espacios en blanco que pudiera contener al principio (en su

 parte izquierda): SELECTLTRIM(' Hola'); -> Hola

� RTRIM devuelve la cadena sin los espacios en blanco que pudiera contener al final (en su

 parte derecha): SELECTRTRIM('Hola '); -> Hola

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 21/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

� TRIM devuelve la cadena sin los espacios en blanco que pudiera contener al principio ni alfinal: SELECTTRIM(' Hola '); -> Hola (Nota: realmente, TRIM puede eliminar cualquier prefijo,

no sólo espacios; mira el manual deMySQL para más detalles)

Funciones de conversión de base numérica

� BIN convierte un número decimal a binario: SELECTBIN(10); -> 1010

� HEX convierte un número decimal a hexadecimal: SELECTHEX(10); -> 'A' (Nota: HEX 

también puede recibir una cadena, y entonces mostrará el código ASCII en hexadecimal de suscaracteres: SELECTHEX('Hola'); -> '486F6C61')

� OCT convierte un número decimal a octal: SELECTOCT(10); -> 12

� CO NV(número,baseInicial,baseFinal) convierte de cualquier base a cualquier base:

SELECTCO NV('F3',16,2); -> 11110011

� U NHEX convierte una serie de números hexadecimales a una cadena ASCII, al contrario de

lo que hace HEX: SELECTU NHEX('486F6C61'); -> 'Hola')

Otras funciones de modificación de la cadena

� INSERT(cadena,posición,longitud,nuevaCadena) inserta en la cadena otra cadena:

SELECTINSERT('Hola', 2, 2, 'ADIOS'); ->HADIOSa

� REPLACE(cadena,de,a) devuelve la cadena pero cambiando ciertas secuencias de caracteres por otras: SELECTREPLACE('Hola', 'l', 'LLL'); ->HoLLLa

� REPEAT(cadena,numero) devuelve la cadena repetida varias veces: SELECTREPEAT('

Hola',3); ->HolaHolaHola

� REVERSE(cadena) devuelve la cadena "del revés": SELECT REVERSE('Hola'); ->aloH 

� SPACE(longitud) devuelve una cadena formada por varios espacios en blanco:

SELECTSPACE(3); -> " "

Funciones de información sobre la cadena

� CHAR_LENGTH o CHARACTER_LENGTH devuelve la longitud de la cadena en

caracteres

� LENGTH devuelve la longitud de la cadena en bytes

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 22/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

� BIT_LENGTH devuelve la longitud de la cadena en bits

� INSTR(cadena,subcadena) o LOCATE(subcadena,cadena,posInicial) devuelve la posición de

una subcadena dentro de la cadena: SELECTINSTR('H

ola','ol');-> 2

(Más detalles en el apartado 12.3 del manual de referencia MySQL 5.0)

Los "join"

Sabemos enlazar varias tablas para mostrar datos que estén relacionados. Por ejemplo, podríamosmostrar nombres de deportistas, junto con los nombres de los deportes que practican. Pero todavíahay un detalle que se nos escapa: ¿cómo hacemos si queremos mostrar todos los deportes que hay

en nuestra base de datos, incluso aunque no haya deportistas que los practiquen?

Vamos a crear una base de datos sencilla para ver un ejemplo de cual es este problema y de cómo

solucionarlo.

 Nuestra base de datos se llamará "ejemploJoins":

createdatabaseejemploJoins;

useejemploJoins;

En ella vamos a crear una primera tabla en la que guardaremos "capacidades" de personas (cosasque saben hacer):

createtable capacidad(

codigovarchar(4),

nombrevarchar(20),

 primarykey(codigo)

);

También crearemos una segunda tabla con datos básicos de personas:

createtable persona(

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 23/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

codigovarchar(4),

nombrevarchar(20),

codcapacvarchar(4),

 primarykey(codigo)

);

Vamos a introducir datos de ejemplo:

insert into capacidad values

('c','Progr.C'),

('pas','Progr.Pascal'),

('j','Progr.Java'),

('sql','Bases datos SQL');

insert into persona values

('ju','Juan','c'),

('ja','Javier','pas'),

('jo','Jose','perl'),

('je','Jesus','html');

Antes de seguir, comprobamos que todo está bien:

select * from capacidad;

+--------+-----------------+

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 24/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

| codigo | nombre |

+--------+-----------------+

| c | Progr.C |

| j | Progr.Java |

| pas | Progr.Pascal |

| sql | Bases datos SQL |

+--------+-----------------+

select * from persona;

+--------+--------+----------+

| codigo | nombre | codcapac |

+--------+--------+----------+

| ja | Javier | pas |

| je | Jesus | html |

| jo | Jose | perl |

| ju | Juan | c |

+--------+--------+----------+

Como se puede observar, hay dos capacidades en nuestra base de datos para las que no conocemos a

ninguna persona; de igual modo, existen dos personas que tienen capacidades sobre las que no

tenemos ningún detalle.

Por eso, si mostramos las personas con sus capacidades de la forma que sabemos, sólo apareceránlas parejas de persona y capacidad para las que todo está claro (existe persona y existe capacidad),

es decir:

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 25/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

select * from capacidad, persona

wherepersona.codcapac = capacidad.codigo;

+--------+--------------+--------+--------+----------+

| codigo | nombre | codigo | nombre | codcapac |

+--------+--------------+--------+--------+----------+

| c | Progr.C | ju | Juan | c |

| pas | Progr.Pascal | ja | Javier | pas |

+--------+--------------+--------+--------+----------+

Podemos resumir un poco esta consulta, para mostrar sólo los nombres, que son los datos que másnos interesan:

selectpersona.nombre, capacidad.nombre

from persona, capacidad

wherepersona.codcapac = capacidad.codigo;

+--------+--------------+

| nombre | nombre |

+--------+--------------+

| Juan | Progr.C |

| Javier | Progr.Pascal |

+--------+--------------+

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 26/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

Hay que recordar que la orden "where" es obligatoria: si no indicamos esa condición, se mostraría el"producto cartesiano" de las dos tablas: todos los parejas (persona, capacidad), aunque no estén

relacionados en nuestra base de datos:

selectpersona.nombre, capacidad.nombre

from persona, capacidad;

+--------+-----------------+

| nombre | nombre |

+--------+-----------------+

| Javier | Progr.C |

| Jesus | Progr.C |

| Jose | Progr.C |

| Juan | Progr.C |

| Javier | Progr.Java |

| Jesus | Progr.Java |

| Jose | Progr.Java |

| Juan | Progr.Java |

| Javier | Progr.Pascal |

| Jesus | Progr.Pascal |

| Jose | Progr.Pascal |

| Juan | Progr.Pascal |

| Javier | Bases datos SQL |

| Jesus | Bases datos SQL |

| Jose | Bases datos SQL |

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 27/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

| Juan | Bases datos SQL |

+--------+-----------------+

Pues bien, con órdenes "join" podemos afinar cómo queremos enlazar (en inglés, "join", unir) lastablas. Por ejemplo, si queremos ver todas las personas y todas las capacidades, aunque no estén

relacionadas (algo que no tiene sentido en la práctica), como en el ejemplo anterior, lo podríamos

hacer con un "crossjoin":

selectpersona.nombre, capacidad.nombre

from persona crossjoin capacidad;

+--------+-----------------+

| nombre | nombre |

+--------+-----------------+

| Javier | Progr.C |

| Jesus | Progr.C |

| Jose | Progr.C |

| Juan | Progr.C |

| Javier | Progr.Java |

| Jesus | Progr.Java |

| Jose | Progr.Java |

| Juan | Progr.Java |

| Javier | Progr.Pascal |

| Jesus | Progr.Pascal |

| Jose | Progr.Pascal |

| Juan | Progr.Pascal |

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 28/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

| Javier | Bases datos SQL |

| Jesus | Bases datos SQL |

| Jose | Bases datos SQL |

| Juan | Bases datos SQL |

+--------+-----------------+

Si sólo queremos ver los datos que coinciden en ambas tablas, lo que antes conseguíamoscomparando los códigos con un "where", también podemos usar un "innerjoin" (unión interior; se

 puede abreviar simplemente "join"):

selectpersona.nombre, capacidad.nombre

from persona innerjoin capacidad

onpersona.codcapac = capacidad.codigo;

+--------+--------------+

| nombre | nombre |

+--------+--------------+

| Juan | Progr.C |

| Javier | Progr.Pascal |

+--------+--------------+

Pero aquí llega la novedad: si queremos ver todas las personas y sus capacidades, incluso para

aquellas personas cuya capacidad no está detallada en la otra tabla, usaríamos un "leftjoin" (unión por la izquierda, también se puede escribir "leftouterjoin", unión exterior por la izquierda, para dejar 

claro que se van a incluir datos que están sólo en una de las dos tablas):

selectpersona.nombre, capacidad.nombre

from persona leftouterjoin capacidad

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 29/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

onpersona.codcapac = capacidad.codigo;

+--------+--------------+

| nombre | nombre |

+--------+--------------+

| Javier | Progr.Pascal |

| Jesus | NULL |

| Jose | NULL |

| Juan | Progr.C |

+--------+--------------+

De igual modo, si queremos ver todas las capacidades, incluso aquellas para las que no hay detallessobre personas, podemos escribir el orden de las tablas al revés en la consulta anterior, o bien usar 

"rightjoin" (o "rightouterjoin"):

selectpersona.nombre, capacidad.nombre

from persona rightouterjoin capacidad

onpersona.codcapac = capacidad.codigo;

+--------+-----------------+

| nombre | nombre |

+--------+-----------------+

| Juan | Progr.C |

| NULL | Progr.Java |

| Javier | Progr.Pascal |

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 30/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

| NULL | Bases datos SQL |

+--------+-----------------+

Otros gestores de bases de datos permiten combinar el "rightjoin" y el "leftjoin" en una única

consulta, usando "full outerjoin", algo que no permite MySQL en su versión actual.

(Más detalles en el apartado 13.2.7.1 del manual de referencia MySQL 5.0)

Union, Vistas

En el apartado anterior comentábamos que la versión actual de MySQL no permite usar "fullouterjoin" para mostrar todos los datos que hay en dos tablas enlazadas, aunque alguno de esos

datos no tenga equivalencia en la otra tabla.

También decíamos que se podría imitar haciendo a la vez un "rightjoin" y un "leftjoin".

En general, tenemos la posibilidad de unir dos consultas en una usando "union", así:

selectpersona.nombre, capacidad.nombre

from persona rightouterjoin capacidad

onpersona.codcapac = capacidad.codigo

union

selectpersona.nombre, capacidad.nombre

from persona left outer join capacidad

onpersona.codcapac = capacidad.codigo;

+--------+-----------------+

| nombre | nombre |

+--------+-----------------+

| Juan | Progr.C |

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 31/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

| NULL | Progr.Java |

| Javier | Progr.Pascal |

| NULL | Bases datos SQL |

| Jesus | NULL |

| Jose | NULL |

+--------+-----------------+

 Nota: en algunos gestores de bases de datos, podemos no sólo crear "uniones" entre dos tablas, sino

también realizar otras operaciones habituales entre conjuntos, como calcular su intersección("intersection") o ver qué elementos hay en la primera pero no en la segunda (diferencia,

"difference"). Estas posibilidades no están disponibles en la versión actual de MySQL.

Implementación en el Navicat Premium

/*

 Navicat MySQL Data Transfer 

Source Server : local

Source Server Version : 50141

Source Host : localhost:3306

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 32/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

Source Database : cdcol

Target Server Type : MYSQL

Target Server Version : 50141

File Encoding : 65001

Date: 2011-06-16 23:44:30

*/

SET FOREIGN_KEY_CHECKS=0;

-- ---------------------------- 

-- Table structure for `contactos`

-- ---------------------------- 

DR OP TABLE IF EXISTS `contactos`;

CREATE TABLE `contactos` (

`id_c` int(11) NOT NULL AUTO _INCREMENT,

`nombre1` varchar(50) COLLATE latin1_general_ci NOT NULL,

`nombre2` varchar(50) COLLATE latin1_general_ci NOT NULL,

`ape_pat` varchar(50) COLLATE latin1_general_ci NOT NULL,

`ape_mat` varchar(50) COLLATE latin1_general_ci NOT NULL,

`empresa` varchar(50) COLLATE latin1_general_ci NOT NULL,

`direccion` varchar(50) COLLATE latin1_general_ci NOT NULL,

`telefono1` decimal(10,0) NOT NULL,

`teleono2` decimal(10,0) NOT NULL,

`celular` decimal(10,0) NOT NULL,

`otro` decimal(10,0) NOT NULL,

`correo` varchar(50) COLLATE latin1_general_ci NOT NULL,

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 33/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

`id_tc` int(11) NOT NULL,

`rfc` varchar(15) COLLATE latin1_general_ci NOT NULL,

`fecha_captura` date NOT NULL,

`id_s` int(11) NOT NULL,

PRIMARY KEY (`id_c`),

KEY `id_tc` (`id_tc`),

KEY `id_s` (`id_s`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

-- ---------------------------- 

-- Records of contactos

-- ---------------------------- 

-- ---------------------------- 

-- Table structure for `estatus`

-- ---------------------------- 

DR OP TABLE IF EXISTS `estatus`;

CREATE TABLE `estatus` (

`id_s` int(11) NOT NULL AUTO _INCREMENT,

`descripcion` varchar(50) COLLATE latin1_general_ci NOT NULL,

PRIMARY KEY (`id_s`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

-- ---------------------------- 

-- Records of estatus

-- ---------------------------- 

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 34/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

-- ---------------------------- 

-- Table structure for `eventos`

-- ---------------------------- 

DR OP TABLE IF EXISTS `eventos`;

CREATE TABLE `eventos` (

`id_e` int(11) NOT NULL AUTO _INCREMENT,

`descripcion` varchar(50) COLLATE latin1_general_ci NOT NULL,

`id_c` int(11) NOT NULL,

`fecha` datetime NOT NULL,

PRIMARY KEY (`id_e`),

KEY `id_c` (`id_c`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

-- ---------------------------- 

-- Records of eventos

-- ---------------------------- 

-- ---------------------------- 

-- Table structure for `tipo_contactos`

-- ---------------------------- 

DR OP TABLE IF EXISTS `tipo_contactos`;

CREATE TABLE `tipo_contactos` (

`id_tc` int(11) NOT NULL,

`descripcion` varchar(50) COLLATE latin1_general_ci NOT NULL,

PRIMARY KEY (`id_tc`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 35/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

-- ---------------------------- 

-- Records of tipo_contactos

-- ---------------------------- 

-- ---------------------------- 

-- Table structure for `tipo_usuario`

-- ---------------------------- 

DR OP TABLE IF EXISTS `tipo_usuario`;

CREATE TABLE `tipo_usuario` (

`id_tu` int(11) NOT NULL AUTO _INCREMENT,

`descripcion` varchar(50) COLLATE latin1_general_ci DEFAULT NULL,

`id_s` int(11) DEFAULT NULL,

PRIMARY KEY (`id_tu`),

KEY `id_s` (`id_s`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

-- ---------------------------- 

-- Records of tipo_usuario

-- ---------------------------- 

-- ---------------------------- 

-- Table structure for `usuarios`

-- ---------------------------- 

DR OP TABLE IF EXISTS `usuarios`;

CREATE TABLE `usuarios` (

`id_u` int(11) NOT NULL AUTO _INCREMENT,

`nombre1` varchar(50) COLLATE latin1_general_ci NOT NULL,

5/8/2018 Uso Del Cliente Mysql - slidepdf.com

http://slidepdf.com/reader/full/uso-del-cliente-mysql 36/36

 

ADMINISTRACIÓN DE BASE DE DATOSCENTRO UNIVERSITARIO FELIPE CARRILLO PUERTO

CATEDRÁTICO: Miguel SuasteProyecto:Agenda Digital.

`nombre2` varchar(50) COLLATE latin1_general_ci NOT NULL,

`ape_pat` varchar(50) COLLATE latin1_general_ci NOT NULL,

`ape_mat` varchar(50) COLLATE latin1_general_ci NOT NULL,

`correo1` varchar(50) COLLATE latin1_general_ci NOT NULL,

`correo2` varchar(50) COLLATE latin1_general_ci NOT NULL,

`telefono` decimal(10,0) NOT NULL,

`puesto` varchar(50) COLLATE latin1_general_ci NOT NULL,

`fechar_reg` date NOT NULL,

`id_s` int(11) NOT NULL,

PRIMARY KEY (`id_u`),

KEY `id_s` (`id_s`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

-- ---------------------------- 

-- Records of usuarios

-- ----------------------------