Skip to content

Instantly share code, notes, and snippets.

@marcellobenigno
Created May 5, 2025 10:28
Show Gist options
  • Save marcellobenigno/1994437e2a5951844596c0bdb7cd9afd to your computer and use it in GitHub Desktop.
Save marcellobenigno/1994437e2a5951844596c0bdb7cd9afd to your computer and use it in GitHub Desktop.
-- Resposta 1:
SELECT
p.nome AS nome_proprietario,
p.sobrenome AS sobrenome_proprietario,
ir.nome AS nome_imovel,
v.nome_variedade
FROM
proprietario p
JOIN
imovel_rural ir ON p.id = ir.proprietario_id
JOIN
area_plantada ap ON ir.id = ap.imovel_rural_id
JOIN
variedade v ON ap.variedade_id = v.id
WHERE
ap.area_ha > 100
ORDER BY
p.nome;
-- Resposta 2:
SELECT
ir.nome AS nome_imovel,
v.nome_variedade,
AVG(ap.area_ha) AS area_media_plantada
FROM
imovel_rural ir
JOIN
area_plantada ap ON ir.id = ap.imovel_rural_id
JOIN
variedade v ON ap.variedade_id = v.id
GROUP BY
ir.nome,
v.nome_variedade
ORDER BY
ir.nome,
v.nome_variedade;
-- Resposta 3:
SELECT
p.nome,
p.sobrenome
FROM
proprietario p
JOIN
imovel_rural ir ON p.id = ir.proprietario_id
GROUP BY
p.id, p.nome, p.sobrenome
ORDER BY
SUM(ir.area_ha) DESC
LIMIT 1;
-- Resposta 4:
SELECT
ir.nome AS nome_imovel,
v.nome_variedade
FROM
imovel_rural ir
LEFT JOIN
area_plantada ap ON ir.id = ap.imovel_rural_id
LEFT JOIN
variedade v ON ap.variedade_id = v.id
ORDER BY
ir.nome;
-- Resposta 5:
SELECT
p.nome AS nome_proprietaria,
p.cpf,
ir.nome AS nome_imovel
FROM
proprietario p
JOIN
imovel_rural ir ON p.id = ir.proprietario_id
WHERE
p.sexo = 'Feminino'
ORDER BY
p.nome;
-- Resposta 6:
SELECT
v.nome_variedade,
MAX(ap.data_plantio) AS data_plantio_mais_recente
FROM
variedade v
JOIN
area_plantada ap ON v.id = ap.variedade_id
GROUP BY
v.nome_variedade
ORDER BY
v.nome_variedade;
-- Resposta 7:
INSERT INTO proprietario (nome, sobrenome, cpf, sexo)
VALUES ('Ricardo', 'Santos', '12345678900', 'Masculino');
-- Resposta 8:
-- Nota: Esta consulta assume que o ID gerado para 'Ricardo Santos' na questão 7 é 5.
-- Uma abordagem mais robusta seria usar uma subconsulta:
INSERT INTO imovel_rural (nome, area_ha, proprietario_id)
VALUES ('Fazenda Nova Esperança', 1500, (SELECT id FROM proprietario WHERE cpf = '12345678900'));
-- Resposta 9:
INSERT INTO variedade (nome_variedade)
VALUES ('Soja');
-- Resposta 10:
-- Nota: Esta consulta assume que o ID gerado para 'Fazenda Nova Esperança' na questão 8 é 7
-- e o ID gerado para 'Soja' na questão 9 é 5.
-- Uma abordagem mais robusta seria usar subconsultas:
INSERT INTO area_plantada (data_plantio, area_ha, imovel_rural_id, variedade_id)
VALUES ('2024-05-10', 250.00,
(SELECT id FROM imovel_rural WHERE nome = 'Fazenda Nova Esperança'),
(SELECT id FROM variedade WHERE nome_variedade = 'Soja'));
-- Resposta 11:
UPDATE proprietario
SET sobrenome = 'Silva Santos'
WHERE id = 1;
-- Resposta 12:
UPDATE imovel_rural
SET area_ha = area_ha * 1.10
WHERE proprietario_id = 3;
-- Resposta 13:
UPDATE area_plantada
SET data_plantio = '2023-04-15'
WHERE imovel_rural_id = 1 AND variedade_id = 2;
-- Resposta 14:
DELETE FROM area_plantada
WHERE variedade_id = 3 AND data_plantio < '2023-08-01';
-- Resposta 15:
DELETE FROM area_plantada
WHERE imovel_rural_id = 6 AND variedade_id = 4;

