Questão nº 47
Questão de Banco de Dados · FCC TJ-CE 2022 (nº 47)
No PostgreSQL deseja-se fazer uma cópia dos nomes das colunas (sem os dados) de uma tabela chamada `cliente` para `backup_cliente` e, depois, inserir apenas os primeiros três registros (linhas) da tabela `cliente` na tabela `backup_cliente`. Para realizar essa tarefa utilizam-se os comandos
- A```sql
CREATE TABLE backup_cliente AS SELECT FROM cliente LIMIT 0;
INSERT INTO backup_cliente SELECT FROM cliente LIMIT 3;
``` (alternativa correta) - B```sql
CREATE TABLE backup_cliente AS SELECT FROM cliente;
INSERT INTO backup_cliente SELECT FROM cliente WHERE COUNT(*)<=3;
``` - C```sql
TRUNCATE TABLE cliente TO backup_cliente;
INSERT INTO backup_cliente SELECT * FROM cliente LIMIT 3;
``` - D```sql
CREATE TABLE backup_cliente AS SELECT * FROM cliente;
INSERT INTO backup_cliente SELECT LIMIT 3 FROM cliente;
``` - E```sql
BACKUP TABLE cliente to backup_cliente;
INSERT INTO backup_cliente SELECT * FROM cliente LIMIT 3;
```
Resposta comentada
Gabarito Alternativa A
Para copiar a estrutura de uma tabela (nomes e tipos de colunas, sem os dados) e depois inserir registros específicos, usamos a combinação de CREATE TABLE AS SELECT com LIMIT 0 para a estrutura, e INSERT INTO SELECT com LIMIT N para os dados.
- (A) Correta: A primeira linha,
CREATE TABLE backup_cliente AS SELECT * FROM cliente LIMIT 0;, cria a tabelabackup_clientecom a mesma estrutura (colunas e tipos) da tabelacliente, mas sem copiar nenhum dado, poisLIMIT 0garante que nenhuma linha seja selecionada para a criação. A segunda linha,INSERT INTO backup_cliente SELECT * FROM cliente LIMIT 3;, então insere corretamente os primeiros três registros da tabelaclientena recém-criadabackup_cliente. - (B) Incorreta: A primeira linha,
CREATE TABLE backup_cliente AS SELECT * FROM cliente;, copia a estrutura e todos os dados da tabelaclienteparabackup_cliente, o que contraria a exigência de copiar apenas os nomes das colunas (sem os dados) inicialmente. A segunda linha,INSERT INTO backup_cliente SELECT * FROM cliente WHERE COUNT(*)<=3;, usaCOUNT(*)de forma incorreta em uma cláusulaWHEREsemGROUP BY, sendo sintaticamente inválida para o propósito de selecionar os primeiros três registros. - (C) Incorreta: A primeira linha,
TRUNCATE TABLE cliente TO backup_cliente;, utiliza uma sintaxe inválida.TRUNCATE TABLEé um comando para remover todas as linhas de uma tabela existente e não possui a cláusulaTOpara criar ou copiar tabelas. - (D) Incorreta: A primeira linha,
CREATE TABLE backup_cliente AS SELECT * FROM cliente;, novamente copia a estrutura e todos os dados, não atendendo ao requisito inicial. A segunda linha,INSERT INTO backup_cliente SELECT LIMIT 3 FROM cliente;, possui uma sintaxe incorreta para oLIMIT; oLIMITdeve vir após a lista de colunas noSELECT(ex:SELECT * FROM cliente LIMIT 3). - (E) Incorreta: A primeira linha,
BACKUP TABLE cliente to backup_cliente;, não é um comando SQL padrão ou válido no PostgreSQL para criar uma tabela a partir da estrutura de outra. O PostgreSQL utiliza ferramentas comopg_dumppara backups, mas não essa sintaxe SQL.
Fonte: FCC TJ-CE 2022 Analista Judiciário - Especialidade Ciência da Computação - Área Sistemas da Informação (Caderno Tipo 001). Reproduzida para fins de estudo.