You are on page 1of 67

MySQL

y
SQL
Carrera:
Tcnico Universitario
en Informtica

Docente:
Julio Reinoso V.
Programacin Orientada
a Base de Datos

Indice
MySql y SQL
ndice de Contenidos
1.- Conceptos de MySQL
2.- Conceptos de XAMPP
3.- Conceptos de SQL
4.- Uso de consola Mysql
5.- Creacin de la estructura
6.- Ingreso de datos
7.- Mostrar datos
8.- Borrado de datos
9.- Modificacin de datos
10.- Operaciones matemticas
11.- Funciones de cadena
12.- Valores nulos
13.- Grupos
14.- Subconsultas
15.- Joins
16.- Union, Vistas
17.- Triggers
18.- Procedimientos almacenados
19.- Gestin de Usuarios y Privilegios en MySql
20.- Respaldo y Restauracin en MySql
21.- Uso de phpMyAdmin

Contenido
MySql
1.- Qu es MySQL?
Es un sistema de gestin de bases de datos relacional, fue creada por la empresa sueca
MySQL AB, la cual tiene el copyright del cdigo fuente del servidor SQL, as como tambin
de la marca.
MySQL es un software de cdigo abierto, licenciado bajo la GPL de la GNU, aunque MySQL
AB distribuye una versin comercial, en lo nico que se diferencia de la versin libre, es en
el soporte tcnico que se ofrece, y la posibilidad de integrar este gestor en un software
propietario, ya que de otra manera, se vulnerara la licencia GPL.
El lenguaje de programacin que utiliza MySQL es Structured Query Language (SQL) que
fue desarrollado por IBM en 1981 y desde entonces es utilizado de forma generalizada en
las bases de datos relacionales.

Contenido
MySql
Historia de MySQL
MySQL surgi alrededor de la dcada del 90, Michael Windenis comenz a usar mSQL para
conectar tablas usando sus propias rutinas de bajo nivel (ISAM). Tras unas primeras
pruebas, lleg a la conclusin de que mSQL no era lo bastante flexible ni rpido para lo que
necesitaba, por lo que tuvo que desarrollar nuevas funciones. Esto resulto en una interfaz
SQL a su base de datos, totalmente compatible a mSQL.
El origen del nombre MySQL no se sabe con certeza de donde proviene, por una lado se
dice que en sus libreras han llevado el prefijo my durante los diez ltimos aos, por otra
parte, la hija de uno de los desarrolladores se llama My. As que no est claramente definido
cual de estas dos causas han dado lugar al nombre de este conocido gestor de bases de
datos.

Contenido
MySql
Caractersticas principales
Inicialmente, MySQL careca de algunos elementos esenciales en las bases de datos
relacionales, tales como integridad referencial y transacciones. A pesar de esto, atrajo a los
desarrolladores de pginas web con contenido dinmico, debido a su simplicidad, de tal
manera que los elementos faltantes fueron complementados por la va de las aplicaciones
que la utilizan. Poco a poco estos elementos faltantes, estn siendo incorporados tanto por
desarrolladores internos, como por desarrolladores de software libre.
En las ltimas versiones se pueden destacar las siguientes caractersticas principales:
El principal objetivo de MySQL es velocidad y robustez.
Soporta gran cantidad de tipos de datos para las columnas.
Gran portabilidad entre sistemas, puede trabajar en distintas plataformas y sistemas
operativos.
Cada base de datos cuenta con 3 archivos: Uno de estructura, uno de datos y uno de ndice
y soporta hasta 32 ndices por tabla.
Aprovecha la potencia de sistemas multiproceso, gracias a su implementacin multihilo.
Flexible sistema de contraseas (passwords) y gestin de usuarios, con un muy buen nivel
de seguridad en los datos.
El servidor soporta mensajes de error en distintos idiomas

Contenido
MySql
Ventajas
Velocidad al realizar las operaciones, lo que le hace uno de los gestores con mejor
rendimiento.
Bajo costo en requerimientos para la elaboracin de bases de datos, ya que debido a su
bajo consumo puede ser ejecutado en una mquina con escasos recursos sin ningn
problema.
Facilidad de configuracin e instalacin.
Soporta gran variedad de Sistemas Operativos
Baja probabilidad de corromper datos, incluso si los errores no se producen en el propio
gestor, sino en el sistema en el que est.
Conectividad y seguridad
Desventajas
Un gran porcentaje de las utilidades de MySQL no estn documentadas.
No es intuitivo, como otros programas (ACCESS).

Contenido
MySql
InnoDB
InnoDB es una tecnologa de almacenamiento de datos de fuente abierta para MySQL,
incluido como formato de tabla estndar en todas las distribuciones de MySQL AB a partir
de las versiones 4.0. Su caracterstica principal es que soporta transacciones de tipo
ACID(Atomicity, Consistency, Isolation and Durability) y bloqueo de registros e integridad
referencial. InnoDB ofrece una fiabilidad y consistencia muy superior a MyISAM, la anterior
tecnologa de tablas de MySQL, si bien el mejor rendimiento de uno u otro formato
depender de la aplicacin especfica.
MyISAM
MyISAM es la tecnologa de almacenamiento de datos usada por defecto por el sistema
administrador de bases de datos relacionales MySQL. Este tipo de tablas estn basadas en
el formato ISAM pero con nuevas extensiones. En las ltimas versiones de Mysql, el motor
InnoDB est empezando a reemplazar a este tipo de tablas por su capacidad de ejecutar
transacciones de tipo ACID y bloqueo de registros e integridad referencial.

Contenido
MySql

Contenido
MySql
Tipos de datos
Despus de la fase de diseo de una base de datos, y una vez se ha realizado el paso a
tablas del mismo, en necesario crear las tablas correspondientes dentro de la base de datos.
Para cada campo de cada una de las tablas, es necesario determinar el tipo de datos que
contiene, para de esa forma ajustar el diseo de la base de datos, y conseguir un
almacenamiento ptimo con la menor utilizacin de espacio.
Los tipos de datos que puede haber en un campo, se pueden agrupar en tres grandes
grupos:

Tipos numricos
Tipos de Fecha
Tipos de Cadena

