Você está na página 1de 11

Universidad San Pedro

Curso: Taller de Programacin


Escuela de Ingeniera Informtica y Sistemas
Sesin de Clase 11
______________________________________________________________________
EL LENGUAJE SQL
SQL es un lenguaje de definicin y manipulacin de datos para bases de dato relacionales. Es un
lenguaje de definicin porque permite definir las estructuras de las tablas que componen la base de
datos, y de manipulacin porque permite efectuar consultas y realizar operaciones como insercin,
borrdo y actualizacin de los datos que los contiene.
SENTENCIAS DE DEFINICION DE DATOS
Las sentencias SQL, de definicin de datos permiten crear la base de datos y las diferentes
componentes que la componen, como por ejemplo, tablas, vistas, ndices, etc. La sentencia utilizada
par la creacin de objetos es CREATE.
CREACION DE BASE DE DATOS
Se utiliza el siguiente comando:
CREATE DATABASE nombre_base_de_datos
Donde nombre_base_datos es el identificador escogido para referenciar a la base de datos que se
est creando.
Ejemplo:
Para crear la base de datos llamada cinemas se colocara:
CREATE DATABASE cinemas;
Todo objeto creado con la sentencia CREATE puede ser modificado con la sentencia ALTER o
destruido con la sentencia DROP, de manera que si, se quisiera destruir la base de datos anterior, la
sentencia a utilizar seria:
DROP DATABASE cinemas;
CREACION DE TABLAS
Una vez creada la base de datos, el paso siguiente es la creacin de la estructura de cada una de sus
tablas
La sintaxis ms simple de la sentencia de creacin de tablas es la siguiente:
CREATE TABLE nombre_tabla ( atributo1 dominio1,
atributo2 dominio2,
..
..
..
atributoN dominioN)
donde:
nombre_tabla : Es el identificador utilizado para referirse a la tabla

______________________________________________________________________
Docente: Mg. Huarote Zegarra Ral

Universidad San Pedro


Curso: Taller de Programacin
Escuela de Ingeniera Informtica y Sistemas
Sesin de Clase 11
______________________________________________________________________
atributoX
dominioX

: Es el nombre del atributo de la tabla


: Es el dominio en el que puede tomar valores el atributo correspondiente.

Respecto a los dominios de los atributos, SQL incorporaa un conjunto de dominios bsicos,
permitiendo definir atributos de tipo cadena de caracteres, de tipo numrico de fecha y de hora.
Adems de indicar el dominio da cada atributo, a la hora de definir las tablas pueden sealarse
igualmente diferentes caraceristicas de los mismos, como por ejemplo si no se permitirn valores
para ese atributo, si el valor debe ser nico, para valores por defecto.
Ejemplo:
CREATE TABLE CLIENTES(
NUM_CLIENTE SMALLINT NOT NULL AUTO_INCREMENT,
NOMBRE VARCHAR(40) NOT NULL,
DIRECCION VARCHAR(50),
FECHANAC DATE,
TELEF CHAR(9),
EMAIL CHAR(30),
PUNTOS_ACUM SMALLINT NOT NULL DEFAULT 0,
CLAVE CHAR(6) NOT NULL,
PRIMARY KEY (NUM_CLIENTE));
MODIFICACION DE TABLAS
Una vez creada una table, es possible su modificacin utilizando la sentencia ALTER.
Ejemplo:
-

Cambio de nombre de la tabla clientes

Cambio del nombre de un atributo de la tabla CLIENTES

ALTER TABLE CLIENTES RENAME TABLA_CLIENTES;


ALTER TABLE CLIENTES CHANGE FECHANAC FNACIMIENTO DATE;
-

Cambio del tipo de dato de un atributo de la tabla CLIENTES


ALTER TABLE CLIENTES CHANGE CLAVE CLAVE VARCHAR(10);

Aadir un nuevo atributo a la tabla CLIENTES

Eliminacin de un atributo de la tabla CLIENTES

ALTER TABLE CLIENTES ADD E_CIVIL ENUM(soltero,casado,otros);


ALTER TABLE CLIENTES DROP E_CIVIL;
CLAVES FORANEAS: RELACIONES ENTRE TABLAS
En la definicin de tablas se puede definir claves forneas (FOREIGN KEY), es decir, atributos que
son claves primarias de otras tablas, de esta manera ambas tablas quedan relacionadas. La forma de
hacerlo es incluir en la definicin de la tabla una instruccin con la siguiente sintaxis:
FOREIGN KEY (atributo) REFERENCES Tabla_enlazada (atributo)
Ejemplo:
CREATE TABLE ENTRADAS(

______________________________________________________________________
Docente: Mg. Huarote Zegarra Ral

Universidad San Pedro


Curso: Taller de Programacin
Escuela de Ingeniera Informtica y Sistemas
Sesin de Clase 11
______________________________________________________________________
NUM_ENTRADA SMALLINT NOT NULL AUTO_INCREMENT,
IDPROY SMALLINT NOT NULL,
FILA SMALLINT NOT NULL,
NUM_ASIENTO SMALLINT NOT NULL,
NUM_CLIENTE SMALLINT NOT NULL,
RECOGIDA BOOL,
PRIMARY KEY (NUM_ENTRADA),
FOREIGN KEY (NUM_CLIENTE) REFERENCES CLIENTES(NUM_CLIENTE)
);
Si la tabla esta creada y se le quiere agregar una tabla fornea se hace de la siguiente manera:
ALTER TABLE PROYECCIONES ADD FOREIGN KEY (IDPELICULA) REFERENCES
PELICULAS(IDPELICULA)
LA SENTENCIA INSERT
Una vez creada la base de datos y sus tablas el siguiente paso es aadir los datos ya que toda tabla
generada con CREATE estar vaca
La sentencia INSERT permite aadir una o varias filas(registros) a una tabla.
La sintaxis bsica de la sentencia INSERT es la siguiente:
INSERT INTO nombre_tabla VALUES (lista_valores)
Con esta sintaxis, deben ser introducidos tantos valores como atributos de la tabla; adems, los
valores deben darse en el mismo orden en el que se encuentren definidos los respectivos atributos.
Por supuesto, los valores introducidos deben coincidir con el tipo del correspondiente atributo.
SQL admite un valor especial, el valor NULL, que indica que el correspondiente atributo esta vacio en
el registro insertado. nicamente puede pueden utilizarse estos valores nulos sobre atributos que no
tengan en su declaracin la clausula NOT NULL.
Ejemplos:
Si tenemos creado la tabla SALAS
CREATE TABLE SALAS(
NUM_SALA SMALLINT NOT NULL,
AFORO SMALLINT NOT NULL,
NUM_FILAS SMALLINT NOT NULL,
OBSERVACIONES LONGTEXT,
PRIMARY KEY (NUM_SALA));

INSERT INTO SALAS VALUES(1,300,15,Zona para minusvlidos);


Esta sentencia insertara una nueva sala, cuyo nmero correspondera al 1, con capacidad para 300
personas, distribuidas en 15 filas y se incluira en el campo de observaciones el hecho de tener una
zona reservada para minusvlidos

______________________________________________________________________
Docente: Mg. Huarote Zegarra Ral

Universidad San Pedro


Curso: Taller de Programacin
Escuela de Ingeniera Informtica y Sistemas
Sesin de Clase 11
______________________________________________________________________
INSERT INTO CLIENTES VALUES(147, Luis Medina Rios, Los Laureles, 129 39005
Santander,1965-2-21,942323135,medina@mimail.com,0,lmr65b);
En SQL, las cadenas de caracteres deben darse entre comillas simples. Las fechas y las horas
tambin son dadas entre comillas y en principio se puede utilizar diferentes formatos.
La sentencia INSERT tambin permite insertar valores solo para atributos determinados. En este
caso a la hora de insertar el registro se debern indicar los nombres de los atributos, sin ser
necesario que el orden de los valores a incluir y el de los atributos en la tabla coincidan. La sintaxis
de esta variante es:
INSERT INTO nombre_tabla (lista_atributos) VALUES (lista_valores)
Ejemplo:
INSERT INTO CLIENTES(NOMBRE, FECHANAC, EMAIL, CLAVE)
VALUES (Andrea Fuentes Davila,1970-3-31,afd@tumail.com,and349);
Como puede observarse, en este caso no se dan valores para todos los atributos de la tabla.
Ejemplo: Se incluye a continuacin una sentencia que permitira dar de alta una nueva sala:
INSERT INTO SALAS (AFORO, NUM_FILAS,NUM_SALA) VALUES (400,20,3);
Como se aprecia, no se dan valores a todos los atributos (faltara el atributo observaciones) y adems
el orden en el que se dan los valores no coincide con el orden de los atributos de la tabla.
Otra de las posibilidades de insercin de datos es la utilizacin de la conocida como como sentencia
de insercin multifila. Esta sentencia permite aadir multiples filas a una tabla en una sola sentencia.
En este caso los valores para las nuevas filas no son especificados explcitamente, sino que se utiliza
una consulta (sentencia SELECT) para obtener esos valores. Su sintaxis es:
INSERT INTO nombre_tabla (lista_atributos) consulta_select
La sentencia INSERT multifila proporciona un modo eficiente y compacto de copiar datos.
Ejemplo:
Si se dispone de una tabla adicional PELICULAS_TERROR para guardar en ella todas las pelculas del
gnero de terror con una estructura totalmente similar a la de la tabla PELICULAS, estas podran
insertarse con una sentencia como la que sigue:
INSERT INTO PELICULAS_TERROR SELECT * FROM PELICULAS where genero=terror;
En este caso, el uso del signo * es una forma de indicar todos los atributos de la tabla.

