Sei sulla pagina 1di 21

TRABAJO SEMESTRAL BASE DE DATOS

ENTREGA 2

Nombre: Diego Merino Rubilar


Rut: 19.510.785-8
Profesora: Valeria Beratto
Carrera: Ingeniería Civil Informática
Asignatura: Base de datos
Seccion:1
ENUNCIADO

En esta entrega se deben generar un conjunto de consultas en lenguaje SQL. Además, se deben
incluir los modelos de datos corregidos de la entrega anterior. Esto implica entregar el informe 1
con los comentarios realizados en la revisión.

En esta entrega se espera un informe que contenga los puntos que a continuación se detallan.

Modelo Entidad Relación y Modelo Relacional

1. Muestre el nuevo modelo entidad relación (MER) y el correspondiente Modelo Relacional (MR)
para el enunciado del trabajo. Estas nuevas versiones de los modelos deben estar corregidos de
acuerdo a las observaciones efectuadas en el informe de la Entrega 1. Genere las siguientes
consultas en lenguaje SQL.

Consultas:

Q1: Genere la vista REGIONES SINDESCUENTO(nombreRegion, cantidad) que contiene el nombre


de cada región y la cantidad de personas a las que no se les ha aplicado descuento y que han
visitado algún lugar de la región en algún tour, durante el mes de noviembre del presente a ñ o.
Luego utilizando la vista, muestre las regiones que han recibido la mayor cantidad de turistas sin
descuento.

Q2: Genere la vista VALORES TOURS(idT, nombreT, TotalVentas) que contiene el identificador y
nombre de cada tour, además del total de ventas de cada tour. Par ello debe considerar todas las
ventas realizadas del tour. Genere la vista TOUR DESCUENTOS(idT, nombreT,TotalDescuentos) que
contiene el identificador y nombre de cada tour, además del total de descuentos aplicados en
todas las ventas de cada tour. Luego utilizando las vistas, muestre el nombre de los tours y valor
total recibido, considerando el dinero recibido menos los descuentos.

Q3: Genere la vista TOTAL COORDINADORES(idT, nombreT, TotalCoordinadores) que almacena el


identificador y nombre de los tour que poseen guías coordinadores con m á s de tres
especialidades y que han participado en tours que visitan lugares con nivel de esfuerzo medio.
Luego, utilizando la vista, muestre los tours que poseen la mayor cantidad de coordinadores con
las características mencionadas.

Q4: Genere la vista TOTAL TURISTAS(idT, nombreT, TotalTuristas) que contiene el identificador y
nombre de los tours, y la cantidad de turistas que no tienen enfermedades cardíacas ni
respiratorias y que han visitado lugares cuyo nivel de exigencia es experto durante el mes de
octubre del presente año. Luego, utilizando la vista, muestre los tours que poseen la mayor
cantidad de turistas que han visitado lugares con exigencia experto y que cumplan el requisito de
no tener las enfermedades mencionadas.
Q5: Genere la vista TOTAL ARRIENDOS(TotalArriendo) que almacena el total de arriendos de
vehículos (no precio) realizados por SERNATUR durante los meses de enero y febrero del presente
año y la vista TOTAL VEHICULOS(TotalVeh) que contiene el total de vehículos que posee
SERNATUR. Luego, utilizando las vistas muestre el porcentaje de arriendo de vehículos realizados
por SERNATUR (número de vehículos arrendados/número total de vehículos).
Modelo Entidad Relación (MER)
Modelo Relacional (MR)
COMENTARIOS
Tanto en el Modelo Entidad Relación (MER) como en el Modelo Relacional (MR), se utilizó el
software DIA

A saber (MER): *Las claves primarias se caracterizan por estar subrayados tales atributos.

A saber(MR): *Las claves primarias se caracterizan por llevar un (-) antes del atributo.
*Las claves foráneas se caracterizan por llevar un (#) antes del atributo.

Justificaciones:

1) La entidad Empresa_arr corresponde hacer tabla por ser entidad.


