Pular para o conteúdo principal

Questão de Banco de Dados — SQL — Avança SP 2024

Banco de DadosSQL
Código
qg082356
Banca
Avança SP
Órgão
Prefeitura de Americana - SP
Ano
2024
Nível
Superior
Cargo
Analista Programador de Sistemas
Considere o seguinte esquema relacional para responder a essa questão e a próxima:Editora (editoraID, nomeEditora, morada, telefone)Interprete (interpreteID, nomeArtístico, país, contato, editoraID)Disco (referência, título, duração, ano edição, editoraID, interpreteID)Qual das alternativas, a seguir, apresenta o SQL correto para retornar os intérpretes portugueses da editora ‘Grava Records’?
  1. ASELECT nomeArtísticoFROM Interprete, EditoraWHERE nomeEditora LIKE ‘Grava Records’AND país LIKE ‘Portugal’ AND Interprete.editoraID=Editora.editoraID
  2. BSELECT [nomeArtístico]FROM EditoraWHERE nomeEditora LIKE ‘Grava Records’AND país LIKE ‘Portugal’
  3. CSELECT [nomeArtístico]FROM Interprete, EditoraWHERE nomeEditora AND pais LIKE“Portugal ans ‘Grava Records”
  4. DSelect paisLike Portugal and nomeEditora like grava records from editora.
  5. ESELECT pais, nomeEditora, nomeArtisticoLike “Portugal” and “Grava Records”Where Interprete and Editora.AND Interprete.editoraID=Editora.editoraID
Revelar gabarito e comentário

GabaritoA — SELECT nomeArtístico FROM Interprete, Editora WHERE nomeEditora LIKE ‘Grava Records’ AND país LIKE ‘Portugal’ AND Interprete.editoraID=Editora.editoraID

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Consulta SQL com junção de tabelas

Gabarito: letra A. A consulta correta precisa juntar as tabelas Interprete e Editora pela chave estrangeira editoraID, filtrar os registros em que o nome da editora seja 'Grava Records' e o país do intérprete seja 'Portugal', e então selecionar a coluna nomeArtístico. A alternativa A é a única que faz essa junção (Interprete.editoraID=Editora.editoraID) e aplica os dois filtros corretamente.

O problema pede para retornar os intérpretes portugueses da editora 'Grava Records'. Isso exige consultar dados de duas tabelas: Interprete (que contém nomeArtístico e país) e Editora (que contém nomeEditora). Como as informações estão em tabelas diferentes, é necessário realizar uma junção (JOIN) entre elas, usando a coluna editoraID que existe em ambas. A junção garante que cada intérprete seja associado à sua editora correspondente.

A sintaxe básica de uma junção implícita (ou junção por vírgula) coloca as tabelas na cláusula FROM separadas por vírgula e define a condição de junção na cláusula WHERE. Nesse caso, a condição é Interprete.editoraID = Editora.editoraID. Depois, aplicam-se os filtros: nomeEditora = 'Grava Records' e país = 'Portugal'. Por fim, seleciona-se a coluna desejada, nomeArtístico. A ordem das condições no WHERE não altera o resultado, desde que todas estejam presentes e corretas.

É importante notar que o operador LIKE é usado para comparação de padrões com curingas (% para qualquer sequência, _ para um caractere). Quando usado sem curingas, como em LIKE 'Grava Records', ele se comporta como uma comparação de igualdade, o que é válido aqui. A alternativa A usa LIKE sem curingas, o que é aceitável, embora o operador = fosse mais direto.

A pegadinha desta questão está em reconhecer a necessidade da junção. As alternativas incorretas ou não fazem a junção, ou filtram colunas erradas, ou têm sintaxe inválida. A banca testa se o candidato entende que, para combinar dados de duas tabelas, é preciso usar a chave estrangeira na condição de junção.

Critério

Alternativa A (✅ Gabarito)

Alternativa B

Alternativa C

Alternativa D

Alternativa E

Junção entre tabelas

Sim (Interprete.editoraID=Editora.editoraID)

Não (apenas Editora)

Não (produto cartesiano)

Não

Não (condição solta)

Filtro editora 'Grava Records'

Sim (nomeEditora LIKE 'Grava Records')

Sim

Inválido (nomeEditora AND pais LIKE)

Sim (sem aspas)

Inválido (Like "Grava Records" sem coluna)

Filtro país 'Portugal'

Sim (país LIKE 'Portugal')

Não (coluna inexistente em Editora)

Inválido (string mal formatada)

Sim (sem aspas)

Inválido (sem coluna associada)

Coluna selecionada

nomeArtístico (correta)

nomeArtístico (inexistente em Editora)

nomeArtístico (correta, mas sem junção)

pais (errada)

pais, nomeEditora, nomeArtistico (errada)

Sintaxe SQL válida

Sim

Parcialmente (erro de coluna)

Não

Não

Não

Alternativa A — ✅ Correta ⟵ GABARITO

Esta alternativa está correta porque:

  • Faz a junção das tabelas Interprete e Editora na cláusula FROM (junção implícita).

  • Define a condição de junção corretamente: Interprete.editoraID=Editora.editoraID.

  • Filtra pela editora 'Grava Records' com nomeEditora LIKE 'Grava Records'.

  • Filtra pelo país 'Portugal' com país LIKE 'Portugal'.

  • Seleciona a coluna nomeArtístico, que é o que se deseja retornar.

Alternativa B — ❌ Incorreta

Esta alternativa está incorreta porque não faz a junção com a tabela Interprete. Ela consulta apenas a tabela Editora e tenta selecionar nomeArtístico, que não existe nessa tabela. Além disso, o filtro país LIKE 'Portugal' também não se aplica, pois país é uma coluna da tabela Interprete, não de Editora. A consulta resultaria em erro, pois a coluna nomeArtístico não existe na tabela Editora.

Alternativa C — ❌ Incorreta

Esta alternativa está incorreta por vários motivos:

  • A sintaxe WHERE nomeEditora AND pais LIKE é inválida: nomeEditora não é uma condição booleana, e falta o operador de comparação.

  • A string "Portugal ans 'Grava Records" está mal formatada, com aspas duplas e um erro de digitação ('ans' em vez de 'and').

  • Não há condição de junção entre as tabelas, então o resultado seria um produto cartesiano, o que não atende ao pedido.

Alternativa D — ❌ Incorreta

Esta alternativa está incorreta porque a sintaxe está completamente errada. A ordem das cláusulas está invertida (Select pais Like Portugal and nomeEditora like grava records from editora.), não há cláusula FROM adequada, e os filtros estão sem aspas. Além disso, não há junção com a tabela Interprete, então não seria possível retornar os intérpretes.

Alternativa E — ❌ Incorreta

Esta alternativa está incorreta porque:

  • A cláusula SELECT está incompleta e mal formatada: SELECT pais, nomeEditora, nomeArtistico sem a cláusula FROM adequada.

  • A condição Like "Portugal" and "Grava Records" não está associada a nenhuma coluna.

  • A cláusula Where Interprete and Editora. é inválida, pois Interprete e Editora são tabelas, não condições.

  • A condição de junção AND Interprete.editoraID=Editora.editoraID está solta, sem estar ligada a um WHERE válido.

Gabarito: letra A

Link permanente: /questoes/qg082356