SóProvas


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

Considere as seguintes tabelas de um banco de dados relacional, sendo que os atributos ID e Cod, na tabela Usa são chaves estrangeiras, com origem, respectivamente, nas tabelas Dpto e Eqpto:

Depto (ID, Nome, Função)
Usa (ID, Cod)
Eqpto (Cod, Tipo, Valor)

Assinale a alternativa que apresenta a expressão SQL para obter o Nome do Depto e o Tipo de Eqpto utilizados.

Alternativas
Comentários
  • Questão simples.

    São 3 tabelas, formando um relacionamento N para N (muitos para muitos). Onde "Usa" é a tabela de relacionamento, ou seja, possui a chave estrangeira vinda das demais tabelas.

    Neste caso, necessitamos de juntar as três tabelas para buscar as informações.

    Já de cara, eliminamos as alternativas a, b, d, pois não estão sendo referenciadas as 3 tabelas. (após a cláusula from)

    Ficamos com as alternativas c e d,  na c) a consulta vai dar erro, pois apesar de mencionar as 3 tabelas, não é indicada suas devidas condições (após cláusula WHERE) e realizar o procedimento de join é obrigatória à indicação de quais são suas chaves correpondentes. (ID e Cod nesse caso) 

    Portanto, alternativa correta  d)
  • Prezados,
    Vamos aos comentários das alternativas
    a) SELECT Nome, Tipo 
    FROM Depto Eqpto
    Alternativa errada pois não é feito corretamente o join entre as tabelas Depto e Egpto
     
    b) SELECT Nome, Tipo 
    FROM Usa 
    WHERE USA.ID and Usa.Cod

    Alternativa errada pois não há as colunas Nome e Tipo na tabela Usa
    c) SELECT Nome, Tipo 
    FROM Depto, Usa, Eqpto 
    Alternativa errada pois não é feito corretamente o join entre as tabelas Depto , Usa e Egpto
    d) SELECT Nome, Tipo 
    FROM Depto, Usa, Eqpto 
    WHERE Dpto.ID = USA.ID and Eqpto.Cod = Usa.Cod 

    Alternativa correta e atende o que foi solicitado no enunciado, visto que o join foi feito corretamente entre as tabelas Depto , Usa e Egpto
    e) SELECT Nome, Tipo 
    FROM Depto, Eqpto 
    WHERE Dpto.ID and Eqpto.Cod 

    Alternativa errada, não há uma função lógica no WHERE , e além disso o join não foi feito corretamente
  • Questão deveria ser anulada, pois tem erro de digitação que provoca erro no momento da execução do SQL, conforme abaixo:


    SELECT Nome, Tipo
    FROM Depto, Usa, Eqpto
    WHERE Dpto.ID = USA.ID and Eqpto.Cod = Usa.Cod 


    Uma letra faz muita diferença, pois o certo seria:


    SELECT Nome, Tipo
    FROM Depto, Usa, Eqpto
    WHERE Depto.ID = Usa.ID and Eqpto.Cod = Usa.Cod


    Outra forma de realizar essa mesma consulta seria:


    SELECT Nome, Tipo
    FROM Usa
    INNER JOIN Depto ON Depto.ID = Usa.ID
    INNER JOIN Eqpto ON Eqpto.Cod = Usa.Cod


    Espero ter ajudado!!!


    Bons Estudos a todos!!!