______________________________________________________________________
Docente: Mg. Huarote Zegarra Ral

Universidad San Pedro


Curso: Taller de Programacin
Escuela de Ingeniera Informtica y Sistemas
Sesin de Clase 11
______________________________________________________________________
LA SENTENCIA DELETE
Permite eliminar una o varias filas de una tabla. Su sintaxis es:
DELETE FROM nombre_tabla WHERE condicin
Esta sentencia elimina de la tabla indicada todas las filas que cumplan la condicin sealada. Si se
suprime la clausula WHERE, se borraran todas las filas de la tabla, pero no la tabla; recurdese que la
instruccin que destruye completamente la tabla (datos y estructura) es DROP TABLE.
Ejemplos
-

Eliminacion del cliente nmero 1456


DELETE FROM CLIENTES WHERE NUM_CLIENTE=1456;

Eliminacin de las entradas de las primeras 5 filas para la proyeccion Numero 211
DELETE FROM ENTRADAS WHERE FILA<=5 AND IDPROY=231

La sentencia delete con condiciones simples permiten seleccionar las filas y sumprir basandose
unicamente en los propios contenidos de las filas. Sin embargo, tambin es posible efectuar la
seleccin de las filas a suprimir en base a los datos contenidos en otras tablas
Ejemplo:
Si se desea eliminar todas las proyecciones de la pelcula Refugio en el paraso, se podra utilizar la
sentencia:
DELETE FROM PROYECCIONES WHERE
IDPELICULA = (SELECT IDPELICULA FROM PELICULAS WHERE
TITULO = Refugio en el paraiso);

LA SENTENCIA UPDATE
La sentencia UPDATE permite modificar los valores de los atributos de uno o varios registros
almacenados en la tabla. La sintaxis de la sentencia es :
UPDATE nombre_tabla SET lista_asignaciones WHERE condicin
La parte final de la sentencia, la clausula WHERE es opcional; en caso de no indicarse, la actualizacin
afectara a todos los registros de la tabla.
En una misma sentencia se pueden actualizar los valores de varios atributos, indicando las
asignaciones separadas por comas.
Ejemplos
-

Reduccion de aforo de todas las salas en un 10 %


UPDATE SALAS SET AFORO = AFORO*0.9;

______________________________________________________________________
Docente: Mg. Huarote Zegarra Ral

Universidad San Pedro


Curso: Taller de Programacin
Escuela de Ingeniera Informtica y Sistemas
Sesin de Clase 11
______________________________________________________________________
-

Otorgar 100 puntos extra a todos los clientes que tengan un saldo de puntos acumulados
menores que 500
UPDATE CLIENTES SET PUNTOS_ACUM=PUNTOS_ACUM*100 WHERE
PUNTOS_ACUM<500

Modificar el aforo y el numero de filas de la sala numero 7.


UPDATE SALAS SET AFORO = 500, FILAS=25 WHERE NUM_SALA=7

