quinta-feira, 2 de março de 2017

Exercício Banco de Dados Agencia de Turismo

Construir o modelo entidade-relacionamento e descrever o mapeamento para o modelo relacional.

Agência de Turismo
 Deseja-se criar um BD para uma agência de turismo, contendo informações sobre recursos oferecidos pelas cidades que fazem parte da programação de turismo da agência. As informações a serem mantidas sobre cada cidade referem-se a hotéis, restaurantes e pontos turísticos. 
  Sobre os hotéis que a cidade possui deseja-se guardar o código, o nome,  o endereço,  a categoria, os tipos de quartos que os formam, o número dos quartos e o valor da diária de acordo com o tipo do quarto. 
 Sobre cada cidade deve-se armazenar seu nome, seu estado e a população. Além disso, quando uma nova cidade é cadastrada no banco de dados da agência, um código é a ela oferecido. 
 Cada restaurante da cidade possui um código que o identifica, um nome, um endereço e o tipo de sua categoria. Além disso, um restaurante pode pertencer a um hotel e um hotel somente pode ser associado a um restaurante. 
  Diferentes pontos turísticos da cidade estão cadastrados no sistema: igrejas, casas de show e museus. A agência de turismo somente trabalha com estes três tipos de pontos turísticos.  Nenhum outro é possível. Além da descrição e do endereço, igrejas devem possuir como característica a data e o estilo de construção. Já casas de show devem armazenar o horário de abertura e o dia de fechamento, além da descrição e do seu endereço. Finalmente, os museus devem armazenar o seu endereço, descrição, data de fundação e número de salas. Um museu pode ter sido fundado por vários fundadores.  Para estes, deve-se armazenar o seu nome, a data de nascimento e a data da morte (se houver), a nacionalidade e a atividade profissional que desenvolvia.  Além disso, um mesmo fundador pode ter fundado vários museus. Quando qualquer ponto turístico é cadastrado no sistema, ele também recebe um código que o identifica. O mesmo é válido para fundadores.  
 Finalmente, casas de show podem possuir restaurante. Quando o cliente da agência reserva um passeio para uma casa de show, ele já sabe se essa possui restaurante e qual o preço médio da refeição, além da especialidade.  Dentro de uma casa de show, apenas um único restaurante pode existir.     






create database DB_Agencia_Turismo

use DB_Agencia_Turismo

create table cidade(
nome_cidade varchar(50),
estado varchar (20),
populacao int,
cod_cidade int primary key)

create table hotel(
cod_hotel int primary key,
nome_hotel varchar(50),
endereco varchar(100),
categoria varchar(10))

create table tipo_quarto(
cod_hotel int foreign key references hotel(cod_hotel),
cod_tipo int,
primary key(cod_hotel,cod_tipo),
num_quarto int,
valor_diaria money,
decricao varchar(50))

create table restaurante(
cod_restaurante int primary key,
cod_cidade int foreign key references cidade(cod_cidade),
cod_hotel int foreign key references hotel(cod_hotel),
nome varchar(50),
endereco varchar(100),
categoria varchar(30))

create table ponto_turistico(
cod_ponto_turistico int,
cod_cidade int foreign key references cidade(cod_cidade),
primary key(cod_ponto_turistico),
descricao varchar(50),
endereco varchar (100))

create table igreja(
cod_igreja int foreign key references ponto_turistico(cod_ponto_turistico),
data_fundacao date,
estilo varchar(30)
primary key (cod_igreja))

create table museu(
cod_museu int foreign key references ponto_turistico(cod_ponto_turistico),
data_fund date,
numero_salas int,
primary key (cod_museu))

create table casa_show(
cod_casa_show int foreign key references ponto_turistico(cod_ponto_turistico),
horario time,
dias_fechado date,
cod_restaurante int foreign key references restaurante(cod_restaurante),
primary key (cod_casa_show))

create table fundador(
cod_fundador int,
nome varchar(50),
data_nasc date,
data_obto date,
nacionalidade varchar(30),
atividade varchar(30),
primary key (cod_fundador))

create table fundacao(
cod_museu int foreign key references museu(cod_museu),
cod_fundador int foreign key references fundador(cod_fundador),
primary key (cod_museu, cod_fundador))

insert into cidade(nome_cidade,estado,populacao,cod_cidade)
values
('Sao Paulo','SP','124000000','01'),
('Rio de Janeiro','RJ','6320000','02'),
('Belo Horizonte','MG','1433000','03')

select *from cidade

alter table hotel
add cod_cidade int

alter table hotel
add constraint fk_cod_cidade foreign key(cod_cidade)
references cidade(cod_cidade)

insert into hotel(cod_hotel, nome_hotel,endereco,categoria,cod_cidade)
values
('001','Nova Era','Rua Libero Badarol 22','3 estrelas','01'),
('002','Jasmine','Rua do Tijuco 430','2 estrelas','02'),
('003','Miraje','Rua Sertao 120','4 estrelas','03')

select *from hotel

insert into tipo_quarto(cod_hotel,cod_tipo,num_quarto,valor_diaria,decricao)
values
('001','2','10','89.50','Quarto solteiro'),
('001','3','10','100','Quarto Casal'),
('001','4','5','120.50','1 Casal 2 solteiro'),
('002','2','10','70','Quarto 2 solteiro'),
('002','3','4','85','Quarto Casal'),
('002','4','5','100','1 Casal 2 solteiro'),
('003','2','20','90.50','Quarto solteiro'),
('003','3','10','110.50','Quarto Casal'),
('003','4','15','120.50','1 Casal 2 solteiro')

select *from tipo_quarto

insert into restaurante(cod_restaurante,cod_cidade,cod_hotel,nome,endereco,categoria)
values
('10','1','1','Restaurnate Nova Era','Rua Libero Badarol 22','Restaurnate por Kilo'),
('20','2','2','Churrascaria','Rua do Tijuco 500','Churrascaria'),
('30','3','3','Pizzaria','Rua Sertao 150','Pizzaria'),
('40','1',null,'Restaurante X','Rua Xavantes 1330','Self Service')

select *from restaurante

insert into ponto_turistico(cod_ponto_turistico, cod_cidade, descricao,endereco)
values
('11','3','Igreja Menino Jesus','Rua Mojor Olimpo 1000'),
('15','1','Igreja NS da Luz','Rua Bom Fim 18'),
('20','1','Museu','Rua Braz Cubas 401'),
('30','1','Boate','Av Coimbra 100'),
('25','2','Igreja Sao Judas','Rua XV Novembro SN'),
('40','2','Museu','AV Copa Cabana 40'),
('50','2','Discotec','Rua da Ladeira 200'),
('5','3','Igreja NS da Luz','Rua Bom Fim 18'),
('2','3','Museu','Rua Braz Cubas 401'),
('3','3','Boate','Av Coimbra 100')

select *from ponto_turistico

insert into igreja(cod_igreja,data_fundacao,estilo)
values
('11','19000522','null'),
('15','18500204','barroco'),
('25','19100816','gotico'),
('5','17900601','bizantina')

select *from igreja

insert into museu(cod_museu,data_fund,numero_salas)
values
('20','19000705','7'),
('40','19881101','3'),
('2','20051010','5')

select *from museu

alter table casa_show
alter column dias_fechado varchar(50)

insert into casa_show(cod_casa_show, horario, dias_fechado,cod_restaurante)
values
('30','23:00','Segunda a Quinta',null),
('50','21:00','Seunda a Sexta',null),
('3','22:00','Domingo a Quinta',null)

select *from casa_show

insert into fundador(cod_fundador,nome,data_nasc,data_obto,nacionalidade,atividade)
values
('31','Jose Bonifacio','18450210','19020502','Portuguesa','Professor'),
('23','Plinio Alcnatara','19010307','19590511','Brasileira','Medico'),
('13','Antonio Villas Boas','19320101','19940507','Brasileira','Historiador')

