Questão nº 59

Questão de A definir · FGV TJ-SE Servidor 2023 (nº 59)

FGV2023Analista Judiciário - Análise de Sistemas - Banco de DadosA definir
Gabarito: Dver comentário ↓

O administrador de banco de dados do TJSE deverá criar um script em MySQL para realizar a carga de dados da TABELA A para a TABELA B, considerando que:

• a TABELA A foi criada pelo script:

`CREATE TABLE a ( `

`id INT AUTO_INCREMENT PRIMARY KEY, `

`descricao VARCHAR(255) NOT NULL, `

`custo DECIMAL(10, 2), tipo CHAR(1), `

`CHECK (tipo IN ('A', 'B', 'C')) `

`); `

• a TABELA B foi criada pelo script:

`CREATE TABLE b ( `

`id INT AUTO_INCREMENT PRIMARY KEY, `

`descricao VARCHAR(255) NOT NULL, `

`custo DECIMAL(10, 2) NOT NULL, `

`tipo TINYINT, `

`CHECK (tipo IN (1,2,3)) `

`); `

• A TABELA A foi carregada e a coluna CUSTO possui valores NULOS.

O script para carregar os dados da TABELA A para a TABELA B é:

Resposta comentada

Gabarito Alternativa D

A transformação de dados em SQL é o processo de converter dados de um formato ou estrutura para outro, geralmente para que se ajustem aos requisitos de uma tabela de destino. Isso é crucial quando as tabelas de origem e destino têm tipos de dados, restrições (NOT NULL) ou valores diferentes para as mesmas colunas. Funções como COALESCE (para tratar valores NULL) e a estrutura CASE (para mapear valores) são ferramentas essenciais nesse processo.

(A) Incorreta: A cláusula SELECT * tenta inserir todas as colunas na ordem e tipo originais. A coluna custo na TABELA B é NOT NULL, mas na TABELA A pode ter valores NULL, o que causaria um erro. Além disso, a coluna tipo na TABELA A é CHAR ('A', 'B', 'C') e na TABELA B é TINYINT (1, 2, 3), o que geraria um erro de tipo ou violação de restrição.
(B) Incorreta: Esta alternativa tenta resolver o problema do custo NOT NULL usando WHERE custo IS NOT NULL. No entanto, essa abordagem descarta todas as linhas da TABELA A onde custo é NULL, em vez de transformar esses valores. Além disso, ela não resolve a incompatibilidade de tipo e valores da coluna tipo (CHAR vs. TINYINT).
(C) Incorreta: Esta alternativa agrava os problemas da alternativa B. Além de descartar linhas com custo IS NOT NULL, a condição AND tipo IN (1, 2, 3) na TABELA A (onde tipo é 'A', 'B', 'C') fará com que nenhuma linha seja selecionada, pois 'A', 'B', 'C' não são 1, 2 ou 3. Ou seja, nenhum dado seria inserido.
(D) Correta: Esta é a alternativa correta porque aborda todas as transformações necessárias:

  • COALESCE(custo, 0) as custo: Trata os valores NULL da coluna custo da TABELA A, substituindo-os por 0 para satisfazer a restrição NOT NULL da TABELA B.
  • CASE tipo WHEN 'A' THEN 1 WHEN 'B' THEN 2 WHEN 'C' THEN 3 END AS tipo: Transforma os valores CHAR ('A', 'B', 'C') da coluna tipo da TABELA A nos valores TINYINT (1, 2, 3) esperados pela TABELA B, garantindo a compatibilidade de tipo e a validade pela restrição CHECK.
    (E) Incorreta: Embora COALESCE(custo, 0) esteja correto para a coluna custo, a lógica do CASE para a coluna tipo está invertida. Ela tenta mapear valores numéricos (1, 2, 3) para caracteres ('A', 'B', 'C'), mas a coluna tipo da TABELA A já contém os caracteres 'A', 'B', 'C'. Isso faria com que o CASE não encontrasse nenhuma correspondência nos WHEN e retornasse NULL (ou um erro de conversão), o que não é válido para a coluna tipo da TABELA B que espera 1, 2 ou 3.

Fonte: FGV TJ-SE Servidor 2023 Analista Judiciário - Análise de Sistemas - Banco de Dados (Caderno Tipo 1). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho