GABARITO - Problema de modelagem 2

Propaganda
Modele no TOAD e resolva as seguintes consultas
Foi criado um sistema de compra de ingressos em teatros. São armazenados o nome, valor do
ingresso e a data em que o espetaculo acontecerá em determinado teatro. Um cliente que queira
comprar um ingresso, deve fornecer o seu nome e telefone de contato. O ingresso está associado a
uma determinada cadeira do teatro, válida apenas para aquele espetáculo. Ao comprar o ingresso, a
cadeira deve ser marcada como ocupada.
Realizar as seguintes consultas.
•
Quais as cadeiras vazias para os espetáculos que começam com a letra 'A',
•
Qual cliente comprou mais ingressos.
•
Que cliente comprou ingressos para cadeiras pares ?
•
Que espetáculos possuem mais cadeiras ocupadas?
/*
Created
Modified
Project
Model
Company
Author
Version
Database
*/
13/10/2016
13/10/2016
PostgreSQL 8.1
/* Create Tables */
Create table cliente
(
cod_cliente Char(20) NOT NULL,
nome_cliente Varchar(50),
telefone_cliente Varchar(10),
primary key (cod_cliente)
) Without Oids;
Create table espetaculo
(
cod_espetaculo Integer NOT NULL,
nome_espetaculo Varchar(50),
valor_espetaculo Double precision,
data_espetaculo Date,
primary key (cod_espetaculo)
) Without Oids;
Create table cadeira
(
cod_cadeira Integer NOT NULL,
fila_cadeira Char(1),
num_cadeira Integer,
primary key (cod_cadeira)
) Without Oids;
Create table ingresso
(
cod_espetaculo Integer NOT NULL,
cod_cliente Char(20),
cod_cadeira Integer NOT NULL,
ocupado Boolean,
primary key (cod_espetaculo,cod_cadeira)
) Without Oids;
/* Create Foreign Keys */
Alter table ingresso add foreign key (cod_cliente) references cliente (cod_cliente) on update
restrict on delete restrict;
Alter table ingresso add foreign key (cod_espetaculo) references espetaculo (cod_espetaculo)
on update restrict on delete restrict;
Alter table ingresso add foreign key (cod_cadeira) references cadeira (cod_cadeira) on update
restrict on delete restrict;
insert into cliente (cod_cliente, nome_cliente,
telefone_cliente) values
(1, 'Grinaldo','3350-8787'),
(2,'Emanuel','2345-1213'),
(3, 'Isis', '7654-6565');
insert into espetaculo (cod_espetaculo,
nome_espetaculo, valor_espetaculo,
data_espetaculo)
values
(1,'Peppa', 40.00, '2016/10/01'),
(2,'Patati Patata', 60.00, '2016/10/06'),
(3,'Galinha Pintadinha', 100.00, '2016/10/10');
insert into cadeira (cod_cadeira, fila_cadeira,
num_cadeira)
values
(1,'A',1),
(2,'B',1),
(3,'C',1);
insert into ingresso
select cod_espetaculo, null as cod_cliente, cod_cadeira, 'false'
from espetaculo, cadeira
update ingresso
set cod_cliente = 3, ocupado = 'true'
where cod_espetaculo = 3 and cod_cadeira=3;
select s.cod_cadeira
from espetaculo as e inner join ingresso as s
on (e.cod_espetaculo = s.cod_espetaculo)
where s.ocupado = 'true'
and e.nome_espetaculo like 'G%'
select c.nome_cliente, count (*) as qtde
from cliente as c inner join ingresso as i
on (c.cod_cliente = i.cod_cliente)
group by c.cod_cliente
having count (*) =
(select max (qtde)
from
(select c.nome_cliente, count (*) as qtde
from cliente as c inner join ingresso as i
on (c.cod_cliente = i.cod_cliente)
group by c.cod_cliente
order by qtde desc) as tabela)
select nome_espetaculo, count (*) as qtde
from espetaculo as e inner join ingresso as i
on (e.cod_espetaculo = i.cod_espetaculo)
where i.ocupado = 'true'
group by e.cod_espetaculo
select c.nome_cliente, d.num_cadeira
from cliente as c inner join ingresso as i
on (c.cod_cliente = i.cod_cliente)
inner join cadeira as d
on (i.cod_cadeira = d.cod_cadeira)
where d.num_cadeira % 2 = 1;
select nome_espetaculo, count (*) as qtde
from espetaculo as e inner join ingresso as i
on (e.cod_espetaculo = i.cod_espetaculo)
where i.ocupado = 'true'
group by e.cod_espetaculo
having count (*) =
(select max (qtde)
from
(select nome_espetaculo, count (*) as qtde
from espetaculo as e inner join ingresso as i
on (e.cod_espetaculo = i.cod_espetaculo)
where i.ocupado = 'true'
group by e.cod_espetaculo) as tabela)
Download