Contenido
MySql
Tipos numricos:
Existen tipos de datos numricos, que se pueden dividir en dos grandes grupos, los que
estn en coma flotante (con decimales) y los que no.
TinyInt: es un nmero entero con o sin signo. Con signo el rango de valores vlidos va
desde -128 a 127. Sin signo, el rango de valores es de 0 a 255
Bit Bool: un nmero entero que puede ser 0 1
SmallInt: nmero entero con o sin signo. Con signo el rango de valores va desde -32768 a
32767. Sin signo, el rango de valores es de 0 a 65535.
MediumInt: nmero entero con o sin signo. Con signo el rango de valores va desde 8.388.608 a 8.388.607. Sin signo el rango va desde 0 a16777215.
Integer, Int: nmero entero con o sin signo. Con signo el rango de valores va desde 2147483648 a 2147483647. Sin signo el rango va desde 0 a 429.4967.295
BigInt: nmero entero con o sin signo. Con signo el rango de valores va desde 9.223.372.036.854.775.808 a 9.223.372.036.854.775.807. Sin signo el rango va desde 0 a
18.446.744.073.709.551.615.

Contenido
MySql
Float: nmero pequeo en coma flotante de precisin simple. Los valores vlidos van desde
-3.402823466E+38 a -1.175494351E-38, 0 y desde 1.175494351E-38 a 3.402823466E+38.
xReal, Double: nmero en coma flotante de precisin doble. Los valores permitidos van
desde -1.7976931348623157E+308 a -2.2250738585072014E-308, 0 y desde
2.2250738585072014E-308 a 1.7976931348623157E+308
Decimal, Dec, Numeric: Nmero en coma flotante desempaquetado. El nmero se
almacena como una cadena

Contenido
MySql
Tipo de Campo

Tamao de Almacenamiento

TINYINT
SMALLINT
MEDIUMINT
INT
INTEGER
BIGINT
FLOAT(X)
FLOAT
DOUBLE

1 byte
2 bytes
3 bytes
4 bytes
4 bytes
8 bytes
4 8 bytes
4 bytes
8 bytes

DOUBLE PRECISION

8 bytes

REAL

8 bytes

DECIMAL(M,D

M+2 bytes s D > 0, M+1 bytes s D = 0

NUMERIC(M,D)

M+2 bytes if D > 0, M+1 bytes if D = 0

Contenido
MySql
Tipos fecha:
A la hora de almacenar fechas, hay que tener en cuenta que Mysql no comprueba de una
manera estricta si una fecha es vlida o no. Simplemente comprueba que el mes esta
comprendido entre 0 y 12 y que el da esta comprendido entre 0 y 31.
Date: tipo fecha, almacena una fecha. El rango de valores va desde el 1 de enero del 1001
al 31 de diciembre de 9999. El formato de almacenamiento es de ao-mes-dia
DateTime: Combinacin de fecha y hora. El rango de valores va desde el 1 de enero del
1001 a las 0 horas, 0 minutos y 0 segundos al 31 de diciembre del 9999 a las 23 horas, 59
minutos y 59 segundos. El formato de almacenamiento es de ao-mes-dia
horas:minutos:segundos
TimeStamp: Combinacin de fecha y hora. El rango va desde el 1 de enero de 1970 al ao
2037. El formato de almacenamiento depende del tamao del campo
Time: almacena una hora. El rango de horas va desde -838 horas, 59 minutos y 59
segundos a 838, 59 minutos y 59 segundos. El formato de almacenamiento es de
'HH:MM:SS'
Year: almacena un ao. El rango de valores permitidos va desde el ao 1901 al ao 2155.
El campo puede tener tamao dos o tamao 4 dependiendo de si queremos almacenar el
ao con dos o cuatro dgitos.

Contenido
MySql
Tipos de cadena:
Char(n): almacena una cadena de longitud fija. La cadena podr contener desde 0 a 255
caracteres.
VarChar(n): almacena una cadena de longitud variable. La cadena podr contener desde 0
a 255 caracteres.
Dentro de los tipos de cadena se pueden distinguir otros dos subtipos, los tipo Test y los
tipo BLOB (Binary large Object)
La diferencia entre un tipo y otro es el tratamiento que reciben a la hora de realizar
ordenamientos y comparaciones. Mientras que el tipo test se ordena sin tener en cuenta las
Maysculas y las minsculas, el tipo BLOB se ordena tenindolas en cuenta.
Los tipos BLOB se utilizan para almacenar datos binarios como pueden ser ficheros.

Contenido
MySql
TinyText y TinyBlob: Columna con una longitud mxima de 255 caracteres.
Blob y Text: un texto con un mximo de 65535 caracteres.
MediumBlob y MediumText: un texto con un mximo de 16.777.215 caracteres.
LongBlob y LongText: un texto con un mximo de caracteres 4.294.967.295. Hay que
tener en cuenta que debido a los protocolos de comunicacin los paquetes pueden tener un
mximo de 16 Mb.
Enum: campo que puede tener un nico valor de una lista que se especifica. El tipo Enum
acepta hasta 65535 valores distintos
Set: un campo que puede contener ninguno, uno varios valores de una lista. La lista
puede tener un mximo de 64 valores.

Contenido
MySql
Resumen
Tipos de datos
Numricos
tinyint, smallint, mediumint, int, integer, bigint
decimal, float, numeric
Fecha y hora
date, time, datetime, year, timestamp
Cadena
char, varchar
tinytext, text, mediumtext, longtext
tinyblob, blob, mediumblob, longblob
enum, set
Operadores
Aritmticos
+, -, *, /
Comparacin
=, !=, <=, <, >=, >, IS NULL, IS NOT NULL
Lgicos
not (!), and (&&), or (||), xor
Funciones
Funciones de cadena
Funciones de comparacin de cadenas
Funciones numricas
Funciones de fecha y hora
Funciones de agregado

Contenido
XAMPP Server
2.- Qu es XAMPP?
XAMPP es un servidor independiente
de plataforma, software libre, que
consiste principalmente en la base de
datos MySQL, el servidor web Apache
y los intrpretes para lenguajes de
script: PHP y Perl. El nombre
proviene del acrnimo de X (para
cualquiera de los diferentes sistemas
operativos), Apache, MySQL, PHP,
Perl.
El programa est liberado bajo la
licencia GNU y acta como un
servidor web libre, fcil de usar y
capaz de interpretar pginas
dinmicas. Actualmente XAMPP est
disponible para Microsoft Windows,
GNU/Linux, Solaris y Mac OSX.

Contenido
XAMPP Server
Caractersticas y requisitos
XAMPP solamente requiere descargar y ejecutar un archivo zip, tar, exe o fkl, con unas
pequeas configuraciones en alguno de sus componentes que el servidor Web necesitar.
XAMPP se actualiza regularmente para incorporar las ltimas versiones de
Apache/MySQL/PHP y Perl. Tambin incluye otros mdulos como OpenSSL y phpMyAdmin.
Para instalar XAMPP se requiere solamente una pequea fraccin del tiempo necesario para
descargar y configurar los programas por separado. Puede encontrarse tanto en versin
completa, as como en una versin ms ligera que es porttil.
Oficialmente, los diseadores de XAMPP slo pretendan su uso como una herramienta de
desarrollo, para permitir a los diseadores de sitios webs y programadores testear su
trabajo en sus propios ordenadores sin ningn acceso a Internet. En la prctica, sin
embargo, XAMPP es utilizado actualmente como servidor de sitios Web, ya que, con algunas
modificaciones, es generalmente lo suficientemente seguro para serlo. Con el paquete se
incluye una herramienta especial para proteger fcilmente las partes ms importantes.

Contenido
Lenguaje SQL
3.- Qu es SQL?
La sigla que se conoce como SQL corresponde a la expresin inglesa Structured Query
Language (entendida en espaol como Lenguaje de Consulta Estructurado), la cual
identifica a un tipo de lenguaje vinculado con la gestin de bases de datos de carcter
relacional que permite la especificacin de distintas clases de operaciones entre stas.
Gracias a la utilizacin del lgebra y de clculos relacionales, el SQL brinda la posibilidad de
realizar consultas con el objetivo de recuperar informacin de las bases de datos de manera
sencilla.
El cientfico Edgar Frank Codd (1923-2003) fue quien propuso un modelo relacional para las
bases de datos y cre un sublenguaje para acceder a los datos a partir del clculo de
predicados. En base al trabajo de Codd, IBM (International Business Machines) defini el
lenguaje conocido como Structured English Query Language (SEQUEL).
El SEQUEL se considera el antecesor de SQL, un lenguaje de cuarta generacin que se
estandariz en 1986. La versin ms primitiva de SQL, por lo tanto, fue la que se bautiz
como SQL-86 (tambin conocida como SQL1).
En esencia, el SQL es un lenguaje declarativo de alto nivel ya que, al manejar conjuntos de
registros y no registros individuales, ofrece una elevada productividad en la codificacin y en
la orientacin a objetos. Una sentencia de SQL puede resultar equivalente a ms de un
programa que emplee un lenguaje de bajo nivel.

Contenido
Lenguaje SQL
SQL (Structured Query Language) es el lenguaje que se utiliza para
comunicarse con la base de datos
Las instrucciones ms habituales son SELECT, INSERT, UPDATE, DELETE
Procedimiento de comunicacin con la base de datos:

Pgina
PHP

orden SQL

resultado

Base
de
datos

Contenido
Lenguaje SQL
4.- Uso de consola MySQL
Con la instalacin tpica, MySQL debera haber quedado dentro de "Archivos de programa.
Para llegar hasta all, ingresar al intrprete de comandos de Windows (por ejemplo, desde el
men de Inicio, en la opcin "Ejecutar", tecleando la orden "cmd"), entonces usar la orden
"cd" para llegar hasta la carpeta "bin", en la que estn los "binarios" (programas
ejecutables) de MySQL. Para entrar al entorno de MySQL, indicar un nombre de usuario con
la opcin "-u". Como por ahora slo existe el usuario "root", digitar:
mysql -u root
Luego de esta instruccin, aparece un mensaje similar al siguiente:

Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1
Server version: 5.0.45-community-nt MySQL Community Edition (GPL) Type 'help;' or '\h' for
help. Type '\c' to clear the buffer. mysql>
Para salir de la consola de MySql se utiliza la instruccin quit
Ahora se puede teclear rdenes directamente en lenguaje SQL y ver los resultados.

Contenido
Lenguaje SQL
5.- Creacin de la estructura
Lo primero es crear la base de datos, para eso se utiliza la instruccin:
Create Database

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification [,


create_specification] ...]
create_specification: [DEFAULT] CHARACTER SET charset_name | [DEFAULT] COLLATE
collation_name
Ejemplo:

create database ejemplo1;


Una vez creada la base de datos y para poder trabajar con ella, se utiliza la instruccin USE
USE db_name;

Contenido
Lenguaje SQL
5.1 Creacin de tablas
Una base de datos, est formada tablas. Por lo tanto, una vez creada la base de datos es
necesario crear las correspondientes tablas:
Ejemplo:

CREATE TABLE ciudades (


codigo int Auto_Increment,
nombre varchar(30) not null,
comuna varchar(20) null,
region varchar(20),
primary key (codigo)
);
CREATE TABLE crea una tabla con el nombre dado. Debe tener el permiso CREATE para la
tabla.
Por defecto, la tabla se crea en la base de datos actual. Ocurre un error si la tabla existe, si
no hay base de datos actual o si la base de datos no existe.

Contenido
Lenguaje SQL
5.2 Creacin de tablas incluyendo integridad referencial
Ejemplo:
CREATE TABLE autor (
cod_autor int(4),
nombre_autor VARCHAR(50),
cod_nacionalidad INT NOT NULL,
PRIMARY KEY (cod_autor),
INDEX (cod_autor),
INDEX (cod_nacionalidad),
FOREIGN KEY (cod_nacionalidad) REFERENCES
nacionalidad(cod_nacionalidad)
ON DELETE restrict ON UPDATE cascade)
ENGINE=INNODB

Contenido
Lenguaje SQL
6.- Ingreso de Datos
Para introducir datos se usa la orden "insert", y se indica tras la palabra "values" los valores
para los campos de texto entre comillas, y los valores para campos numricos sin comillas:
Sintaxis:
INSERT [INTO] nombre_tabla [(nombre_columna,...)]
VALUES ((expresin | DEFAULT),...), (...),...
INSERT [INTO] nombre_tabla
SET nombre_columna=(expresin | DEFAULT), ...
Ejemplo:
INSERT INTO noticias (id, titulo, texto, categoria, fecha) VALUES (37, Nueva promocin en
Nervin, 145 viviendas de lujo en urbanizacin ajardinada situadas en un entorno
privilegiado, promociones, CURDATE())
Inserta una noticia con los valores indicados. En el caso de la fecha se muestra el uso de la
funcin CURDATE() que extrae la fecha actual del sistema, en su lugar se puede
especificar una fecha en particular, para lo cual se ingresa en formato aaaa-mm-dd

