SóProvas


ID
708952
Banca
FCC
Órgão
MPE-PE
Ano
2012
Provas
Disciplina
Banco de Dados
Assuntos

Dadas as tabelas: Aluno que contém as colunas Nome e Cidade; e Cidade que contém a coluna Nome. Uma query SQL que retorna apenas os alunos cujas cidades constem na tabela de cidades é:

Alternativas
Comentários
  • E este foi mais um dos geniais comentários de Mario Filho...

    a) SELECT Aluno.Nome FROM Aluno WHERE Aluno.Cidade IN (SELECT COUNT(Nome) FROM Cidade);
    Seleciona os alunos cujo o nome da cidade é igual ao número de cidades na tabela cidade (e.g. Cidade "2")

    b) SELECT Nome FROM Aluno,Cidade WHERE Aluno.Cidade = Cidade.Nome;
    Gera um erro; o a seleção Nome é ambígua

    c) SELECT Nome FROM Aluno HAVING Aluno.Cidade = Cidade.Nome;
    Gera um Erro; Tabela Cidade não foi referênciada

    d) SELECT Cidade.Nome FROM Aluno LEFT JOIN Cidade WHERE Aluno.Cidade = Cidade.Nome;
    Traz todos as cidades que possuem alunos; Se o aluno não estiver na cidade traz NULL

    e) SELECT a.Nome FROM Aluno a,Cidade b WHERE a.Cidade = b.Nome;
    Correto
  • Na letra 'C' ainda tem o problema do HAVING, essa cláusula deve ser utilizada com funções de agregação, geralmente utilizada junto com a cláusula GROUP BY.

    http://www.w3schools.com/sql/sql_having.asp
  • Como assim na B, "o a seleção Nome é ambígua"

  • Ao meu ver, não há nada de ambíguo na letra b e esta consulta e a da letra e são totalmente equivalentes...

    Outra forma seria:

    SELECT Nome FROM ALUNO where exists (SELECT * FROM CIDADE)

    Deve ter algum JOIN tb que satisfaça a questao...

  • Caros,

    A ambiguidade ocorre porque tanto a tabela Aluno quanto a tabela Cidade tem uma coluna Nome. Por isso há a necessidade de se identificar a coluna Nome a ser retornada, explicitando que a coluna Nome é referente à tabela Aluno e não à tabela Cidade.

    Como exemplo, criei as tabelas no meu MySQL e testei com:

    - SELECT Nome FROM Aluno,Cidade WHERE Aluno.Cidade = Cidade.Nome;

    Resultado: Error Code: 1052. Column 'Nome' in field list is ambiguous

    SELECT a.Nome FROM Aluno a,Cidade b WHERE a.Cidade = b.Nome;

    Resultado: retorna os nomes dos alunos cujo nome da cidade constam na tabela Cidade.