Amundsen e equipe fazendo medições para confirmar que chegaram ao local correto. |
Totalmente fora do assunto deste blog, mas podemos dizer que os protagonistas desta aventura são alguns dos nossos heróis preferidos. Pois amanhã, dia 14 de Dezembro de 2011, completa-se 100 anos da chegada de Amundsen ao Polo Sul!
Amundsen pesquisou e experimentou alternativas para chegar ao Polo Sul. Escolheu trenós puxados por cachorros. Toda equipe e alguns cachorros sobreviveram o percurso completo, ida e volta.
Seu concorrente, Scott, acreditava que com esforço e coragem superaria qualquer obstáculo. Chegou ao Polo Sul na metade de Janeiro, apenas para encontrar a bandeira da Noruega marcando o ponto exato. Não retornou a tempo para o acampamento e morreu congelado.
Portanto, pode-se colocar muitas horas de esforço na solução de um problema, mas é fundamental ter conhecimento, explorar alternativas e escolher aquelas que garantem maior chance de sucesso. Inclusive em problemas de BD.
Para quem não tem ideia do que estes caras passaram reforço a recomendação do livro: A Incrível Viagem de Shackleton.
ResponderExcluirCesar Blumm
1. Acrescente a essa script, após as operações de inserção de registos, as instruções (SELECT) que executam as seguintes queries:
ResponderExcluira. Quais os clientes (id_cliente, nome) não assinam o canal "RTP", id_canal = 5?
select id_cliente, nome
from clientes
where id_cliente not in
( select id_cliente
from assinaturas
where id_canal = 5);
b. Que canais (id_canal, canal) não têm qualquer assinatura de clientes?
select id_canal, canal
from canais
where not exists
( select *
from assinaturas
where assinaturas.id_canal = canais.id_canal);
ou
select id_canal, canal
from canais
where id_canal not in
( select id_canal
from assinaturas);
c. Qual o cliente ou clientes (nome) com a assinatura mais antiga?
select nome
from clientes
where id_cliente in
( select id_cliente
from assinaturas
where data_assinatura =
( select min(data_assinatura)
from assinaturas));
d. Quais os clientes (id_cliente, nome) que assinam pelo menos os mesmos canais que o cliente "Joaquim Lopes", com id_cliente = 1?
select id_cliente, nome
from clientes
where id_cliente <> 1 and not exists
( select id_canal
from assinaturas
where id_cliente = 1
and id_canal not in
( select id_canal
from assinaturas
where id_cliente = clientes.id_cliente));
e. Que canais (canal) são assinados por todos os clientes?
select id_canal, canal
from canais
where not exists
( select id_cliente
from clientes
where id_cliente not in
( select id_cliente
from assinaturas
where id_canal = canais.id_canal));
ou numa abordagem distinta:
select id_canal, canal
from canais
where (
select count(*) from clientes) =
( select count(*) from assinaturas where id_canal = canais.id_canal ) ;
2. Views
ResponderExcluira. Crie uma view que forme uma tabela com o número de clientes que assinam cada canal. Essa view deverá apresentar os campos id_canal, canal, num_assinantes. Exemplo de um registo seria (1, "SportTV", 3), que indica que o canal "SportTV" tem 3 assinantes. Acrescente o comando que cria a view à script que manipulou no exercício anterior.
create view total_assinaturas as
select canais.id_canal, canal, count(*)as total_assinantes
from canais, assinaturas
where canais.id_canal = assinaturas.id_canal
group by canais.id_canal;
b. Utilizando a view que criou, acrescente à script uma query que mostre o canal (canal) com mais assinaturas.
select canal
from total_assinaturas
where total_assinantes =
( select max(total_assinantes)
from total_assinaturas);
3. Analise as expressões álgebricas indicadas e transcreva para este enunciado a pergunta que está subjacente a cada expressão:
c. T = Π
id_cliente, nome (σ cidade = "Porto" (Clientes))
R = Π id_cliente, nome (Clientes∞Assinaturas∞σ tipo = "Filmes" (Canais))
S = R T
R: Quais os clientes (id_cliente, nome) que são ou moram no Porto e assinam canais do tipo "Filmes"?
a. Canais – Canais ∞ (Π id_canal (σ localidade = "Braga" ( Clientes ) ∞Assinaturas ) )
R: Quais os canais ou qual a lista de canais que não são subscritas por clientes que são ou moram em Braga
create table programacao
( id_programa int,
titulo varchar(100),
data_emissao date,
hora_emissao time,
duracao int,
id_canal int,
constraint chave_pk_programacao primary key (id_programa ),
constraint chave_fk_programacao_canais foreign key (id_canal) references canais(id_canal)
) engine = INNODB;
insert programacao (id_programa, titulo, data_emissao, hora_emissao, duracao, id_canal) values (1, "O Império Romano: Rebelião e Traição", "2011-01-12", "17:00", 60, 6);
insert programacao (id_programa, titulo, data_emissao, hora_emissao, duracao, id_canal) values (2, "Objectos Perdidos: Comida Rápida", "2011-01-12", "18:00", 30, 6);
insert programacao (id_programa, titulo, data_emissao, hora_emissao, duracao, id_canal) values (3, "A Queda Do Muro De Berlim - Ep. 1", "2011-01-12", "18:30", 60, 6);
insert programacao (id_programa, titulo, data_emissao, hora_emissao, duracao, id_canal) values (4, "Telejornal", "2011-01-12", "13:00", 60, 5);
insert programacao (id_programa, titulo, data_emissao, hora_emissao, duracao, id_canal) values (5, "Rock Temple", "2011-01-12", "17:00", 60, 2);
----
b.
create table programacao
( id_programa int,
titulo varchar(100),
data_emissao date,
hora_emissao time,
duracao int,
id_canal int,
constraint chave_pk_programacao primary key (id_programa ),
constraint chave_fk_programacao_canais foreign key (id_canal) references canais(id_canal)
) engine = INNODB;
insert programacao (id_programa, titulo, data_emissao, hora_emissao, duracao, id_canal) values (1, "O Império Romano: Rebelião e Traição", "2011-01-12", "17:00", 60, 6);
insert programacao (id_programa, titulo, data_emissao, hora_emissao, duracao, id_canal) values (2, "Objectos Perdidos: Comida Rápida", "2011-01-12", "18:00", 30, 6);
insert programacao (id_programa, titulo, data_emissao, hora_emissao, duracao, id_canal) values (3, "A Queda Do Muro De Berlim - Ep. 1", "2011-01-12", "18:30", 60, 6);
insert programacao (id_programa, titulo, data_emissao, hora_emissao, duracao, id_canal) values (4, "Telejornal", "2011-01-12", "13:00", 60, 5);
insert programacao (id_programa, titulo, data_emissao, hora_emissao, duracao, id_canal) values (5, "Rock Temple", "2011-01-12", "17:00", 60, 2);