Contenido
Lenguaje SQL
7.- Mostrando datos
Para ver los datos almacenados en una tabla se usa la instruccin "SELECT campos FROM
tabla". Si se quieren ver todos los campos, se utiliza un asterisco:
Sintaxis:
SELECT expresin FROM tabla
[WHERE condicin]
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...]
[LIMIT [offset,] row_count | row_count OFFSET offset]
Ejemplo:
SELECT * FROM noticias WHERE fecha=CURDATE() LIMIT 10 ORDER BY fecha DESC
Obtiene las noticias del da con un tope mximo de 10, ordenadas de la ms reciente a la
ms antigua.

Contenido
Lenguaje SQL
8.- Borrar informacin
8.1 Qu informacin hay?
Un primer paso antes de ver cmo borrar informacin es saber qu informacin existe
almacenada.
Se puede saber que bases de datos hay creadas en el servidor mediante la instruccin:

SHOW DATABASES;
Una vez que se est trabajando con una base de datos concreta (con la orden "use"), se
puede saber las tablas que contiene mediante:

SHOW TABLES;
Y para una tabla concreta, se puede saber los campos (columnas) que la forman con "show
columns from":

SHOW COLUMNS FROM personas;


Para ver detalles especficos de tablas (por ejemplo nombre de CONSTRAINTS):

SHOW CREATE TABLE tabla;

Contenido
Lenguaje SQL
8.2 Borrar toda la base de datos
En alguna ocasin, puede interesar borrar toda la base de datos. La orden para conseguirlo
es:

DROP DATABASE ejemplo2;


Si esta orden es parte de una secuencia larga de rdenes, que se ha cargado con la orden
"source" (por ejemplo) y la base de datos no existe, se obtendra un mensaje de error y se
interrumpira el proceso. Se puede evitarlo aadiendo "if exists", para que se borre la base
de datos slo si realmente existe:

drop database ejemplo2 if exists;

Contenido
Lenguaje SQL
8.3 Borrar una tabla
Es ms frecuente que se cree alguna tabla de forma incorrecta. La solucin razonable es
corregir ese error, cambiando la estructura de la tabla, pero tambin se puede borrar la
tabla completa. Para esto la instruccin es:

DROP TABLE personas;


Al igual que para las bases de datos, se puede hacer que la tabla se borre slo cuando
realmente existe:

DROP TABLE personas IF EXISTS;

Contenido
Lenguaje SQL
8.4 Borrar datos de una tabla
Tambin se pueden borrar los datos que cumplen una cierta condicin. La instruccin para
esto es "delete from", y con "where" se indican las condiciones que se deben cumplir, de
forma similar a como se hace con la orden "select":

DELETE FROM personas WHERE nombre = 'juan';


Esto borrara todas las personas llamadas "juan" que estn almacenadas en la tabla
"personas".
Cuidado: si no se indica "where", no se borraran los datos que cumplen una condicin, sino
TODOS los datos. Si es eso lo que se pretende, una forma ms rpida de conseguirlo es
usar:

TRUNCATE TABLE personas;

Contenido
Lenguaje SQL
9.- Modificar informacin
9.1 Modificacin de datos
Existe una operacin ms frecuente que el borrado (aunque tambin ligeramente ms
complicada): modificar los datos existentes. El formato habitual para modificar datos de una
tabla es "update tabla set campo=nuevoValor where condicion".
Por ejemplo, si se ha escrito "Alberto" en minsculas ("alberto"), se puede corregir con:

UPDATE personas SET nombre = 'Alberto' WHERE nombre = 'alberto';


Y si se quieren corregir todas las edades para sumarles un ao se hara con
update personas set edad = edad+1;
(al igual que para "select" y para "delete", si no se indica "where", los cambios se aplicarn
a todos los registros de la tabla).

Contenido
Lenguaje SQL
9.2 Modificar la estructura de una tabla
Algo ms complicado es modificar la estructura de una tabla: aadir campos, eliminarlos,
cambiar su nombre o el tipo de datos. En general, se usar la orden "alter table".
Para aadir un campo se usa "add":

ALTER TABLE ciudades ADD habitantes decimal(7);


ALTER TABLE ciudades ADD PRIMARY KEY (cod_Ciudad); (Aadir Clave primaria)
ALTER TABLE t1 add FOREIGN KEY(cod1) REFERENCES t2(cod1)
ON DELETE RESTRICT ON UPDATE CASCADE; (Aadir clave fornea e integridad
referencial)
Si no se indica otra cosa, el nuevo campo se aade al final de la tabla. Para que sea el
primer campo, se aade "first" al final de la orden. Tambin se puede aadir despus de
cierto campo, con "after nombreCampo".

Contenido
Lenguaje SQL
Para modificar el tipo de datos de un campo usar "modify:

ALTER TABLE ciudades MODIFY habitantes bigint;


ALTER TABLE ciudades MODIFY cod_ciudad int Auto_Increment; (Agregar extra a campo)
Para cambiar el nombre de un campo, se usa "change, ejemplo:

ALTER TABLE ciudades CHANGE habitantes numhabitantes bigint;


Para borrar un campo se usa "drop column":

ALTER TABLE ciudades DROP COLUMN numhabitantes;


Para borrar una restriccin de una clave fornea:
ALTER TABLE ciudades DROP FOREIGN KEY nombre_constraint;
Finalmente, para cambiar el nombre de una tabla se usa "rename":

ALTER TABLE ciudades RENAME ciudad;

Contenido
Lenguaje SQL
10.- Operaciones matemticas
10.1 Operaciones matemticas
Desde SQL se pueden realizar operaciones a partir de los datos antes de mostrarlos. Por
ejemplo, se puede mostrar cual era la edad de una persona hace un ao, con:

SELECT edad-1 FROM personas;


Los operadores matemticos que se pueden emplear son los habituales en cualquier
lenguaje de programacin, ligeramente ampliados: + (suma), - (resta y negacin), *
(multiplicacin), / (divisin) . La divisin calcula el resultado con decimales; para trabajar
con nmeros enteros, tambin existen los operadores DIV (divisin entera) y MOD (resto de
la divisin):

SELECT 5/2, 5 DIV 2, 5 MOD 2;


Dara como resultado
+--------+---------+---------+
| 5/2 | 5 div 2 | 5 mod 2 |
+--------+---------+---------+
| 2.5000 |
2|
1|
+--------+---------+---------+

Contenido
Lenguaje SQL
10.2 Funciones de agregacin
Se pueden aplicar ciertas funciones matemticas a todo un conjunto de datos de una tabla.
Por ejemplo, para saber cual es la edad ms baja de entre las personas que existen en la
base de datos:

SELECT MIN(edad) FROM personas;


Las funciones de agregacin ms habituales son:
min = mnimo valor
max = mximo valor
sum = suma de los valores
avg = media de los valores
count = cantidad de valores
La forma ms habitual de usar "count" es pidiendo con "count(*)" que se muestren todos
los datos que cumplen una condicin. Por ejemplo, saber cuantas personas tienen una
direccin que comience por la letra "s", as:

SELECT COUNT(*) FROM personas WHERE direccion LIKE 's%';

Contenido
Lenguaje SQL
11.- Funciones de cadena
En MySQL existen muchas funciones para manipular cadenas: calcular su longitud, extraer
un fragmento situado a la derecha, a la izquierda o en cualquier posicin, eliminar espacios
finales o iniciales, convertir a hexadecimal y a binario, etc.
11.1 Funciones de conversin a maysculas/minsculas
LOWER o LCASE convierte una cadena a minsculas: SELECT LOWER('Hola'); -> hola
UPPER o UCASE convierte una cadena a maysculas: SELECT UPPER('Hola'); -> HOLA
LEFT(cadena, longitud) extrae varios caracteres del comienzo de la cadena: SELECT
LEFT('Hola',2); -> Ho
RIGHT(cadena, longitud) extrae varios caracteres del final (la parte derecha) de la cadena:
MID(cadena, posicin, longitud), SUBSTR(cadena, posicin, longitud) o SUBSTRING(cadena,
posicin, longitud) extrae varios caracteres de cualquier posicin de una cadena, tantos
como se indique en "longitud": SELECT SUBSTRING('Hola',2,2); -> ol

Contenido
Lenguaje SQL
CONCAT une varias cadenas para formar una nueva: SELECT CONCAT('Ho', 'la'); -> Hola
CONCAT_WS une varias cadenas para formar una nueva, usando un separador que se
indique (With Separator): SELECT CONCAT_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)
RTRIM devuelve la cadena sin los espacios en blanco que pudiera contener al final
TRIM devuelve la cadena sin los espacios en blanco que pudiera contener al principio ni al
final.

Contenido
Lenguaje SQL
12.- Valores nulos
11.1 Cero y valor nulo
Para las cadenas de texto, la forma de anular un valor es con una cadena vaca, indicada
con dos comillas que no contengan ningn texto entre ellas: ''
En cambio, para los nmeros, no basta con guardar un 0 para indicar que no se sabe el
valor: no es lo mismo un importe de 0 euros que un importe no detallado. Por eso, existe
un smbolo especial para indicar cuando no existe valor en un campo.
Este smbolo especial es la palabra NULL. Por ejemplo:

INSERT INTO personas (nombre, direccion, edad) VALUES ( 'pedro', '', NULL );
INSERT INTO personas (nombre, direccion, edad) VALUES ( 'pedro', NULL, NULL );
Para saber si algn campo est vaco, se compara su valor con NULL, pero de una forma un
tanto especial: no con el smbolo "igual" (=), sino con la palabra IS. Por ejemplo, para saber
cuales de las personas de la base de datos tienen direccin usando:

SELECT * FROM personas WHERE direccion IS NOT NULL;


Y, de forma similar, quien no tiene direccin, as:

SELECT * FROM personas WHERE direccion IS NULL;

Contenido
Lenguaje SQL
13. Grupos
13.1 Agrupando los resultados
Puede ocurrir que no se requiera un nico valor agrupado (el total, la media, la cantidad de
datos), sino el resultado para un grupo de datos. Por ejemplo: saber no slo la cantidad de
clientes que hay registrados en la base de datos, sino tambin la cantidad de clientes que
viven en cada ciudad.
La forma de obtener subtotales es creando grupos con la orden "group by", y entonces
pidiendo una valor agrupado (count, sum, avg, ...) para cada uno de esos grupos. Por
ejemplo, en la tabla "personas", podemos saber cuantas personas aparecen de cada edad,
con:

SELECT COUNT(*) AS Personas por Edad, edad FROM personas GROUP BY edad;
que dara como resultado
+----------+------+
| count(*) | edad |
+----------+------+
|
1 | 22 |
|
1 | 23 |
|
1 | 25 |
+----------+------+

Contenido
Lenguaje SQL
13.2 Filtrando los datos agrupados
La condicin que se aplica a los grupos no se indica con "where", sino con "having" (que se
podra traducir como "los que tengan..."). Un ejemplo:

SELECT COUNT(*), edad FROM personas GROUP BY edad HAVING edad > 24;
que mostrara
+----------+------+
| count(*) | edad |
+----------+------+
|
1 | 25
|
+----------+------+

Contenido
Lenguaje SQL
14.- Subconsultas
14.1 Qu es una subconsulta?
A veces hay que realizar operaciones ms complejas con los datos, operaciones en las que
interesara utilizar una primera consulta auxiliar que extrajera la informacin en la que se
necesita basarse. Esta consulta auxiliar recibe el nombre de "subconsulta" o "subquery".
Por ejemplo, si se quiere saber qu clientes hay en la ciudad que ms habitantes tenga, la
forma "razonable" de conseguirlo sera saber en primer lugar cual es la ciudad que ms
habitantes tenga, y entonces lanzar una segunda consulta para ver qu clientes hay en esa
ciudad. Ejemplo:

SELECT MAX(codigo) FROM ciudades;


SELECT * FROM personas WHERE codciudad= maxCodigo;
Estos dos pasos se pueden dar en uno: al final de la "segunda" consulta (la "grande") se
incluye la primera consulta (la "subconsulta"), entre parntesis, as