select *from fundador

insert into fundacao(cod_museu,cod_fundador)
values
('20','31'),
('40','23'),
('2','13')

select *from fundacao

/* 1-Listar todos os pontos turisticos com codigo, descrição e endereço */

select  cod_ponto_turistico, descricao, endereco
from ponto_turistico

/* 2-Listar as igrejas com código, data fundção e estilo */

select cod_igreja, data_fundacao, estilo
from igreja

/* 3-Listar o conteudo completo de cada tabela do Banco de Dados da Agencia de Turismo */

select *from casa_show
select *from cidade
select *from fundacao
select *from fundador
select *from hotel
select *from igreja
select *from museu
select *from ponto_turistico
select *from restaurante
select *from tipo_quarto

/* 4-Recuperar as informções das cidades que tem populção superior a 1 milhão
     de habitantes */

select *from cidade
where populacao > 10000000


/* 5-Quais os hoteis que tem categoria "3 estrelas"  */

select *from hotel
where categoria = '2 estrelas'

/* 6-Adicionar o campo Especialidades em Restaurante */

alter table restaurante
add especialidade varchar(20)

update restaurante
set especialidade = 'Comida Mineira'
where nome = 'Restaurnate Nova Era'

update restaurante
set especialidade = 'Churrascaria'
where nome = 'Churrascaria'

update restaurante
set especialidade = 'Comida Italiana'
where nome = 'Pizzaria'

update restaurante
set especialidade = 'Comida Mineira'
where nome = 'Restaurante X'

-- Alterando Categoria
update restaurante
set categoria = '3 estrelas'
where nome = 'Restaurnate Nova Era'

update restaurante
set categoria = '2 estrelas'
where nome = 'Churrascaria'

update restaurante
set categoria = '3 estrelas'
where nome = 'Pizzaria'

update restaurante
set categoria = '2 estrelas'
where nome = 'Restaurante X'

select *from restaurante

/* 7-Quais são os restaurantes "3 estrlas" especializado
   em comida italiana */

select *from restaurante
where (categoria = '3 estrelas')and(especialidade = 'Comida Italiana')

/* 8-Recupere os Restaurantes que não são especiaizados em comida italiana
   e nem comida mineira */

select *from restaurante
where (especialidade != 'Comida Italiana') and (especialidade != 'Comida Mineira')


/* 9-Recupere quartos que tem valor entre 50 e 100 */

select *from tipo_quarto
where (valor_diaria > 50) and (valor_diaria < 100)


/*10-Recupere todos hoteis cujos nomes não comecem com "H" */


select *from hotel
where nome_hotel not LIKE'M%'

/*11-Recupere todos hoteis com categoria " 1 estrela "," 2 estrela "e" 3 estrelas "*/

select *from hotel
where categoria in ( '1 estrelas','2 estrelas','3 estrelas')

/*12-Recupere as informações fundadores que tem data de falecimento não preenchidas */

select *from fundador
where data_obto = null

/*13-Recupere Igrejas que tem estilos Cadastrados */

select *from igreja
where estilo != 'null'

/*14-Recupere as Igrejas ordenadas por data de Fundção */
--crescente
select *from igreja order by data_fundacao ASC
--decrecente
select *from igreja order by data_fundacao DESC

/*15-Ordenar por data de fundção(da mais nova para a mais antiga) as igrejas recuperadas exercicio 13 */

select *from igreja
where estilo is null
order by data_fundacao desc

/*16-Ordene os Museus por numeros de salas de forma decrescente */

select *from museu order by numero_salas desc


