Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — FGV 2024

Banco de DadosConsultas e Comandos em SQL
Código
fg165295
Banca
FGV
Órgão
DATAPREV
Ano
2024
Cargo
Ana TI ( )
Em um sistema de banco de dados relacional, o script de comandos SQL a seguir especificado foi submetido à execução:   A análise do script permite-nos afirmar que a sua execução produzirá um resultado. Assinale a opção que indica esse resultado.Imagem associada para resolução da questão
  1. AA criação de uma nova coluna “atr4” ao final da execução do script, com as duas tuplas do estado da tabela contendo o valor zero como conteúdo desse novo atributo criado.
  2. BA criação de uma nova restrição de integridade “atr4” ao final da execução do script, que demanda que valores não nulos sejam inicialmente preenchidos com o valor zero.
  3. CO comando ALTER TABLE apresentará erro, pois a especificação da linguagem SQL não permite um novo atributo em uma tabela com especificação de não nulo.
  4. DO comando INSERT não será executado, já que a segunda tupla especificada contém valor nulo no atributo atr3, que necessita ser maior que zero.
  5. EUm erro sintático de construção do comando ALTER TABLE, pela ausência da especificação da palavra reservada COLUMN após a palavra reservada ADD.
Revelar gabarito e comentário

GabaritoA — A criação de uma nova coluna “atr4” ao final da execução do script, com as duas tuplas do estado da tabela contendo o valor zero como conteúdo desse novo atributo criado.

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”.

Comando ALTER TABLE ADD e o valor DEFAULT

Gabarito: letra A. O script executa sem erro: o ALTER TABLE adiciona a coluna atr4 com a restrição NOT NULL e o valor padrão DEFAULT 0, e o INSERT insere as duas tuplas normalmente — como a coluna nova tem DEFAULT 0, as duas linhas existentes recebem o valor zero nesse atributo. A alternativa A descreve exatamente esse resultado: a criação da coluna atr4 com as duas tuplas contendo o valor zero.

O comando ALTER TABLE é um comando da DDL (Data Definition Language), usado para modificar a estrutura de uma tabela existente — adicionar, excluir ou modificar colunas e restrições. A sintaxe para adicionar uma coluna é ALTER TABLE nome_tabela ADD nome_coluna tipo_dado [restrições]. Neste script, a coluna atr4 é adicionada com o tipo INT, a restrição NOT NULL e o valor padrão DEFAULT 0. A palavra COLUMN é opcional na maioria dos SGBDs (SQL Server, Oracle, MySQL, PostgreSQL), então a ausência dela não gera erro sintático.

O INSERT é um comando da DML (Data Manipulation Language), usado para inserir linhas em uma tabela. A sintaxe INSERT INTO tabela VALUES (v1, v2, v3) insere valores para todas as colunas na ordem em que foram definidas. Neste script, a tabela tem três colunas (atr1, atr2, atr3), e o INSERT fornece três valores para a primeira tupla e três para a segunda. A segunda tupla tem valor nulo em atr3, mas isso não viola nenhuma restrição, pois não há NOT NULL nem CHECK em atr3 — o valor nulo é permitido.

A pegadinha central desta questão é a interação entre ALTER TABLE ADD com NOT NULL e o DEFAULT. Quando uma coluna NOT NULL é adicionada a uma tabela com linhas existentes, o SGBD precisa preencher essas linhas com algum valor. Se um DEFAULT é especificado, ele é usado para preencher as linhas existentes. Sem o DEFAULT, o comando falharia (em alguns SGBDs) porque não haveria valor para as linhas existentes. Aqui, o DEFAULT 0 garante que as duas tuplas existentes recebam o valor zero na nova coluna.

A alternativa B confunde coluna com restrição: atr4 é uma coluna, não uma restrição. A alternativa C afirma que o ALTER TABLE apresentará erro, mas a especificação NOT NULL com DEFAULT é perfeitamente válida. A alternativa D afirma que o INSERT não será executado por causa do valor nulo em atr3, mas não há restrição que impeça isso. A alternativa E afirma que falta a palavra COLUMN, mas ela é opcional.

NÃO CAIA NESSA!

A banca explora a confusão entre coluna e restrição (alternativa B) e a ideia de que NOT NULL sem DEFAULT em ALTER TABLE ADD falharia (alternativa C). O candidato que não conhece a interação entre DEFAULT e NOT NULL pode achar que o comando daria erro, mas o DEFAULT 0 resolve exatamente esse problema.

  1. 1ALTER TABLE ADD atr4
  2. 2NOT NULL DEFAULT 0
  3. 3Linhas existentes recebem 0
  4. 4INSERT das duas tuplas
  5. 5Resultado: coluna criada
LEVEL · soulevel.com.br

Alternativa A — ✅ Correta ⟵ GABARITO

A alternativa descreve com precisão o resultado da execução: a criação da coluna atr4 ao final do script, com as duas tuplas contendo o valor zero. O ALTER TABLE adiciona a coluna com DEFAULT 0, e o INSERT insere as duas tuplas normalmente. Como a coluna nova tem DEFAULT 0, as duas linhas existentes recebem o valor zero nesse atributo.

Alternativa B — ❌ Incorreta

A alternativa confunde coluna com restrição. atr4 é uma coluna adicionada pelo ALTER TABLE, não uma restrição de integridade. A restrição NOT NULL é uma propriedade da coluna, mas a coluna em si não é uma restrição. Além disso, a descrição "demanda que valores não nulos sejam inicialmente preenchidos com o valor zero" é confusa e não corresponde ao que o script faz.

Alternativa C — ❌ Incorreta

A alternativa afirma que o ALTER TABLE apresentará erro porque a especificação SQL não permite adicionar um atributo com NOT NULL em uma tabela com linhas existentes. Isso é falso: a especificação SQL permite adicionar uma coluna NOT NULL desde que um valor DEFAULT seja fornecido. O DEFAULT 0 garante que as linhas existentes sejam preenchidas com zero, então o comando executa sem erro.

Alternativa D — ❌ Incorreta

A alternativa afirma que o INSERT não será executado porque a segunda tupla contém valor nulo em atr3, que "necessita ser maior que zero". Não há nenhuma restrição CHECK ou NOT NULL em atr3 que exija valor maior que zero. O valor nulo é permitido, então o INSERT executa normalmente.

Alternativa E — ❌ Incorreta

A alternativa afirma que há erro sintático pela ausência da palavra COLUMN após ADD. A palavra COLUMN é opcional na sintaxe do ALTER TABLE ADD na maioria dos SGBDs (SQL Server, Oracle, MySQL, PostgreSQL). O comando ALTER TABLE tabela ADD atr4 INT NOT NULL DEFAULT 0 é sintaticamente válido.

Gabarito: letra A

Link permanente: /questoes/fg165295