SELECT * FROM personas WHERE codciudad= ( SELECT MAX(codigo) FROM ciudades );

Contenido
Lenguaje SQL
14.2 Subconsultas que devuelven conjuntos de datos
Si la subconsulta no devuelve un nico dato, sino un conjunto de datos, la forma de trabajar
ser bsicamente la misma, pero para comprobar si el valor coincide con uno de la lista, no
se usa el smbolo "=", sino la palabra "in".
Por ejemplo, una consulta que muestre las personas que viven en ciudades cuyo nombre
tiene una "a" en segundo lugar (por ejemplo, seran ciudades vlidas Madrid o Barcelona,
pero no Alicante).
Para consultar qu letras hay en ciertas posiciones de una cadena, se usa SUBSTRING (en el
prximo apartado veremos las funciones ms importantes de manipulacin de cadenas).
As, una forma de saber qu ciudades tienen una letra A en su segunda posicin sera:

SELECT codigo FROM ciudades WHERE SUBSTRING(nombre,2,1)='a';


Como esta subconsulta puede tener ms de un resultado, se usa IN para incluirla en la
consulta principal, que quedara de esta forma:

SELECT * FROM personas WHERE codciudad IN ( SELECT codigo FROM ciudades WHERE
SUBSTRING(nombre,2,1)='a' );

Contenido
Lenguaje SQL
15.- JOIN, Consultas combinadas
Un join es una combinacin de dos o ms tablas de una base de datos relacional, es una
instruccin de lo ms imprescindible si se quiere realizar una aplicacin que realice un uso
correcto e intensivo de un gestor de Bases de datos cmo MySQL. MySQL soporta muchas
sintaxis diferentes para la instruccin JOIN en comandos de SELECT, DELETE y UPDATE.
Ejemplo:

CREATE DATABASE ejemploJoins; USE ejemploJoins;


En ella se crea una primera tabla en la que se almacenarn "capacidades" de personas
(cosas que saben hacer):

CREATE TABLE capacidad( codigo varchar(4), nombre varchar(20), primary key(codigo) );


Tambin se crea una segunda tabla con datos bsicos de personas:

CREATE TABLE persona( codigo varchar(4), nombre varchar(20), codcapac varchar(4),


primary key(codigo) );

Contenido
Lenguaje SQL
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');
Con instrucciones "join" se puede afinar como se quieren enlazar (en ingls, "join", unir) las
tablas.
Para ver los datos que coinciden en ambas tablas, se puede usar un "inner join" (unin
interior; se puede abreviar simplemente "join"):

SELECT persona.nombre, capacidad.nombre FROM persona INNER JOIN capacidad ON


persona.codcapac = capacidad.codigo;

Contenido
Lenguaje SQL
Si se quieren ver todas las personas y sus capacidades, incluso para aquellas personas cuya
capacidad no est detallada en la otra tabla, se usara un "left join" (unin por la izquierda,
tambin se puede escribir "left outer join", unin exterior por la izquierda, para dejar claro
que se van a incluir datos que estn slo en una de las dos tablas):

SELECT persona.nombre, capacidad.nombre FROM persona LEFT JOIN capacidad ON


persona.codcapac = capacidad.codigo;
Por ejemplo para ver todas las personas y todas las capacidades, aunque no estn
relacionadas, como en el ejemplo anterior, se usa "cross join":

SELECT persona.nombre, capacidad.nombre FROM persona CROSS JOIN capacidad;

Contenido
Lenguaje SQL
16.- Union, Vistas
El propsito del comando SQL UNION es combinar los resultados de dos consultas juntas.
En este sentido, UNION es parecido a Join, ya que los dos se utilizan para informacin
relacionada en mltiples tablas. Una restriccin de UNION es que todas las columnas
correspondientes necesitan ser del mismo tipo de datos. Tambin, cuando utilizamos
UNION, slo se seleccionan valores distintos (similar a SELECT DISTINCT).
Ejemplos:

SELECT rut, nombre FROM personas UNION SELECT rutempresa, nombreempresa from
empresas;
SELECT persona.nombre, capacidad.nombre FROM persona RIGHT OUTER JOIN capacidad
ON persona.codcapac = capacidad.codigo UNION SELECT persona.nombre,
capacidad.nombre FROM persona LEFT OUTER JOIN capacidad ON persona.codcapac =
capacidad.codigo;

Contenido
Lenguaje SQL
Por otra parte, se pueden crear "vistas", que permitan definir la cantidad de informacin a la
que se requiere que ciertos usuarios tengan acceso:

CREATE VIEW personasycapac AS SELECT persona.nombre nompres, capacidad.nombre


nomcapac FROM persona LEFT OUTER JOIN capacidad ON persona.codcapac =
capacidad.codigo;
Y esta "vista" se utiliza igual que si fuera una tabla:

SELECT * FROM personasycapac;


Para modificar una vista se utiliza la instruccin: ALTER VIEW

ALTER VIEW nombrevistaexistente AS SELECT (nueva consulta)


Cuando una vista deje de ser til, se puede eliminar con: DROP VIEW

DROP VIEW nombrevistaexistente;

Contenido
Lenguaje SQL
17. Triggers
En MySQL (a partir de la versin 5.0.2) se permite utilizar "disparadores" (triggers), que son
una serie de pasos que se pondrn en marcha cuando ocurra un cierto evento en una tabla.
Los eventos pueden ser un INSERT, un UPDATE o un DELETE de datos de la tabla, y
podemos detallar que los pasos se den antes (BEFORE) del evento o despus (AFTER) del
evento.
Como ejemplo habitual, se puede hacer un BEFORE INSERT para comprobar que los datos
son vlidos antes de guardarlos realmente en la tabla.
Sintaxis Trigger bsico:
CREATE TRIGGER nombretrigger [AFTER] [INSERT] ON
[BEFORE][UPDATE]
[DELETE]
Tabla1 FOR EACH ROW INSERT INTO Tabla2
VALUES (campo1,,campon)

Contenido
Lenguaje SQL
Ejemplo:

CREATE DATABASE ejemplotriggers;


