SóProvas


ID
3068224
Banca
FCC
Órgão
Prefeitura de Manaus - AM
Ano
2019
Provas
Disciplina
Banco de Dados
Assuntos

Considere a existência de duas tabelas relacionadas em um banco de dados: Pedidos e Transportador. A tabela Pedidos possui 2 campos numéricos: PedidoID (chave primária) e TransportadorID (chave estrangeira). A tabela Transportador possui o campo TransportadorID (chave primária, numérico) e TransportadorNome (cadeia de caracteres). Para listar o número de Pedidos de cada Transportador utiliza-se a instrução SQL:

Alternativas
Comentários
  • É impressão minha ou as letras D e E estão iguais?

  • Muda,ao invés de ser ORDER BY,fica GROUP BY.

  • Ao meu ver, há uma inconsistência na questão, pois ela é orientada ao transportador, ou seja, deseja-se saber o número de pedidos de cada transportador e não o número de transportadores de cada pedido. Logo, posso ter transportador sem pedido.

    Ou seja, na letra E, deveria ter um RIGHT JOIN para o transportador

  • Pode vir Pedido sem transportador nisso ai hein

    Quer estudar quanto pra passar?

  • Concordo com as casas bahia aí.

    Vem sim pedido sem transportadora (testei).

    Por algum tempo fiquei na dúvida da letra C com a letra E.

    Se não fosse a "," depois de "Pedido," a letra C seria a mais certa que a letra E pelo motivo dela não trazer pedido sem transportadora.

  • A) "SELECT Transportador.TransportadorNome, COUNT(Pedidos.PedidoID) AS “NumeroPedidos” FROM Pedidos RIGHT JOIN FROM Pedidos ON Pedidos.TransportadorID = Transportador.TransportadorID ORDER BY TransportadorNome"

     

    Possui QUATRO erros:

    i) está tentando fazer JOIN com a mesma tabela (Pedidos);

    ii) RIGHT JOIN FROM não é a sintaxe correta. Depois do JOIN só deveria ter o nome da tabela;

    iii) termina com ORDER BY, e a questão quer que os nomes sejam agrupados, não ordenados;

    iv) o uso do COUNT sem o GROUP BY daria um erro nesse caso, pois o campo TransportadorNome não é agregado.

     

     

    B) "SELECT Transportador.TransportadorNome, COUNT(Pedidos.PedidoID) AS NumeroPedidos FROM Pedidos FULL JOIN Transportador WHERE Pedidos.TransportadorID = Transportador.TransportadorID GROUP BY TransportadorNome"

    Deveria ter um ON onde tem o WHERE.

     

    C) "SELECT Transportador.TransportadorNome, COUNT(Pedidos.PedidoID) AS “NumeroPedidos” FROM Pedidos, Transportador INNER JOIN ON Pedidos.TransportadorID = Transportador.TransportadorID GROUP BY TransportadorNome"

    A sintaxe também está incorreta. Uma das tabelas deveria estar depois do INNER JOIN. (por ex: FROM Pedidos INNER JOIN Transportador ON).

     

    D) "SELECT Transportador.TransportadorNome, COUNT(Pedidos.PedidoID) AS NumeroPedidos FROM Pedidos LEFT JOIN Transportador ON Pedidos.TransportadorID = Transportador.TransportadorID ORDER BY TransportadorNome"

    Os mesmos erros iii) e iv) da letra A).

     

    E) "SELECT Transportador.TransportadorNome, COUNT(Pedidos.PedidoID) AS NumeroPedidos FROM Pedidos LEFT JOIN Transportador ON Pedidos.TransportadorID = Transportador.TransportadorID GROUP BY TransportadorNome"

    É a única que não tem nenhum erro de sintaxe.

  • O item é confuso pois não deixa claro qual é o tipo de junção necessária. A ideia é listar o número de Pedidos associados a cada Transportador. Não há menção se os Transportadores que não têm nenhum pedido associado deveriam ser retornados ou não. Assim, penso que poderia ser usado qualquer tipo de junção.

    Vamos avaliar cada item individualmente, procurando por erros de sintaxe:

    a) O termo FROM está incorreto, a junção está sendo realizada com a própria tabela PEDIDOS e não há uma cláusula GROUP BY.

    b) O termo ON foi trocado por WHERE.

    c) O comando mistura as duas sintaxes da junção interna, separando as tabelas por vírgula ao mesmo tempo que usa INNER JOIN ... ON. Deveria ser escolhida somente uma das duas.

    d) A alternativa troca o GROUP BY por ORDER BY.

    e) Essa é a resposta correta!

  • Faria mais sentido um INNER JOIN na (E)