2) La entidad Tour corresponde hacer tabla por ser entidad.
3) La entidad Ciudad corresponde hacer tabla por ser entidad.
4) La entidad Región corresponde hacer tabla por ser entidad.
5) La entidad Vehiculo corresponde hacer tabla por ser entidad.
6) La entidad Enfermedad corresponde hacer tabla por ser entidad.
7) La entidad Turista corresponde hacer tabla por ser entidad.
8) La entidad Descuento corresponde hacer tabla por ser entidad.
9) La entidad Guia corresponde hacer tabla por ser entidad.
10) La entidad Categoria corresponde hacer tabla por ser entidad.
11) La entidad Lugares corresponde hacer tabla por ser entidad.
12) La entidad Especialidad corresponde hacer tabla por ser entidad.
13) La relación “Arrienda” desde Empresa_arr a Vehículo sí corresponde a hacer tabla ya que
su cardinalidad es de (1 a n).
14) La relación “Utiliza” desde Tour a Vehículo sí corresponde a hacer tabla ya que su
cardinalidad es de (n a 1).
15) La relación “Ubicado_en” desde Lugares a Ciudad no corresponde a hacer tabla ya que su
cardinalidad es de (1 a 1)
16) La relación “Originado en” desde Tour a Ciudad no corresponde a hacer tabla ya que su
cardinalidad es de (n a 1).
17) La relación “Ubicado en” desde Ciudad a Región no corresponde a hacer tabla ya que su
cardinalidad es de (n a 1).
18) La relación “Ubicado en” desde Guía a Ciudad no corresponde a hacer tabla ya que su
cardinalidad es de (n a 1).
19) La relación “Posee” desde Guía a Especialidad si corresponde a hacer tabla ya que su
cardinalidad es de (n a n).
20) La relación “Participan” desde Tour a Guía y Tour a Categoría si corresponde a hacer tabla
ya que su cardinalidad es de (n a n).
21) La relación “Asociado a” desde Tour a Lugares si corresponde a hacer tabla ya que su
cardinalidad es de (n a n).
22) La relación “Realizado por” desde Tour a Turistas y Tour a Descuento si corresponde a
hacer tabla ya que su cardinalidad es de (n a n).
23) La relación “Posee_enf” desde Turista a Enfermedad si corresponde a hacer tabla ya que
su cardinalidad es de (n a n).
SQL
create table Ciudad(

codigo_ciudad integer not null,

nombre_ciudad varchar(30),

codigo_region integer not null,

primary key (codigo_ciudad),

foreign key (codigo_region) references Region(codigo_region)

);

insert into Ciudad values (521,'Los Andes',05);

insert into Ciudad values (623,'Cerro Castillo',12);

insert into Ciudad values (212,'Chiloe',10);

select * from Ciudad;

create table Tour(

codigo_tour integer not null,

nombre_tour varchar(60),

costo_indiv integer,

costo_grupal integer,

codigo_ciudad integer not null,

primary key(codigo_tour),

foreign key (codigo_ciudad) references Ciudad(codigo_ciudad)

);

insert into Tour values (421,'Tour a los Andes',30000,150000,521);

insert into Tour values (219,'Tour Torres del paine',50000,300000,623);

insert into Tour values (921,'Tour a Chiloe',40000,200000,212);

select * from Tour;


create table Lugares(

codigo_lugar integer not null,

nombre_lugar varchar(50),

precio_entrada integer ,

nivel_esfuerzo varchar(30),

codigo_ciudad integer not null,

foreign key (codigo_ciudad) references Ciudad(codigo_ciudad),

primary key (codigo_lugar)

);

insert into Lugares values (281,'Los Andes',0,'Bajo',521);

insert into Lugares values (852,'Torres del Paine',5000,'Alto',623);

insert into Lugares values (522,'Chiloe',0,'Bajo',212);

select * from Lugares;

create table Region(

codigo_region integer not null,

nombre_region varchar(90),

primary key (codigo_region)

);

insert into Region values (05,'Region de Valparaiso');

insert into Region values (12,'Region de Magallanes y la Antartica Chilena');


insert into Region values (10,'Region de los Lagos');

select * from Region;

create table Empresa_arr(

rut_empresa varchar(30),

nombre_empresa varchar(50),

persona_contacto varchar(40),

telefono integer ,

primary key (rut_empresa)

);

insert into Empresa_arr values ('20.012.412-4','Rentandocar','Juan Valdes',985214822);

insert into Empresa_arr values ('42.124.512-5','Auto al instante','Franco


Sanchez',972812942);

insert into Empresa_arr values ('24.244.591-9','Rentame','Mariano Arias',984583592);

select * from Empresa_arr;

create table Vehiculo(

patente varchar(30),

marca varchar(30),

ano integer ,

capacidad integer ,

codigo_tour integer not null,

rut_empresa varchar(30),

primary key (patente),

foreign key (codigo_tour) references Tour(codigo_tour),

foreign key (rut_empresa) references Empresa_arr(rut_empresa)

);
insert into Vehiculo values ('ZG-2124','Nissan',2015,10,421,'20.012.412-4');

insert into Vehiculo values ('HSJK-28','Toyota',2017,8,219,'42.124.512-5');

insert into Vehiculo values ('BCHF-12','Hyundai',2016,8,921,'24.244.591-9');

select * from Vehiculo;

create table Utiliza(

codigo_tour integer not null,

patente varchar (50),

nombre_chofer varchar(50),

foreign key (codigo_tour) references Tour(codigo_tour),

foreign key (patente) references Vehiculo(patente),

primary key (codigo_tour,patente)

);

insert into Utiliza values (421,'ZG-2124','Gilbero Lagos');

insert into Utiliza values (219,'HSJK-28','Florencio Yañez');

insert into Utiliza values (921,'BCHF-12','Martin Arriagada');

select * from Utiliza;

create table Arrienda(

rut_empresa varchar(30),

patente varchar(30),

foreign key (rut_empresa) references Empresa_arr(rut_empresa),

foreign key (patente) references Vehiculo(patente),

primary key (rut_empresa,patente)

);

insert into Arrienda values ('20.012.412-4','ZG-2124');


insert into Arrienda values ('42.124.512-5','HSJK-28');

insert into Arrienda values ('24.244.591-9','BCHF-12');

select * from Arrienda;

create table Turista(

rut_turista varchar(30),

nombre_turista varchar(80),

nombre_emergencia varchar(40),

telefono_emergencia integer ,

fecha_nac date,

primary key(rut_turista)

);

insert into Turista values ('16.204.402-2','Juan Francisco Burruchaga Palma','Andrea


Palma',958289291,'20-05-1989');

insert into Turista values ('10.592.240-0','Maria Angelica Freire Salinas','Gloria


Freire',995281921,'12-08-1950');

insert into Turista values ('17.521.475-k','Francisca Sofia Guerrero Rodriguez','Mario


Guerrero',958281922,'20-02-1992');

select * from Turista;

create table Realizado_por(

codigo_tour integer not null,

rut_turista varchar (30),

des_codigo integer ,

foreign key (codigo_tour) references Tour(codigo_tour),

foreign key (rut_turista) references Turista(rut_turista),

foreign key (des_codigo) references Descuento(des_codigo),

primary key(codigo_tour,rut_turista)

);
insert into Realizado_por values (421,'16.204.402-2',50);

insert into Realizado_por values (219,'10.592.240-0',66);

insert into Realizado_por values (921,'17.521.475-k',50);

select * from Realizado_por;

create table Descuento(

des_codigo integer not null,

descrip_desc varchar(70),

porcentaje integer ,

primary key (des_codigo)

);

insert into Descuento values (15,'Entre 0-15 años',20);

insert into Descuento values (50,'Entre 16-50 años',0);

insert into Descuento values (65,'Entre 51-65 años',10);

insert into Descuento values (66,'66 en adelante',30);

select * from Descuento;

create table Enfermedad(

codigo_enf integer not null,

descripcion_enf varchar (60),

primary key(codigo_enf)

);

insert into Enfermedad values (2104,'Diabetico');

insert into Enfermedad values (5921,'Asmatico');

insert into Enfermedad values (0000,'Sin enfermedad');

select * from Enfermedad;


create table Posee_enf(

codigo_enf integer not null,

rut_turista varchar(30),

foreign key (codigo_enf) references Enfermedad(codigo_enf),

foreign key (rut_turista) references Turista(rut_turista),

primary key(codigo_enf,rut_turista)

);

insert into Posee_enf values (5921,'16.204.402-2');

insert into Posee_enf values (2104,'10.592.240-0');

insert into Posee_enf values (0000,'17.521.475-k');

select * from Posee_enf;

create table Guia(

rut_guia varchar(30),

nombre_guia varchar(70),

direccion varchar (70),

codigo_ciudad integer not null,

foreign key (codigo_ciudad) references Ciudad(codigo_ciudad),

primary key (rut_guia)

);

insert into Guia values ('15.201.429-2','Alex Fernandez','Freire #219',521);

insert into Guia values ('13.402-245-5','Lorena Gonzalez','Maipu #492',623);

insert into Guia values ('9.592.452-7','Ariel Riffo','Ohiggins #22',623);

select * from Guia;


create table Categoria(

codigo_cat integer not null,

descripcion_cat varchar (50),

primary key (codigo_cat)

);

insert into Categoria values (5921,'Principal');

insert into Categoria values (4296,'Reemplazo');

insert into Categoria values (2102,'Traductor');

select * from Categoria;

create table Participan(

codigo_tour integer not null,

rut_guia varchar(30),

codigo_cat integer not null,

foreign key (codigo_tour) references Tour(codigo_tour),

foreign key (rut_guia) references Guia(rut_guia),

foreign key (codigo_cat) references Categoria(codigo_cat),

primary key (codigo_tour,rut_guia,codigo_cat)

);

insert into Participan values (421,'15.201.429-2',5921);

insert into Participan values (219,'13.402-245-5',4296);

insert into Participan values (921,'9.592.452-7',2102);

select * from Participan;

create table Especialidad(

codigo_esp integer not null,


descripcion_esp varchar(80),

primary key (codigo_esp)

);

insert into Especialidad values (9592,'Experto en excursiones en ciudad');

insert into Especialidad values (5921,'Experto en excursiones en hielo');

insert into Especialidad values (6291,'Chofer');

select * from Especialidad;

create table Posee_esp(

codigo_esp integer not null,

rut_guia varchar(30),

nivel varchar(30),

foreign key (codigo_esp) references Especialidad(codigo_esp),

foreign key (rut_guia) references Guia(rut_guia),

primary key (codigo_esp,rut_guia)

);

insert into Posee_esp values (9592,'15.201.429-2','Alto');

insert into Posee_esp values (5921,'13.402-245-5','Medio');

insert into Posee_esp values (6291,'9.592.452-7','Alto');

select * from Posee_esp;


/*Q1:Genere la vista REGIONES SINDESCUENTO(nombreRegion, cantidad) que contiene el nombre

de cada región y la cantidad de personas a las que no se les ha aplicado descuento y que han

visitado algún lugar de la región en algún tour, durante el mes de noviembre del presente año.

Luego utilizando la vista, muestre las regiones que han recibido la mayor cantidad de turistas

sin descuento.*/

create view regiones_sindescuento as (

select R.nombre_region, count(*) as personas_sin_descuento

from Region R, Ciudad CC, Tour T, Realizado_por RP, Descuento DC, Turista TR,
Lugares L, Asociado_a AA

where T.codigo_tour=RP.codigo_tour

and TR.rut_turista=RP.rut_turista

and T.codigo_ciudad=CC.codigo_ciudad

and CC.codigo_region=R.codigo_region

and CC.codigo_ciudad=L.codigo_ciudad

and T.codigo_tour=AA.codigo_tour

and L.codigo_lugar=AA.codigo_lugar

and DC.des_codigo=RP.des_codigo

and DC.porcentaje=0

and AA.fecha_llegada between '01-11-2018' and '30-11-2018'

group by R.nombre_region

select nombre_region, personas_sin_descuento

from regiones_sindescuento

where personas_sin_descuento=(select max(personas_sin_descuento) from


regiones_sindescuento)

select * from regiones_sindescuento


/*Q2: Genere la vista VALORES TOURS(idT, nombreT, TotalVentas) que contiene el identificador

y nombre de cada tour, además del total de ventas de cada tour. Para ello debe considerar

todas las ventas realizadas del tour. Genere la vista TOUR DESCUENTOS(idT, nombreT,

TotalDescuentos) que contiene el identificador y nombre de cada tour, además del total de

descuentos aplicados en todas las ventas de cada tour. Luego utilizando las vistas, muestre el

nombre de los tours y valor total recibido, considerando el dinero recibido menos los descuentos.
*/

create view valores_tours as (

select T.codigo_tour, T.nombre_tour, sum(costo_indiv) as total_ventas

from Tour T, Realizado_por RP, Turista TR

where T.codigo_tour=RP.codigo_tour

and TR.rut_turista=RP.rut_turista

group by T.codigo_tour,T.nombre_tour

select * from valores_tours

create view tour_descuentos as (

select T.codigo_tour, T.nombre_tour, sum(costo_indiv)*DC.porcentaje/100 as total_descuentos

from Tour T, Realizado_por RP, Turista TR, Descuento DC

where T.codigo_tour=RP.codigo_tour

and TR.rut_turista=RP.rut_turista

and RP.des_codigo=DC.des_codigo

and DC.porcentaje!=0

group by T.codigo_tour, T.nombre_tour, DC.porcentaje

select * from tour_descuentos


select TD.nombre_tour, VT.total_ventas - TD.total_descuentos as total_con_descuentos

from valores_tours VT, tour_descuentos TD

where VT.nombre_tour=TD.nombre_tour

/*Q3: Genere la vista TOTAL COORDINADORES(idT, nombreT, TotalCoordinadores) que almacena

el identificador y nombre de los tour que poseen guías coordinadores con más de tres
especialidades

y que han participado en tours que visitan lugares con nivel de esfuerzo medio. Luego,

utilizando la vista, muestre los tours que poseen la mayor cantidad de coordinadores con las

características mencionadas.*/

create view total_coordinadores as (

select T.codigo_tour, T.nombre_tour, count(*) as coordinadores

from Tour T, Participan PT, Categoria CT, Guia G, Ciudad CC, Lugares L

where T.codigo_tour=PT.codigo_tour

and PT.rut_guia=G.rut_guia

and PT.codigo_cat=CT.codigo_cat

and T.codigo_ciudad=CC.codigo_ciudad

and CC.codigo_ciudad=L.codigo_ciudad

and L.nivel_esfuerzo='medio'

and CT.descripcion_cat='coordinadores'

and G.rut_guia in (select G.rut_guia

from Guia G,
Posee_esp PE, Especialidad ES

where
G.rut_guia=PE.rut_guia

and
PE.codigo_esp=ES.codigo_esp

group by G.rut_guia
having count(*)>3

group by T.codigo_tour, T.nombre_tour

select * from total_coordinadores

select nombre_tour, coordinadores

from total_coordinadores

where coordinadores=(select max(coordinadores) from total_coordinadores)

/*Q4:Genere la vista TOTAL TURISTAS(idT, nombreT, TotalTuristas) que contiene el identificador

y nombre de los tours, y la cantidad de turistas que no tienen enfermedades cardíacas ni

respiratorias y que han visitado lugares cuyo nivel de exigencia es experto durante el mes de

octubre del presente año. Luego, utilizando la vista, muestre los tours que poseen la mayor

cantidad de turistas que han visitado lugares con exigencia experto y que cumplan el requisito

de no tener las enfermedades mencionadas.*/

create view total_turistas as (

select distinct T.codigo_tour, T.nombre_tour, count(*) as total_turistas_aptos

from Tour T, Realizado_por RP, Turista TR, Ciudad CC, Lugares L, Asociado_a AA

where T.codigo_tour=RP.codigo_tour

and RP.rut_turista=TR.rut_turista

and RP.rut_turista not in (select TR.rut_turista

from
Turista TR, Posee_enf PE, Enfermedad E

where TR.rut_turista=PE.rut_turista

and
PE.codigo_enf=E.codigo_enf
and
E.descripcion_enf='cardiaca'

and
E.descripcion_enf='respiratoria'

and T.codigo_ciudad=CC.codigo_ciudad

and CC.codigo_ciudad=L.codigo_ciudad

and L.nivel_esfuerzo='experto'

and T.codigo_tour=AA.codigo_tour

and L.codigo_lugar=AA.codigo_lugar

and AA.fecha_llegada between '01-10-2018' and '31-10-2018'

group by T.codigo_tour, T.nombre_tour

select * from total_turistas

select codigo_tour, nombre_tour, total_turistas_aptos

from total_turistas

where total_turistas_aptos=(select max(total_turistas_aptos) from total_turistas)

/*Q5: Genere la vista TOTAL ARRIENDOS(TotalArriendo) que almacena el total de arriendos de


vehículos (no precio) realizados por SERNATUR

durante los meses de Enero y Febrero del presente año y la vista TOTAL VEHICULOS(TotalVeh) que
contiene el total de vehículos que posee SERNATUR.

Luego, utilizando las vistas muestre el porcentaje de arriendo de vehículos realizados por
SERNATUR (número de vehículos arrendados/número total de vehículos).*/

create view total_arriendos as (

select count(*) as arrendados_sernatur

from Tour T, Vehiculo V, Asociado_a AA, Realizado_por RP, Utiliza U, Arrienda A

where T.codigo_tour=RP.codigo_tour

and T.codigo_tour=AA.codigo_tour
and T.codigo_tour=U.codigo_tour

and U.patente=V.patente

and A.patente=V.patente

and AA.fecha_llegada between '01-01-2018' and '28-02-2018'

select * from total_arriendos

create view total_vehiculos as (

select count(*) as vehiculos_usados

from Tour T, Vehiculo V, Realizado_por RP, Utiliza U

where T.codigo_tour=RP.codigo_tour

and T.codigo_tour=U.codigo_tour

and U.patente=V.patente

select * from total_vehiculos

select (TA.arrendados_sernatur/TV.vehiculos_usados)*100 as porcentaje

from total_arriendos TA, total_vehiculos TV

Potrebbero piacerti anche