Instruções: Escreva as consultas SQL para responder às seguintes questões ou realizar as operações solicitadas.

Utilize os dados desse arquivo para preparar o Banco de Dados:

https://gist.github.com/marcellobenigno/ec245ff68c71f325ada5cfad35ce13b8

Exercícios:

Questões de Consulta (SELECT com JOINs e Agregações):

  1. Liste o nome completo do proprietário (nome e sobrenome), o nome do imóvel rural e o nome da variedade para todas as áreas plantadas com mais de 100 hectares. Ordene o resultado pelo nome do proprietário.

  2. Calcule a área média plantada por variedade em cada imóvel rural. Exiba o nome do imóvel, o nome da variedade e a área média calculada (use AVG).

  3. Encontre o nome e sobrenome do proprietário que possui a maior área total somada de imóveis rurais. (Dica: Use SUM, GROUP BY, ORDER BY e LIMIT).

  4. Liste o nome de todos os imóveis rurais e, para aqueles que possuem áreas plantadas, liste também o nome da variedade plantada. Imóveis sem nenhum registro de plantio na tabela area_plantada também devem aparecer na lista. (Dica: Considere usar LEFT JOIN).

  5. Mostre o nome e o CPF de todos os proprietários do sexo 'Feminino' e os nomes de seus respectivos imóveis rurais.

  6. Qual a data de plantio mais recente registrada para cada variedade? Exiba o nome da variedade e a data mais recente (use MAX e GROUP BY).

Questões de Inserção (INSERT):

  1. Adicione um novo proprietário à tabela proprietario com os seguintes dados: Nome 'Ricardo', Sobrenome 'Santos', CPF '12345678900', Sexo 'Masculino'.

  2. Considerando que o proprietário 'Ricardo Santos' foi inserido na questão anterior, registre um novo imóvel rural na tabela imovel_rural chamado 'Fazenda Nova Esperança', com 1500 hectares, pertencente a ele. Você precisará obter o id do proprietário 'Ricardo Santos' para a chave estrangeira.

  3. Adicione uma nova variedade chamada 'Soja' à tabela variedade.

  4. Considerando as inserções das questões 8 e 9, registre uma nova área plantada na tabela area_plantada. Esta área deve ser de 'Soja', com 250 hectares, localizada na 'Fazenda Nova Esperança', e a data de plantio deve ser '2024-05-10'. Você precisará obter os ids correspondentes das tabelas imovel_rural e variedade.

Questões de Atualização (UPDATE):

  1. O proprietário 'João da Silva' (id=1) alterou seu sobrenome para 'Silva Santos'. Atualize o registro correspondente na tabela proprietario.

  2. Aumente em 10% a área (area_ha) de todos os imóveis rurais pertencentes à proprietária 'Maria Rodrigues' (id=3). Atualize os registros na tabela imovel_rural.

  3. A data de plantio da área de 'Milho' (variedade_id = 2) no imóvel 'Riacho Bonito' (imovel_rural_id = 1) foi registrada incorretamente. Atualize a data_plantio desse registro específico na tabela area_plantada para '2023-04-15'.

Questões de Exclusão (DELETE):

  1. Remova todos os registros da tabela area_plantada que correspondam à variedade 'Arroz' (variedade_id = 3) e que tenham sido plantados antes de '2023-08-01'.

  2. Remova o registro da tabela area_plantada referente ao plantio de 'Cana de Açúcar' (variedade_id = 4) no imóvel 'Morada da Felicidade' (imovel_rural_id = 6).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment