Você está na página 1de 5

IFPB – CAMPUS CAMPINA GRANDE.

DISCIPLINA: BANCO DE DADOS


Aluno:Aryel de Souza Silva

Atividade 10 - SQL

O DER abaixo apresenta o diagrama referente ao sistema de banco de dados de Fórmula 1.

Considerando o modelo conceitual representado pelo DER acima, implemente as consultas SQL abaixo:

1. Exiba a data da prova mais antiga e data da prova mais recente.

SELECT MIN(dt_prova) AS prova_mais_antiga, MAX(dt_prova) AS prova_mais_recente


FROM prova;
2. Exiba a quantidade de pilotos que nasceram na Alemanha.
SELECT COUNT(*) AS quantidade_pilotos_alemaes
FROM piloto
WHERE pais = (SELECT cd_pais FROM pais WHERE nm_pais = 'Alemanha');

3. Exiba a quantidade de provas realizadas no mês de novembro.


SELECT COUNT(*) AS quantidade_provas_novembro

FROM prova

WHERE MONTH(dt_prova) = 11;

4. Listar o nome de cada equipe seguida do nome do país que ela representa.

SELECT e.nm_eq AS equipe, p.nm_pais AS pais

FROM equipe e

INNER JOIN pais p ON e.pais = p.cd_pais;

5. Listar o nome de cada circuito seguido do nome do país onde é localizado o circuito

SELECT c.nm_cir AS circuito, p.nm_pais AS pais

FROM circuito c

INNER JOIN pais p ON c.pais = p.cd_pais;

6. Exiba a data da prova do GP da Holanda.

SELECT dt_prova

FROM prova

WHERE cd_pro = (SELECT cd_pro FROM circuito WHERE nm_cir =

'GP da Holanda');

7. Exiba o nome dos circuitos que tiveram provas realizadas no mês de dezembro.
SELECT c.nm_cir AS circuito

FROM prova p

INNER JOIN circuito c ON p.circuito = c.cd_cir


WHERE MONTH(p.dt_prova) = 12;

8. Listar o calendário da temporada 2021 com o nome de cada circuito seguido do nome país e da data da prova.

SELECT c.nm_cir AS circuito, p.nm_pais AS pais, p.dt_prova

FROM prova p

INNER JOIN circuito c ON p.circuito = c.cd_cir

WHERE YEAR(p.dt_prova) = 2021;

9. Listar a quantidade de vitórias de Lewis Hamilton.

SELECT COUNT(*) AS quantidade_vitorias

FROM piloto_pos pp

INNER JOIN piloto p ON pp.piloto = p.cd_pil

WHERE p.nm_pil = 'Lewis Hamilton' AND pp.posicao = 1;

10. Listar o nome do piloto quantidade de vitórias de cada piloto que venceu pelo menos uma prova.

SELECT p.nm_pil AS piloto, COUNT(*) AS quantidade_vitorias

FROM piloto_pos pp

INNER JOIN piloto p ON pp.piloto = p.cd_pil

WHERE pp.posicao = 1

GROUP BY p.cd_pil;

11. Listar o pódio do GP Brasil, com a posição e o nome do piloto.

SELECT pp.posicao, p.nm_pil AS piloto


FROM piloto_pos pp
INNER JOIN piloto p ON pp.piloto = p.cd_pil
WHERE pp.prova = (SELECT cd_pro FROM prova WHERE nm_prova = 'GP do Brasil');

12. Listar o nome de cada equipe seguida do nome do país que ela representa, mas listar também os demais
países que não tem representação.

SELECT e.nm_eq AS equipe, COALESCE(p.nm_pais, 'Sem Representação') AS pais


FROM equipe e

LEFT JOIN pais p ON e.pais = p.cd_pais;

13. Listar o nome dos pilotos que obtiveram 1º lugar em alguma prova (posição=1). Não é necessário repetir o
nome do piloto caso ele tenha obtido o 1º lugar em mais de uma prova.

SELECT DISTINCT p.nm_pil AS piloto

FROM piloto_pos pp

INNER JOIN piloto p ON pp.piloto = p.cd_pil

WHERE pp.posicao = 1;

14. Listar os nomes dos pilotos vencedores (obtiveram 1º lugar em alguma prova) de prova e suas respectivas
equipes.

SELECT p.nm_pil AS piloto, e.nm_eq AS equipe

FROM piloto_pos pp

INNER JOIN piloto p ON pp.piloto = p.cd_pil

INNER JOIN equipe e ON p.equipe = e.cd_eq

WHERE pp.posicao = 1;

15. Listar o pódio de cada prova, com a posição, o nome do piloto e o nome do circuito (evento). O pódio é
composta pelos pilotos que obtiveram o primeiro, segundo e terceiro lugar.

SELECT pp.prova, pp.posicao, p.nm_pil AS piloto, c.nm_cir AS circuito

FROM piloto_pos pp

INNER JOIN piloto p ON pp.piloto = p.cd_pil

INNER JOIN prova pr ON pp.prova = pr.cd_pro

INNER JOIN circuito c ON pr.circuito = c.cd_cir

ORDER BY pp.prova, pp.posicao;

16. Listar os nomes dos pilotos vencedores de prova, nome de sua equipe e a quantidade de vitórias de cada
piloto.

SELECT p.nm_pil AS piloto, e.nm_eq AS equipe, COUNT(*) AS quantidade_vitorias

FROM piloto_pos pp
INNER JOIN piloto p ON pp.piloto = p.cd_pil

INNER JOIN equipe e ON p.equipe = e.cd_eq

WHERE pp.posicao = 1

GROUP BY p.cd_pil;

17. Listar os nomes dos pilotos que conseguiram mais de duas vitórias.

SELECT p.nm_pil AS piloto, COUNT(*) AS quantidade_vitorias

FROM piloto_pos pp

INNER JOIN piloto p ON pp.piloto = p.cd_pil

WHERE pp.posicao = 1

GROUP BY p.cd_pil

HAVING COUNT(*) > 2;

18. Exibir o nome dos pilotos que nunca venceram prova.

SELECT p.nm_pil AS piloto

FROM piloto p

WHERE p.cd_pil NOT IN (SELECT piloto FROM piloto_pos WHERE posicao = 1);

Você também pode gostar