SóProvas


ID
1387777
Banca
CESGRANRIO
Órgão
LIQUIGÁS
Ano
2013
Provas
Disciplina
Banco de Dados
Assuntos

As tabelas a seguir pertencem ao esquema de um banco de dados de atletas de salto em distância.

CREATE TABLE ATLETA (
   COD NUMBER(5) NOT NULL,
   NOME VARCHAR2(50) NOT NULL,
   NUM_INSCR NUMBER(7),
   TELEFONE VARCHAR2(8) NOT NULL,
   CONSTRAINT ATLETA_PK PRIMARY KEY (COD))
CREATE TABLE PROVA (
   COD_ATL NUMBER(5) NOT NULL,
   COD_PROVA NUMBER(5) NOT NULL,
   MARCA NUMBER(5,2),
   CONSTRAINT PROVA_PK PRIMARY KEY (COD_ATL,COD_PROVA),
   CONSTRAINT PROVA_FK FOREIGN KEY (COD_ATL) REFERENCES
         ATLETA(COD))

Observação:
• A coluna MARCA, localizada na tabela PROVA, contém a distância, em metros, saltada por um atleta em uma prova.

O técnico da equipe de saltos solicitou que fosse elaborada uma consulta SQL que realize o seguinte:
• Exibir, para cada atleta, o nome e a quantidade de saltos cujas marcas foram abaixo de 7,5 m.
• A consulta deve exibir uma linha para cada atleta.
• Devem ser exibidos apenas os nomes dos atletas que realizaram pelo menos um salto abaixo de 7,5 m.

Qual consulta realiza o que foi pedido?

Alternativas
Comentários
  • Questão tranquila que requer o entendimento da junção interna e do GROUP BY. Primeiro, precisamos fazer a associação entre a tabela Atleta (para retornar seu nome) e a tabela Prova (para obter as marcas do atleta). Isso será feito pela seguinte junção:

    _SELECT ...

    _FROM Atleta A, Prova P

    _WHERE A.cod = P.cod_atl

    Assim, cada registro dessa tabela corresponde a uma participação de uma atleta em uma prova, que possui uma marca. Com isso em mente, precisamos limitar os registros àqueles cujo valor da marca é menor que 7.5. Então adicionamos uma cláusula no WHERE, da seguinte maneira:

    _SELECT...

    _FROM Atleta A, Prova P

    _WHERE A.cod = P.cod_atl AND P.marca < 7.5

    Por fim, queremos que sejam retornados os valores de A.Nome (nomes dos atletas) e a quantidade de marcas de cada atleta. Para isso, podemos utilizar o GROUP BY para agrupar os registros por atleta, e o COUNT para retornar a quantidade de marcas associadas a cada um. Vai ficar assim:

    _SELECT A.nome, COUNT(*)

    _FROM Atleta A, Prova P

    _WHERE A.cod = P.cod_atl AND P.marca < 7.5

    _GROUP BY A.nome

    Resposta letra A!