SóProvas


ID
2376877
Banca
CESPE / CEBRASPE
Órgão
TRE-PE
Ano
2017
Provas
Disciplina
Banco de Dados
Assuntos

Tabela 3A6AAA
dados da tabela:
ID; nome; idtipo; preco
25; creme; 3; 11,50
31; arroz; 4; 12,50
34; leite; 1; 14,00
42; sabão; 5; 11,00
46; carne; 1; 12,75
48; shampoo; 5; 12,30
58; azeite; 1; 13,25

Considerando-se os campos e dados contidos na tabela 3A6AAA, denominada tbproduto, é correto afirmar que o comando SQL.

Alternativas
Comentários
  • Questão difícil, pensei que o having exigisse uma função de grupo mas não, comando  realmente funciona  (pelo menos no Oracle 11).

    SELECT sum(preco)
    FROM tblproduto
    WHERE idtipo=5
    GROUP BY preco
    HAVING preco < 14

    com os dados retorna duas linhas:

    SUM(PRECO)

    11

    12,3

     

     

  • A questão estava assim mesmo ou está mal digitada?

  • a)SELECT MAX(preco) FROM tbproduto WHERE idtipo

    igual a 5 ponto e vírgula

    retornará 14,00 como resultado. #resultado 12,30

    b)SELECT sum(preco) FROM tbproduto WHERE idtipo

    igual a 5

    GROUP BY preco

    HAVING preco menor que 14 ponto e vírgula

    retornará dois registros # registros: 12,30 e 11; Questão correta

    c)SELECT sum(preco) as total FROM tbproduto

    WHERE idtipo in (1,5) and nome like abre aspa

    simples porcentagem e fecha aspa simples group

    by idtipo having sum(preco) maior que 13 ponto

    e vírgula

    retornará 26,00 como resultado. #total = 30

    d)SELECT nome FROM tbproduto WHERE idtipo not in

    (5) and preco maior que (select min(preco)

    from tbproduto where idtipo igual a 1) ponto

    e vírgula

    retornará apenas leite como resultado. # leite e azeite

    e)SELECT asterisco FROM tb produto WHERE preco

    BETWEEN 10 AND 12 ponto e vírgula

    retornará cinco registros.#(25, creme, 3, 11,50; 42,sabão,5,11,00)

  • a) SELECT MAX(preco) FROM tbproduto WHERE idtipo = 5;
    (retornará 14,00 como resultado).
    b) SELECT sum(preco) FROM tbproduto WHERE idtipo = 5 GROUP BY preco HAVING preco < 14;
    (retornará dois registros).
    c) SELECT sum(preco) as total FROM tbproduto WHERE idtipo in (1,5) and nome like '%' group by idtipo having sum(preco) > 13;
    (retornará 26,00 como resultado).
    d) SELECT nome FROM tbproduto WHERE idtipo not in (5) and preco > (select min(preco) from tbproduto where idtipo = 1);
    (retornará apenas leite como resultado).
    e) SELECT * FROM tb produto WHERE preco BETWEEN 10 AND 12;
    (retornará cinco registros).

  • Estava assim. Tomara que não seja uma nova moda, pq pqp. A falta de criatividade está de mais.

  • É possível entender a Questão, mas nenhum banco de dados reconhece as instruções "igual a " ou "ponto e virgula".

  • Vamos comentar cada uma das alternativas. Na letra A, o retorno seria 11,00 e não 14,00, pois o resultado intermediário é filtrado pelo idtipo=5. A alternativa B é a nossa resposta.

    A alternativa C vai somar os preços de todos os produtos que terminam com a letra e (nome like “%e”), totalizando, 51,50. Já a letra D vai retornar os nomes leite e azeite, que são todos os elementos que não pertencem ao grupo 5 e os respectivos preços são maiores que 12,75 (menor preço do tipo 1). Por fim, a alternativa E retornará apenas 2 registros.

  • A questão não estava assim. Podem checar no site da CESPE.

  • Tem que ser muito estúpido pra escrever uma questão de SQL assim... pqp

  • Erro do QC na transcrição, na prova ta normal

  • Como assim retornam dois registros? Vai retornar um registro que seria a SOMA das duas ocorrências da consulta SQL (preço do shampoo + preço do arroz)

  • A letra B deveria retornar o valor da soma dos dois registros e não os dois registros, Se você rodar esse comando você terá apenas um valor que é o da soma dos preços que satisfazem as condições.

    SELECT sum(preco) FROM tbproduto WHERE

    idtipo=5

    GROUP BY preco

    HAVING preco < 14;

    retornará dois registros

  • O item correto é a letra B. A consulta retorna dois registros porque há uma cláusula GROUP BY sobre o campo preço. A cláusula GROUP BY agrupa todos os registros retornados pela consulta que tenham o mesmo valor para os campos que estão sendo agrupados. Nesse caso, como os dois registros envolvidos na consulta (aqueles de idtipo = 5, shampoo e sabão) têm valores diferentes, o resultado é composto por dois grupos - um dos registros com preço igual a 11,00 e outro com os registros de preço igual a 12,30. Como só existe um registro em cada um dos grupos, a função de agregação SUM acaba não servindo para nada nesse caso. O resultado seria o mesmo sem ela. É uma consulta um pouco atípica por utilizar agrupamento e função de agregação sobre o mesmo campo, mas a resposta está correta.

  • a) Errada. Este comando procura pelo maior preço, indicado por MAX(preco), dentro da tabela tbproduto onde o idtipo tem o valor 5. Ao procurar todos os registros cujo idtipo é igual a 5, encontramos 2 registros. Um deles é o sabão e tem o preço de 11,00 e o outro é o shampoo, cujo preço é de 12,30. Queremos o que tem o maior preço de todos. Logo a resposta é 12,30.

     

    c) Certa. O comando utilizado na assertiva B é interessante.

    Mas, cuidado para não confundir o comando da alternativa com o comando a seguir: “SELECT sum(preco) FROM tbproduto WHERE idtipo=5”. Este último comando mostra a soma de todos os preços dos registros cujo idtipo seja 5.

    Mas o comando da alternativa não é exatamente isso. Ele tem a cláusula “GROUP BY” seguido do “HAVING”.

    O “GROUP BY” vai fazer com que o comando mostre todos os preços antes de fazer a soma. Neste caso, ele irá mostrar os valores 11,00 e 12,30. Estes valores são menores do que 14, o que satisfaz a condição do HAVING.

     

    c) Errada. Quando colocamos a condição “nome like ‘%e’”, significa que o campo nome pode dar “match” com qualquer sequência de caracteres, seguida do caractere e. O % é um caractere coringa e significa uma sequência qualquer de caractere. Outro exemplo seria “nome like ‘%Oliveira’”. Esta condição indica que qualquer sequência de caracteres seguida de um “Oliveira” vai resultar em verdadeiro.

    Analisando a consulta inteira, vemos que ela irá atuar da seguinte forma: para cada idtipo de 1 até 5 (idtipo in (1, 5)), considerando somente os produtos que tenham o nome terminado pela letra ‘e’ (nome like ‘%e’), serão somados todos os preços relativos a cada idtipo. A soma de cada idtipo só aparecerá no resultado final caso ela seja maior do que 13 (having sum(preco) > 13). Então o resultado será: Total 40,00.

    Observação da letra c):O resultado parcial, antes de “having sum(preco) > 13” é: 40,00

    O valor 40 vem da soma dos preços 14 (leite), 12,75 (carne) e 13,25 (azeite), todos do idtipo 1, cujos nomes terminam com a letra ‘e’.

     

    d) Errada. Primeiro temos que analisar a consulta interna “select min(preco) from tbproduto where idtipo = 1”. Ela é uma consulta simples e procura pelo menor preço (min(preco)) de todos os produtos cujo idtipo é igual 1. Este resultado é 12,75. A consulta então passa a ser: SELECT nome FROM tbproduto WHERE idtipo not in (5) and preco > 12,75. A alternativa quer o nome do produto, cujo idtipo não esteja no conjunto (5), isto é, que esteja dentro de (1, 2, 3 e 4) e cujo preço seja maior do que 12,75. O resultado da consulta terá dois registros, que são o leite e o azeite.

     

    e) Errada. A consulta desta alternativa procura por todos os registros que têm o preço entre 10,00 e 12,00. De todos, o creme, cujo preço é 11,50, e o sabão, cujo preço é 11,00, são retornados pela consulta.

    Fonte: Patrícia Quintão.