SóProvas


ID
910291
Banca
FCC
Órgão
DPE-SP
Ano
2013
Provas
Disciplina
Banco de Dados
Assuntos

Para responder às questões de números 58 e 59, utilize os comandos SQL abaixo.

CREATE TABLE times (id INTEGER, nome VARCHAR(20),cidade VARCHAR(20));
CREATE TABLE jogos (local VARCHAR(20), data VARCHAR(8), time1 INTEGER, time2 INTEGER, placar1 INTEGER, placar2 INTEGER);
INSERT INTO times VALUES(1, "santos fc", "santos");
INSERT INTO times VALUES(2, "palmeiras", "sao paulo");
INSERT INTO times VALUES(3, "guarani", "campinas");
INSERT INTO jogos VALUES("campinas", "20100504", 3, 1, 0, 2);
INSERT INTO jogos VALUES("santos", "20101220", 1, 2, 1, 1);
INSERT INTO jogos VALUES("campinas", "20110210",3,2,0,0);

Para a impressão do seguinte resultado:

Vitória Time 2
Empate
Empate


a query que poderá ser utilizada é

Alternativas
Comentários
  • gabarito "E"

    .... mas no final do código, "...END AS T1 FROM jogos; " 

    "T1" não deveria ser "Time1" ?


    alguem pode explicar please?

  • essas questões sobre esses jogos e times estão muito bizarras, sério mesmo

  • Na prática a questão está esquisita! 

    Ao criar as mesmas tabelas e popula-las vamos verificar que é desnecessário este AS T1, mas isto é FCC

  • na verdade o "END" é o fim do CASE.

    O "AS T1" é o valor do atributo da tabela resultante, ou seja, o nome da tabela.

    A questões está certa.

  • A questão abordou corretamente o comando CASE, porém o mesmo é mais utilizado em PL/SQL. Na questão ele foi "embutido" as projeções do SELECT da Query. Sua sintaxe é:

    Comando Case:

    ...

    Case <nome_atributo> (opcional)

    WHEN ‘A’ THEN ...

    WHEN ‘B’ THEN ...

    ELSE ...

    END Case;

    Então, para cada uma das 3 linhas da tabela jogos foram realizados os testes condicionais e o resultado exibido como o ALIAS T1:

    SELECT 

     CASE WHEN placar1 > placar2 THEN "Vitória time 1" 

     WHEN placar2 > placar1 THEN "Vitória Time 2" 

     ELSE "Empate" END AS T1 

     FROM jogos;

    Bons estudos!

  • "..END AS T1"

    O T1 neste caso é apenas um alias, um nome, para a coluna onde serão apresentados o resultado do Select. Poderia ser então qualquer texto.

  • Emerson, como os colegas citaram T1 é o aliás que serve como nome de coluna, se ele é indispensável para um simples teste é sim, porém se você for realmente montar uma query para uso, num relatório por exemplo, você vai precisar "declarar" o nome da coluna, senão ela fica com nome "vazio", indefinido. 


    Um exemplo para ficar mais fácil entender, digamos que nós temos a coluna de sexo (P_SEXO) na tabela Pessoa (P): 

    CASE WHEN P_SEXO = 'F' THEN 'FEMININO'
               WHEN P_SEXO = 'M' THEN 'MASCULINO'
    ELSE 'N. INF'

    END AS SEXO


    Se você quisesse usar uma coluna num relatório para mostrar o sexo por extenso você faria assim.

  • A) É necessário usar a cláusula FROM quando realizar uma consulta (SELECT) com a cláusula WHERE. ATENÇÃO: isso não é uma unanimidade entre os SGBD. (http://stackoverflow.com/questions/705341/from-clause-necessary-in-every-select-statement)

     

    B) Não existe campo v na tabela jogos.

     

    C) É incorreto usar duas cláusulas WHERE para a mesma cláusula SELECT.

     

    D) Não existe campo nome na tabela jogos.

     

    E) Correta.

  • No MySQL também pode ser feito assim:

     

    SELECT IF(placar1 > placar2, "Vitória Time 1", IF(placar2 > placar1, "Vitória Time 2", "Empate")) T1 FROM jogos;

  • Veja que a ideia é retornar um valor textual a respeito do resultado do jogo – se algum time tiver o placar maior que o outro, deverá ser apontado como vencedor, já se ambos os valores de placar forem iguais, o resultado será empate. Podemos fazer essa associação ao observar os valores de placar1 e placar 2 na tabela jogos...

    INSERT INTO jogos VALUES("campinas", "20100504", 3, 1, 0, 2);

    INSERT INTO jogos VALUES("santos", "20101220", 1, 2, 1, 1);

    INSERT INTO jogos VALUES("campinas", "20110210",3,2,0,0);

    ... correlacionando-a com os resultados a serem obtidos:

    Vitória Time 2

    Empate

    Empate

    Veja que, no primeiro registro, o placar2 é maior que o placar1, tendo o valor retornado sido “Vitória Time 2”. Já nos demais, placar1 é igual a placar2, e o resultado retornado é “Empate”. Isso nos leva a crer que, caso placar1 seja maior que placar2, o valor retornado deva ser “Vitória Time 1”. Faria sentido, não é?

    Assim, para implementar essa lógica condicional em SQL, utilizamos o comando CASE:

    CASE

               WHEN placar1 > placar2 THEN 'Vitória Time 1'

               WHEN placar2 > placar1 THEN 'Vitória Time 2'

               WHEN placar1 = placar2 THEN 'Empate' (ou ELSE 'Empate')

    END

    Assim, a única resposta coerente com essa lógica e que apresenta sintaxe correta é a letra E.

    Gabarito: E