/*
Considere o projeto de banco de dados da agência de turismo contendo as seguintes tabelas:

• CIDADE (COD_CIDADE, NOME_CIDADE, ESTADO, POPULACAO)
• PONTO_TURISTICO (COD_PT, DESCRICAO_PT, ENDERECO_PT, COD_CIDADE), onde COD_CIDADE é chave estrangeira referente a CIDADE.
• IGREJA (COD_IGREJA,DATA, ESTILO), onde COD_IGREJA é chave estrangeira referente a PONTO_TURISTICO.
• MUSEU (COD_MUSEU, DATA_FUNCACAO, N_SALAS), onde COD_MUSEU é chave estrangeira referente a PONTO_TURISTICO.
• CASA_SHOW (COD_CASA_SHOW, HORARIO_INICIO, DIA_FECHAMENTO, COD_REST),
onde COD_CASA_SHOW é chave estrangeira referente a PONTO_TURISTICO E COD_REST é chave estrangeira referente a RESTAURANTE.
• RESTAURANTE (COD_REST, NOME_REST, ENDERECO_REST, CATEGORIA, ESPECIALIDADE, PRECO, COD_HOTEL),
onde COD_CIDADE é chave estrangeira referente a CIDADE e
onde COD_CASA_SHOW é chave estrangeira referente a CASA_SHOW e
onde COD_HOTEL é chave estrangeira referente a HOTEL.
• HOTEL (COD_HOTEL, NOME_HOTEL, ENDERECO_HOTEL, CATEGORIA, COD_CIDADE, COD_REST),
onde COD_CIDADE é chave estrangeira referente a CIDADE e onde COD_REST é chave estrangeira referente a RESTAURANTE.
• QUARTO (COD_HOTEL, QUARTO, VALOR, TIPO)
• FUNDADOR (COD_FUND, NOME_FUNDADOR, NASC, OBITO, NACIONALIDADE, ATIVIDADE)
• FUNDACAO (COD_MUSEU, COD_FUND), onde COD_MUSEU é chave estrangeira referente a MUSEU e onde COD_FUND é chave estrangeira referente a FUNDADOR.

*/

/*  1. Recupere os quartos que têm valor entre 50 e 100 contendo código e nome do hotel, o número do quarto e o tipo.*/
 
  select Q.decricao, Q.valor_diaria, Q.num_quarto, Q.cod_hotel,H.nome_hotel
  from tipo_quarto Q
  inner join hotel H
  on Q.cod_hotel = H.cod_hotel
  where (valor_diaria > 50) and (valor_diaria < 100)


/*  2. Apesente as seguintes informações dos museus: código, descrição, endereço, data e número de salas. */

select P.cod_ponto_turistico,P.descricao,P.endereco, M.data_fund, M.numero_salas
from ponto_turistico P
inner join museu M
on P.cod_ponto_turistico = M.cod_museu

select *from museu

update ponto_turistico
set endereco = 'Rua Chico Alencar 100'
where cod_ponto_turistico = 20

/*  3. Recupere as igrejas localizadas em São Paulo.  */

select  P.descricao, I.data_fundacao, I.estilo, P.endereco, C.nome_cidade, C.estado
from igreja I
inner join ponto_turistico P
on I.cod_igreja = P.cod_ponto_turistico
inner join cidade C
on C.cod_cidade = P.cod_cidade
where C.nome_cidade = 'Sao Paulo'


/*4. Recupere as igrejas de São Paulo que não têm estilo preenchido. */

select  P.descricao, I.data_fundacao, P.endereco, C.nome_cidade, C.estado
from igreja I
inner join ponto_turistico P
on I.cod_igreja = P.cod_ponto_turistico
inner join cidade C
on C.cod_cidade = P.cod_cidade
where I.estilo = 'null'


/*5. Recupere museus com código, descrição, endereço e número de salas, localizados em São Paulo e que tenha sido fundados por Jose Bonifacio. */

select M.cod_museu, P.descricao,C.nome_cidade, P.endereco, M.numero_salas, X.nome
from ponto_turistico P
inner join museu M
on P.cod_ponto_turistico = M.cod_museu
inner join cidade C
on C.cod_cidade = P.cod_cidade
inner join fundacao F
on M.cod_museu = F.cod_museu
inner join fundador X
on F.cod_fundador = X.cod_fundador
where (C.nome_cidade = 'Sao Paulo') and (X.nome = 'Jose Bonifacio')