USE ejemplotriggers;
CREATE TABLE persona ( codigo varchar(10), nombre varchar(50), edad decimal(3),
PRIMARY KEY (`codigo`) );
CREATE TABLE nuevosDatos ( codigo varchar(10), cuando date, tipo char(1) );
Para que se aada un dato en la segunda tabla cada vez que se inserte en la primera, crear
un TRIGGER que saltar con un AFTER INSERT. Para indicar los pasos que debe hacer, se
usa la expresin "FOR EACH ROW" (para cada fila), as:
CREATE TRIGGER modificacion AFTER INSERT ON
persona FOR EACH ROW INSERT INTO
nuevosDatos VALUES (NEW.codigo, CURRENT_DATE, 'i');
(Los datos que se introducen son: el cdigo de la persona, la fecha actual y una letra "i"
para indicar que el cambio ha sido la "insercin" de un dato nuevo).

Contenido
Lenguaje SQL
Si ahora se introduce un dato en la tabla personas:

INSERT INTO persona VALUES ('1','Juan',20); La tabla de "nuevosDatos" habr cambiado:


SELECT * FROM nuevosDatos;
Ejemplo de trigger que registra informacin de cada evento de borrado en la tabla persona.

CREATE TRIGGER registraborrado AFTER DELETE ON persona


FOR EACH ROW INSERT INTO AuditoriaBorrado
VALUES (OLD.codigo, CURRENT_USER,NOW(), borrado');

Contenido
Lenguaje SQL
Si se quiere indicar que se deben dar secuencias de pasos ms largas, hay que tener en
cuenta dos cosas: cuando sean varias rdenes, debern encerrarse entre BEGIN y END;
adems, como cada una de ellas terminar en punto y coma, se debe cambiar
momentneamente el "delimitador" (DELIMITER) de MySQL:

DELIMITER //
CREATE TRIGGER validacionPersona BEFORE INSERT ON personas FOR EACH ROW
BEGIN
SET NEW.nombre = UPPER(NEW.nombre);
SET NEW.edad = IF(NEW.edad < 1, NULL, NEW.edad);
END
//
DELIMITER ;
Primero cambiamos a maysculas el nombre y luego validamos si el valor es menor que
uno entonces lo transformamos a NULL, para que se gatille un error que no permita grabar
el nuevo registro.
Para ver los triggers de la base de datos: SHOW TRIGGERS\G (al agregar \G se despliega
ordenado)
Para eliminar un trigger: DROP TRIGGER nombretrigger

Contenido
Lenguaje SQL
18.- Procedimientos almacenados en MySQL
Desde MySQL 5 los procedimientos almacenados empezaron a ser soportados, como suele
suceder en MySQL las sentencias se ejecutan luego de escribir el signo punto y coma (;),
por esta razn antes de escribir el procedimiento almacenado la funcin del punto y coma
se asigna a otros caracteres usando la sentencia DELIMITER seguida de un carcter tal
como |, de esta manera el procedimiento puede ser escrito usando los punto y comas sin
que se ejecute mientras se escribe; despus de escrito el procedimiento, se escribe
nuevamente la sentencia DELIMITER ; para asignar al punto y coma su funcin habitual.
Algunas situaciones en que los procedimientos almacenados pueden ser particularmente
tiles:
Cuando mltiples aplicaciones cliente se escriben en distintos lenguajes o funcionan en
distintas plataformas, pero necesitan realizar la misma operacin en la base de datos.
Cuando la seguridad es muy importante. Los bancos, por ejemplo, usan procedimientos
almacenados para todas las operaciones comunes. Esto proporciona un entorno seguro y
consistente, y los procedimientos pueden asegurar que cada operacin se loguea
apropiadamente. En tal entorno, las aplicaciones y los usuarios no obtendran ningn
acceso directo a las tablas de la base de datos, slo pueden ejecutar algunos
procedimientos almacenados.

Contenido
Lenguaje SQL
El siguiente es un ejemplo de procedimiento almacenado en MySQL:

DELIMITER //
CREATE PROCEDURE autos(IN velocidad INT,IN marca VARCHAR(50))
BEGIN
IF velocidad < 120 THEN
INSERT INTO familiares VALUES(velocidad,marca);
ELSE
INSERT INTO deportivos VALUES(velocidad,marca);
END IF;
END
//
DELIMITER ;
CALL autos(10,Ford);

Contenido
Lenguaje SQL
DELIMITER //
CREATE PROCEDURE simpleproc (OUT param1 INT)
BEGIN
SELECT COUNT(*) INTO param1 FROM tablaejemplo;
END
//
DELIMITER ;
CALL simpleproc(@contador);
SELECT @contador;
+---------------+
| @contador |
+---------------+
|3
|
+--------------+

Contenido
Lenguaje SQL
DELIMITER $$
DROP PROCEDURE IF EXISTS my_sqrt$$
CREATE PROCEDURE my_sqrt(IN input_number INT, OUT out_number FLOAT)
BEGIN
SET out_number=SQRT(input_number);
END
$$
DELIMITER ;
CALL my_sqrt(4, @out_value); // Para ejecutar el procedimiento
SELECT @out_value; // Para ver el resultado

Contenido
Lenguaje SQL
Para ver los procedimientos en el ambiente actual:

SHOW PROCEDURE STATUS \G;


Para ver un procedimiento especfico:

SHOW CREATE PROCEDURE nombre_procedimiento \G;


Para borrar un procedimiento almacenado:

DROP PROCEDURE nombre_procedimiento;

Contenido
Lenguaje SQL
Uso de Variables y funciones de Sistema

SELECT INTO
Select tambin se puede utilizar para almacenar resultados de consultas en una variable.
Ejemplos

SELECT id, data INTO @x, @y FROM test.t1 LIMIT 1;


SELECT COUNT(*) INTO variable1 FROM Personas;
Algunas Funciones de Sistema
CURRENT_USER(); Usuario Actual de base de datos
CURRENT_DATE(); Fecha actual
CURTIME(); Hora actual
NOW(); Fecha y hora actual
DATABASE(); Base de datos actual

Contenido
Lenguaje SQL
19.- Gestin de usuarios y privilegios en MySql
Una de los puntos ms importantes cuando trabajamos con una base de datos MySQL es la
asignacin de permisos y usuarios. De esta manera administraremos los accesos y la
seguridad de nuestra base de datos.
A continuacin se explica como crear y borrar usuarios en MySQL as como tambin
asignarles permisos.
Comando GRANT
Permite asignar privilegios y crear usuarios.
Ejemplo:

GRANT SELECT, INSERT ON *.* TO tester@'%' IDENTIFIED BY blah;


Con este comando creamos un usuario llamado tester que tiene el derecho de seleccionar e
insertar datos en todas las bases de datos y tablas (*.*), con la contrasea blah.
El signo % despus del nombre de usuario significa que tester podr hacer login desde
cualquier mquina. Si en su lugar hubiramos escrito tester@localhost solo podra conectar
en modo local; y si solo queremos dar permiso a tester desde una mquina remota,
deberamos haber escrito el nombre de dicha mquina: tester@mimaquina.midominio.org

Contenido
Lenguaje SQL
El comando GRANT no solo concede permisos, sino que sirve para crear nuevos usuarios.
Basta con conceder permisos a un usuario para que si este no exista, sea creado en la tabla
user.

GRANT select, insert, update, create, alter, delete, drop ON directorio.* TO tester@localhost
IDENTIFIED BY 'blah';
En este otro ejemplo damos permisos a tester si accede por localhost para seleccionar,
insertar datos, actualizar, crear, modificar y borrar tablas en todas las tablas de la base de
datos directorio (directorio.*)

GRANT all ON directorio.alfa To tester@localhost IDENTIFIED BY 'Blah with GRANT


OPTION;
Concede todos (all) los permisos disponibles para la tabla alfa dentro de la base de datos
directorio a tester.

GRANT USAGE ON *.* To tester@localhost IDENTIFIED BY 'Blah';


Permite la conexin a tester a cualquier base de datos y tablas, pero no concede ningn
otro privilegio.

Contenido
Lenguaje SQL
Comando REVOKE
Es similar a Grant un su sintaxis, pero se usa para revocar o eliminar los privilegios.

REVOKE ALL ON *.* FROM tester@localhost;


Elimina todos los privilegios para el usuario tester en todas las bases de datos.
Otras instrucciones
Ver usuario actual

select current_user();
Ver Usuarios creados

select user,host from mysql.user;


Ver privilegios de un usuario

show grants for nombre_usuario@localhost


Eliminar usuario

drop user nombre_usuario@localhost

Contenido
Lenguaje SQL
20.- Respaldo y restauracin de MySql
MySql proporciona un utilitario llamado mysqldump. Bsicamente lo que hace la
herramienta es crear un archivo que contiene instrucciones SQL para restaurar su base de
datos. Ejemplos de uso de mysqldump:

mysqldump -u username -p database_name > file.sql


Para restaurar un respaldo creado con mysqldump, deber usar el comando mysql. Si su
archivo de vuelco SQL no contiene ninguna sentencia create database, puede usar el
siguiente comando:

mysql -u username -p database_name < file.sql


Para que esto funcione, la base de datos debe estar creada, aunque sea sin datos.

Contenido
phpMyAdmin
21.- phpMyAdmin
21.1 Definicin
phpMyAdmin es un programa de libre distribucin en PHP, creado por una comunidad sin
nimo de lucro, que slo trabaja en el proyecto por amor al arte. Es una herramienta muy
completa que permite acceder a todas las funciones tpicas de la base de datos MySQL a
travs de una interfaz web muy intuitiva.
21.2 Historia
Tobias Ratschiller, por entonces un consultor IT y despus fundador de Maguma, una
compaa de software, comenz a trabajar en la elaboracin de una red administrativa
basada en PHP cliente-servidor enMySQL en 1998 e inspirado por Peter Kuppelwieser y
su MySQL-Webadmin. Cuando Ratschiller dej el proyecto por falta de tiempo, as como
el phpAdsNew del cual es tambin su inventor, el phpMyAdmin se haba convertido en una
de las aplicaciones PHP ms populares, y las herramientas de administracin MySQL
constituan una gran comunidad de usuarios y administradores. Es de anotar que esto
inclua una buena contribucin por parte de distribuidores de Linux.
Para coordinar el creciente nmero de parches, tres desarrolladores de software, Olivier
Mller, Marc Delisle y Loc Chapeaux, registraron el proyecto phpMyAdmin
en SourceForge.net y continu su crecimiento en 2001

Contenido
phpMyAdmin
21.3 Caractersticas

Interfaz web intuitiva


Apoyo a la mayora de las caractersticas de MySQL:
buscar y eliminar bases de datos, tablas, vistas, campos e ndices
crear, copiar, gota, cambiar el nombre y modificar bases de datos, tablas, campos e
ndices
mantenimiento de servidores, bases de datos y tablas, con propuestas sobre la
configuracin del servidor
ejecutar, editar y marcar cualquier SQL -declaracin, incluso por lotes-consultas
administrar usuarios y privilegios de MySQL
gestionar los procedimientos almacenados y disparadores
Importar datos desde CSV y SQL
Exportar datos a varios formatos: CSV , SQL , XML , PDF , ISO / IEC 26300 OpenDocument Text y hoja de clculo, Word , L A T E X y otros
La administracin de mltiples servidores
Crear PDF de grficos de su diseo de base de datos
Creacin de consultas complejas utilizando Consulta-por-Ejemplo (QBE)
Buscando a nivel mundial en una base de datos o un subconjunto de sta
La transformacin de los datos almacenados en cualquier formato utilizando un conjunto
de funciones predefinidas, como mostrar-datos BLOB como imagen o el link de descarga
Y mucho ms ...

Contenido
phpMyAdmin
21.4 Interface

Contenido
phpMyAdmin
21.4 Interface
(1) El botn de inicio, que siempre nos traer a esta primera pgina, el home. Hacia la
derecha tenemos los botones para salir de phpMyAdmin,
(2) Pestaas para acceder a diferentes acciones, ests van a variar dependiendo del trabajo
que estemos efectuando, no ejecutan acciones por si mismas.
(3) Lista de las bases de datos, en algunas versiones se muestran en una lista desplegable
(combo), los nmeros entre parntesis indica el nmero de tablas en cada BD.
(4) Acciones, para cambiar la contrasea y para salir de esta sesin de phpMyAdmin.
(5) Formulario para comenzar a disear una nueva base de datos
(6) Opciones para personalizar la interfaz de tu phpMyAdmin.
(7) Informacin y documentacin de los servicios MySQL, Apache y phpMyAdmin.

Contenido
Ejemplo Base de Datos Libros (dblibros)

Instituto Tecnolgico
de La Universidad de
Los Lagos
Tcnico Universitario en
Computacin

You might also like