Modele no TOAD e resolva as seguintes consultas

Foi criado um sistema de empréstimo de DVD´s. São cadastrados os filmes e gênero de cada um deles. O cliente para realizar um empréstimo, fornece o nome e seu endereço. O cliente pode locar mais de um filme e cada locação gera uma ficha de locação com dados do cliente, data de locação e dia de entrega do filme (2 dias após a locação). Quando o cliente devolve o DVD, é sinalizado no sistema que ele está disponível.

Realizar as seguintes consultas.

 •	Quais os DVD´s disponíveis para locação e qual o filme associado?

 •	Qual cliente locou mais DVD´s?

 •	Que cliente está em débito com a locadora? E qual o filme a devolver?

 •	Que gênero locou mais DVD´s?

/*
Created		15/10/2016
Modified		15/10/2016
Project		
Model			
Company		
Author		
Version		
Database		PostgreSQL 8.1 
*/

/* Create Tables */

Create table cliente
(
	cod_cliente Integer NOT NULL,
	nome Varchar(50),
	endereco Varchar(50),
 primary key (cod_cliente)
) Without Oids;

Create table filme
(
	cod_filme Integer NOT NULL,
	nome_filme Varchar(50),
	cod_genero Integer NOT NULL,
 primary key (cod_filme)
) Without Oids;

Create table genero
(
	cod_genero Integer NOT NULL,
	nome_genero Varchar(20),
 primary key (cod_genero)
) Without Oids;

Create table DVD
(
	cod_dvd Integer NOT NULL,
	cod_filme Integer NOT NULL,
	disponivel Boolean,
 primary key (cod_dvd)
) Without Oids;

Create table locacao
(
	cod_locacao Integer NOT NULL,
	data_retirada Date,
	data_entrega Date,
	cod_cliente Integer NOT NULL,
 primary key (cod_locacao)
) Without Oids;

Create table lista
(
	cod_dvd Integer NOT NULL,
	cod_locacao Integer NOT NULL,
 primary key (cod_dvd,cod_locacao)
) Without Oids;

/* Create Foreign Keys */

Alter table locacao add  foreign key (cod_cliente) references cliente (cod_cliente) on update restrict on delete restrict;

Alter table DVD add  foreign key (cod_filme) references filme (cod_filme) on update restrict on delete restrict;

Alter table filme add  foreign key (cod_genero) references genero (cod_genero) on update restrict on delete restrict;

Alter table lista add  foreign key (cod_dvd) references DVD (cod_dvd) on update restrict on delete restrict;

Alter table lista add  foreign key (cod_locacao) references locacao (cod_locacao) on update restrict on delete restrict;

-------------------------
select d.cod_dvd, f.nome_filme
from dvd as d inner join filme as f
   on (d.cod_filme = f.cod_filme)
where d.disponivel = 'true'

select c.nome, count (*) as qtde
from cliente as c inner join locacao as l
     on (c.cod_cliente = l.cod_cliente)
     inner join lista as li
      on (l.cod_locacao = li.cod_locacao)
group by c.nome
having count (*) =
(
select max (qtde)
from
(select c.nome, count (*) as qtde
from cliente as c inner join locacao as l
     on (c.cod_cliente = l.cod_cliente)
     inner join lista as li
      on (l.cod_locacao = li.cod_locacao)
group by c.nome) as tabela
)

select c.nome, f.nome_filme
from locacao as l inner join cliente as c
     on (l.cod_cliente = c.cod_cliente)
     inner join lista as li
     on (l.cod_locacao = li.cod_locacao)
     inner join dvd as d
        on  (li.cod_dvd = d.cod_dvd)
     inner join filme as f
       on (d.cod_filme = f.cod_filme)
where l.data_entrega < current_date

select g.cod_genero, count (*) as qtde
from genero as g inner join filme as f
    on (g.cod_genero = f.cod_genero)
    inner join dvd as d
      on (f.cod_filme = d.cod_filme)
    inner join lista as l
      on (d.cod_dvd = l.cod_dvd)
group by g.cod_genero
having count (*) = 
(
select max (qtde)
from
(select g.cod_genero, count (*) as qtde
from genero as g inner join filme as f
    on (g.cod_genero = f.cod_genero)
    inner join dvd as d
      on (f.cod_filme = d.cod_filme)
    inner join lista as l
      on (d.cod_dvd = l.cod_dvd)
group by g.cod_genero) as tabela)