Al igual que ocurria con la sentencia DELETE, tambin es posible efectuar la seleccin de las filas a
actualizar en base a los datos contenidos en otras tablas.
UPDATE PROYECCIONES SET TARIFA_REDUCIDA=1
WHERE IDPELICULA=(SELECT IDPELICULA FROM PELICULAS WHERE ANNO<1990);
LA SENTENCIA SELECT
Las consultas son la base del SQL, mediante ellas se extrae informacin de las diferentes tablas de
la base de datos, mostrndola en una estructura tabular.
Toda consulta en SQL se realiza con la sentencia SELECT. Esta es sin duda la sentencia ms poderosa
y completa con la que cuenta el lenguaje SQL. Su sintaxis completa es:
SELECT [Cuantificador_de_conjunto] tems
FROM nombre_de_tabla
[WHERE condicin_de_busqueda]
[GROUP BY columna_de_agrupacion ]
[HAVING condicin_de_busqueda]
[ORDER BY especificacin de ordenacin]
Todos los fragmentos que en esta sintaxis aparecen encerrados entre corchetes son opcionales.
La sentencia SELECT consta de varias partes diferentes:
-

Clausula SELECT en ella se indican los datos a recuperar en la consulta.


Los tems indicados deben ir separados por comas y pueden ser:

Un nombre de columna (atributo) de una tabla

Un asterisco (*), que es equivalente a especificar los nombres de todas las columnas de
las tablas

Una consonante, indicando que el mismo valor constante va a aparecer en todas las filas
de los resultados de la consulta

Una expresin SQL, cuyo valor ser calculado a partir de los valores de los atributos.

El cuantificador de conjunto es opcional, puede ser:

ALL (opcin por defecto) indica que en el resultado de la consulta deben mostrarse
todas las filas, incluyendo las repetidas.

DISTINCT: Indica que en el resultado de la consulta no deben mostrarse las filas


repetidas.

Clausula FROM: en ella se indican, separadas por comas, todas las tablas que contienen los
datos que se desean recuperar en la consulta.

______________________________________________________________________
Docente: Mg. Huarote Zegarra Ral

Universidad San Pedro


Curso: Taller de Programacin
Escuela de Ingeniera Informtica y Sistemas
Sesin de Clase 11
______________________________________________________________________
-

Clausula WHERE: permite indicar una condicin de bsqueda

Clausula GROUP BY: permite obtener consultas resumen en las que todas las filas similares
son agrupadas y se genera una fila resumen por cada grupo.

Clausula HAVING: permite indicar condiciones o filtros a verificar por los diferentes grupos
producidos por la clausula GROUP BY.

Clausula ORDER BY: seala el modo de ordenacin de los resultados de la consulta. Si se


omite, los resultados no aparecen ordenados.

Proyecciones de una tabla


Las nicas clausulas obligatorias son SELECT y FROM. Con esta sintaxis mnima se pueden generar las
consultas mas sencillas en SQL, las proyecciones de una tabla, es decir, aquellas que solicitan
columnas de datos de una nica tabla en la base de datos.
La sintaxis minima es :
SELECT lista_columnas FROM nombre_de_tabla
Ejemplo:
-

Si se quisiera recuperar todos los registros de la tabla PELICULAS, se debera utilizar la


sentencia:
SELECT * FROM PELICULAS;

Si se quisiera recuperar un listado con los ttulos y nacionalidades de las pelculas, la


sentencia a utilizar seria:
SELECT TITULO, NACIONALIDAD FROM PELICULAS;

Una consulta SQL puede incluir columnas calculadas cuyos valores se obtienen a partir de los valores
de los datos almacenados
Ejemplo:
-

Si desea listar las salas disminuyendo el aforo en un 10 %, la sentencia para ello seria
SELECT NUM_SALA, AFORO*0.9 FROM SALAS;

En estas consultas con campos calculados pueden utilizarse diferentes funciones de SQL adems de
las propias de cada gestor de bases de datos. Por ejemplo, existen funciones para tratamiento de
fechas y horas, para tratamiento de cadenas de caracteres..
Eliminacin de duplicados
Si una consulta incluye la clave primaria de una tabla en su lista de seleccin entonces cada fila de
resultados ser nica; en cambio, si no se incluye la clave en la lista de seleccin pueden aparecer
filas duplicadas en el resultado. Se pueden eliminar las filas duplicadas en la consulta insertando la
palabra clave DISTINCT en la sentencia SELECT justo antes de la lista de seleccin
Ejemplo:
-

