--a) Criação das tabelas Candidato, Votacao e Zona_Se
--cao, especificando chave primária e
--chaves estrangeiras;
-- Já respondido
--b) Alteração da estrutura da tabela Votacao, adicio
--nando um atributo data_votacao;
alter table votacao
add column data_votacao date;
--c) Alteração da estrutura da tabela Candidato, remo
--vendo a chave estrangeira com a
--tabela Partido;
alter table candidato
drop constraint fk_candidato_partido
--d) Criar um índice “não-clustered” na tabela Candid
--ato, com os atributos cod_cargo e
--cod_partido;
create index on candidato (cod_cargo, cod_partido);
/*e) Inserir um registro na tabela Votacao.
(qtd_votos = 1000, num_secao = 10, num_zona = 5,
num_candidato = 555);*/
insert into votacao
(qtd_votos, num_secao, num_zona, num_candidato)
values (1000,10,5,555);
/*f) Inserir um registro na tabela Zona_Secao (qtd_el
eitores = 300, nome_zona_secao =
“Zona Teste”, num_zona = 7, num_secao = 99).*/
insert into zona_secao
(qtd_eleitores, nome_zona_secao, num_zona, num_secao)
values
(300, 'zona_teste', 7,99);
/*g) Alterar a quantidade de votos, multiplicando por
2, para os candidatos a governador
(código do cargo = 1) e do Partido Democrático (cód
igo de partido = 5);*/
select *
from votacao as v, candidato as c
where v.num_candidato = c.num_candidato
and cod_cargo = 1 and cod_partido = 5
update votacao as v
set qtd_votos = qtd_votos * 2
from candidato as c
where v.num_candidato = c.num_candidato
and cod_cargo = 1 and cod_partido = 5
/* h) Alterar a quantidade de eleitores, somando 100,
para as zonas/seções onde ocorreu
votação para candidatos ao Senado (código do cargo
= 2);
*/
select *
from zona_secao as z, votacao as v,
candidato as c, cargo as g
where z.num_zona = v.num_zona and
z.num_secao = v.num_secao and
v.num_candidato = c.num_candidato and
c.cod_cargo = g.cod_cargo and
g.cod_cargo = 2
update zona_secao as z
set qtd_eleitores = qtd_eleitores + 100
from votacao as v,
candidato as c, cargo as g
where z.num_zona = v.num_zona and
z.num_secao = v.num_secao and
v.num_candidato = c.num_candidato and
c.cod_cargo = g.cod_cargo and
g.cod_cargo = 2
--i) Apagar todos os cargos que não possuem candidatos;
select *
from cargo as c
where not exists
(select * from candidato as cn
where c.cod_cargo = cn.cod_cargo)
begin transaction
delete
from cargo as c
where not exists
(select * from candidato as cn
where c.cod_cargo = cn.cod_cargo)
rollback
/*j) Apagar as zonas/seções que possuam menos de 1.00
0 eleitores e que o nome comecem com a letra “A”;
*/
select *
from zona_secao as z
where z.qtd_eleitores < 1000 and
nome_zona_secao like 'A%'
delete
from zona_secao as z
where z.qtd_eleitores < 1000 and
nome_zona_secao like 'A%'
/*k) Selecionar nome do partido, nome do candidato e
nome do cargo, em ordem alfabética
do nome do partido; */
select nome_partido, nome_candidato, nome_cargo
from partido as p inner join candidato as c
on (p.cod_partido = c.cod_partido)
inner join cargo as g
on (c.cod_cargo = g.cod_cargo)
order by nome_partido