SóProvas


ID
2594083
Banca
IBADE
Órgão
IPERON - RO
Ano
2017
Provas
Disciplina
Banco de Dados
Assuntos

Em um banco de dados relacional, existem as seguintes tabelas: PEÇA, com campos CODPC e NOME, sendo que CODPC é chave primária; PROJETO, com campos CODPR e DESCR, sendo que CODPR é chave primária; e RELC, com campos CDPC e CDPJ, sendo que a chave primária dessa tabela é composta por CDPC+CDPJ e CDPC é também chave estrangeira ligada a tabela PEÇA e CDPJ é chave estrangeira ligada a tabela PROJETO.

A consulta SQL que fornece NOME dos elementos de PEÇA que não estão associadas a nenhum elemento de PROJETO (ou seja, peças que não estão associadas a nenhum projeto) é:

Alternativas
Comentários
  • Resposta B

    Operador EXISTS = retorna o registro se existir na subquery
    Operador NOT EXISTS = retorna o registro se NÃO existir na subquery


    1ª Parte da Consulta
        SELECT NOME FROM PEÇA WHERE NOT EXISTS

        Retornará somente o registro que NÃO existir na subquery 2ª Parte da Consulta

    2ª Parte da Consulta

        SELECT DESCR FROM PROJETO WHERE EXISTS 

        Retornará somente o registro que existir na subquery 3ª Parte da Consulta

    3ª Parte da Consulta
        SELECT CDPC FROM RELC WHERE (PEÇA.CODPC = RELC.CDPC) AND (PROJETO.CODPR= RELC.CDPJ)

        Retornará somente o registro que 
        PEÇA.CODPC = RELC.CDPC  (ou seja, o código da PEÇA é igual ao código da RELC)
                    E 
        (PROJETO.CODPR= RELC.CDPJ) (ou seja, o código da PROJETO é igual ao código da RELC)

     

    O SGBD faz a consulta de trás para frente, ou seja, primeiro a 3ª parte segundo a 2ª parte e por ultimo a 1ª parte

     

    Caso de Teste 1
        Se a 3ª parte retornar um registro da tabela RELC
        a 2ª parte também retorna o registro da tabela PROJETO
        e 1ª parte NÃO retornará o registro da tabela PEÇA, pois está esperado a NÃO EXISTÊNCIA (NOT EXISTS) de registro da subquery que no caso é a 2ª Parte da Consulta

     

    Caso de Teste 2
        Se a 3ª parte NÃO retornar um registro da tabela RELC
        a 2ª parte também NÃO retorna o registro da tabela PROJETO
        e 1ª parte retornará o registro da tabela PEÇA, pois está esperado a NÃO EXISTÊNCIA (NOT EXISTS) de registro da subquery que no caso é a 2ª Parte da Consulta

  • Alternativa correta: B. 

     

    Dica: quando for resolver consultas aninhadas (consulta dentro de consulta), resolva de dentro para fora e tome nota dos resultados. Muito mais fácil de resolver assim.