Al seleccionar todos los directores de las pelculas de la tabla pelculas pueden aparecer
algunos de ellos duplicados (los que han dirigido varias pelculas). La consulta seria

______________________________________________________________________
Docente: Mg. Huarote Zegarra Ral

Universidad San Pedro


Curso: Taller de Programacin
Escuela de Ingeniera Informtica y Sistemas
Sesin de Clase 11
______________________________________________________________________
SELECT DISTINCT director FROM PELICULAS;
Consultas con condiciones de seleccin
Para especificar condiciones de seleccin en las consultas se utiliza la clausulaWHERE. En este caso
el resultado de la consulta estar formado por todas las filas que cumplan la condicin de bsqueda
especificada.
Ejemplos
-

Obtener los ttulos de todas las pelculas de una duracin inferior a 120 minutos

Obtener un listado con las direcciones de correo electrnico de todos los clientes que tengan

SELECT TITULO FROM PELICULAS WHERE DURACION <120


1000 puntos acumulados
SELECT EMAILl FROM CLIENTES WHERE PUNTOS_ACUM<1000
-

Seleccionar las entradas para la proyeccion de numero de identificacion 341 y que


corresponde a filas comprendidas entre la 10 y 14.
SELECT * FROM ENTRADAS WHERE IDPROY=341 AND FILA BETWEEN 10 AND 14

Obtener el titulo de todas las peliculas de nacionalidad espaola, francesa o italiana


SELECT TITULO FROM PELICULAS WHERE NACIONALIDAD IN (espaola,
francesa,italiana);

Generar un listado con los ttulos y directores de todas las pelculas en las que participe
Antonio Banderas:
SELECT TITULO, DIRECCION FROM PELICULAS WHERE ACTORES LIKE %Banderas%

Como se puede apreciar en estos ejemplos, el lenguaje SQLtiene una sintaxis muy similar al lenguaje
natural, y ofrece una gran capacidad expresiva para generar consultas
Ordenacion de los resultados de una consulta
Para ordenar los resultados de una consulta se utiliza la clausula ORDER BY seguida de una lista de
especificaciones de ordenacin separadas por comas. La primera especificacin de ordenacin es la
principal y las otras sern utilizadas en caso de igualdad de valor en la primera. Cada especificacin
de ordenacin esta dado por el nombre de un atributo seguido de una de las palabras siguientes:
ASC

: Indica orden ascendente

DESC : Indica orden descendente


En caso de no indicar el tipo de orden, por defecto se entiende que es ascendente.
Ejemplo:
-

Se desea generar un listado de clientes en orden decreciente segn el atributo de puntos


acumulados y en orden creciente segn el nombre, la sentencia seria:
SELECT * FROM CLIENTES ORDER BY PUNTOS_ACUM DESC, NOMBRE ASC;

Consultas multitabla
SQL permite tambin recuperar datos procedentes de diferentes tablas mediante una nica
sentencia SELECT, esto es lo que se conoce como composicin
Ejemplos:
-

Se desea saber todas las fechas en las que se proyecta la pelcula El Seor de los Anillos
SELECT FECHA FROM PELICULAS, PROYECCIONES WHERE

______________________________________________________________________
Docente: Mg. Huarote Zegarra Ral

Universidad San Pedro


Curso: Taller de Programacin
Escuela de Ingeniera Informtica y Sistemas
Sesin de Clase 11
______________________________________________________________________
TITULO=El seor de los Anillos AND
PELICULAS.IDPELICULA=PROYECCIONES.IDPELICULA
En este caso, la consulta utiliza dos tablas y es preciso en la condicin de
seleccin indicar la igualdad entre los dos atributos comunes a las dos tablas
-

Se desea un listado con los nombres de todos los clientes que hayan adquirido alguna entrada
para ver la pelcula El Seor de los Anillos.
SELECT NOMBRE FROM
PELICULA, PROYECCIONES, ENTRADAS, CLIENTES
WHERE
TITULO=El Seor de los Anillos AND
PELICULAS.IDPELICULA=PROYECCONES.IDPELICULA
AND
PROYECCIONES.IDPROY = ENTRADAS.IDPROY AND
ENTRADAS.NUM_CLIENTE=CLIENTES.NUM_CLIENTE

Consultas Resumen
SQL permite resumir los datos mediante un conjunto de fuciones denominadas funciones de columna.
Alguna de ellas son:
SUM(): Calcula la suma total de los valores de una columna
AVG(): Calcula el valor promedio de una columna.
MIN(): Encuentra el valor mas pequeo de la columna
MAX(): Encuentra el valor mas grande de una columna
COUNT(): Cuenta el numero de valores de una columna
Ejemplo:
-

Calculo de la duracin media de todas las pelculas del genero comedia


SELECT AVG(DURACION) FROM PELICULAS
WHERE GENERO=comedia;

Obtencin de la capacidad de aforo de la sala ms grande


SELECT MAX(AFORO) FROM SALAS;

Calculo de la suma de los puntos acumulados por los clients numero 321, 543, 287 y 721
SELECT SUM(PUNTOS_ACUM) FROM CLIENTES
WHERE NUM_CLIENTE IN(321,543,287,721);

Obtener el numero total de peliculas de nacionalidad espaola


SELECT COUNT(*) FROM PELICULAS
WHERE NACIONALIDAD=espaola;

Consultas agrupadas

______________________________________________________________________
Docente: Mg. Huarote Zegarra Ral

Universidad San Pedro


Curso: Taller de Programacin
Escuela de Ingeniera Informtica y Sistemas
Sesin de Clase 11
______________________________________________________________________
Las consultas agrupadas o resumen producen una nica fila de resultados a modo de totales; sin
embargo, en ocasiones es interesante obtener resmenes parciales o agrupados por categoras. Esto
se consigue con la clausula group by
Ejemplo:
-

Obtener para cada genero de pelculas, la duracin mxima


SELECT MAX(DURACION) FROM PELICULAS GROUP BY GENERO;

Contar el nmero de entradas compradas por cada cliente


SELECT NOMBRE, COUNT(NUM_ENTRADA) FROM CLIENTES
WHERE CLIENTES.NUM_CLIENTE=ENTRADAS.NUM_CLIENTE
GROUP BY NOMBRE

Condiciones de Bsqueda por grupos


De la misma manera que en las consultas agrupadas la clausula WHERE puede ser utilizada para
rechazar filas individuales, la clausula HAVING puede emplearse para rechazar grupos de filas.
El formato de la clausula HAVING es similar a la clausula WHERE y permite indicar una condicin de
bsqueda para grupos. A diferencia de lo que ocurria en la clausula WHERE, si es posible utilizar
funciones de columna en la condicin de la clausula HAVING.
-

Se desea obtener el nombre de todos los clientes que hayan adquirido 20 o ms entradas; la
forma de conseguirlo seria utilizando la sentencia:

SELECT NOMBRE, COUNT(NUM_ENTRADA) FROM CLIENTES, ENTRADAS WHERE


CLIENTE.NUM_CLIENTE=ENTRADAS.NUM_CLIENTE
GROUP BY NOMBRE
HAVING COUNT(NUM_ENTRADA) >=20;

______________________________________________________________________
Docente: Mg. Huarote Zegarra Ral

10

Universidad San Pedro


Curso: Taller de Programacin
Escuela de Ingeniera Informtica y Sistemas
Sesin de Clase 11
______________________________________________________________________
Script para crear una base de datos
create database empresa;
use empresa;
create table cliente(
idcliente smallint not null auto_increment,
apellidos varchar(30) not null,
nombres varchar(30) not null,
direccion varchar(40) not null,
telefono varchar(15) not null,
email varchar(50) not null,
primary key (idcliente)
) type = innodb;
create table pedido(
idpedido smallint not null auto_increment,
idcliente smallint not null,
fecha date not null,
primary key (idpedido),
foreign key (idcliente) references cliente (idcliente)
)type = innodb;
create table producto(
idproducto smallint not null auto_increment,
nomproducto varchar(25) not null,
preciounitario double not null,
stock int not null,
unidaddemedida varchar(20) not null,
primary key (idproducto)
)type = innodb;
create table detallepedido(
idproducto smallint not null,
idpedido smallint not null,
cantidad int not null,
precio double not null,
primary key (idproducto,idpedido),
foreign key(idpedido) references pedido(idpedido),
foreign key(idproducto) references producto(idproducto)
)type=innodb;

______________________________________________________________________
Docente: Mg. Huarote Zegarra Ral

11

Você também pode gostar