Pular para o conteúdo principal

Questão de Banco de Dados — Sublinguagens SQL (DDL, DML, DQL, DCL e DTL) — VUNESP 2024

Banco de DadosSublinguagens SQL (DDL, DML, DQL, DCL e DTL)
Código
vu212072
Banca
VUNESP
Órgão
Pref Piracicaba
Ano
2024
Cargo
Tec (Piracicaba)
Tendo como base o banco de dados Oracle versão 21c, em sua configuração original, assinale a alternativa que apresenta o comando mais destrutivo, que elimina os dados e a estrutura de uma tabela, considerando a existência do objeto TABELA e que o usuário tem todas as devidas permissões para executá-lo.
  1. ADELETE FROM TABELA WHERE ID > 1;
  2. BDELETE FROM TABELA;
  3. CDROP TABELA;
  4. DTRUNCATE TABELA;
  5. ESELECT * FROM TABELA HAVING SUM(ID) <> NULL;
Revelar gabarito e comentário

GabaritoC — DROP TABELA;

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

Sublinguagens SQL: DROP, TRUNCATE, DELETE e a destruição de estruturas

Gabarito: letra C. O comando mais destrutivo, que elimina dados e estrutura da tabela, é o DROP TABLE — comando da DDL (Data Definition Language) que remove o objeto do banco de dados por completo. As demais alternativas ou apenas apagam linhas (DELETE), ou apagam todas as linhas mas preservam a estrutura (TRUNCATE), ou são sintaticamente inválidas (SELECT ... HAVING sem GROUP BY).

A linguagem SQL é dividida em sublinguagens conforme o tipo de operação que realizam. A DDL (Data Definition Language) interage com os objetos do banco (tabelas, índices, visões), e seus comandos principais são CREATE, ALTER, DROP e TRUNCATE. A DML (Data Manipulation Language) interage com os dados dentro das tabelas, com os comandos INSERT, UPDATE, DELETE e, em algumas classificações, o SELECT (que também pode ser tratado como DQL — Data Query Language). A DCL (Data Control Language) controla permissões com GRANT e REVOKE, e a DTL/TCL (Data Transaction Language) gerencia transações com COMMIT, ROLLBACK e BEGIN.

A diferença crucial entre DROP, TRUNCATE e DELETE está no que cada um remove:

  • DROP TABLE: remove a estrutura da tabela (definição, índices, triggers, etc.) e todos os dados nela contidos. É irreversível (a menos que haja backup) e não pode ser desfeito com ROLLBACK.

  • TRUNCATE TABLE: remove todas as linhas da tabela, mas preserva a estrutura (a tabela continua existindo, vazia). É uma operação DDL, não dispara triggers de linha e, no Oracle, não pode ser desfeita com ROLLBACK (é uma operação de DDL que faz commit implícito).

  • DELETE FROM: remove linhas específicas (ou todas, se sem WHERE), é uma operação DML, dispara triggers e pode ser desfeita com ROLLBACK se estiver dentro de uma transação.

A pegadinha da questão está em distinguir "eliminar dados e estrutura" (DROP) de "eliminar apenas dados" (DELETE e TRUNCATE). O DROP é o único que destrói o objeto em si; os outros dois apenas esvaziam o conteúdo. Além disso, a alternativa E (SELECT * FROM TABELA HAVING SUM(ID) <> NULL) é inválida porque HAVING exige GROUP BY e a comparação com NULL deve usar IS NOT NULL, não <> NULL.

Guarde a fronteira: DDL = estrutura (DROP, TRUNCATE, CREATE, ALTER); DML = dados (DELETE, INSERT, UPDATE, SELECT). É exatamente nessa fronteira que as alternativas se dividem.

1DROP TABLE
Remove dados
Remove estrutura
Irreversível
2TRUNCATE TABLE
Remove dados
Preserva estrutura
Irreversível
3DELETE FROM
Remove linhas
Preserva estrutura
Reversível (ROLLBACK)
Comandos SQL destrutivos
LEVELsoulevel.com.br
Comandos SQL destrutivos: DROP TABLE (Remove dados, Remove estrutura, Irreversível); TRUNCATE TABLE (Remove dados, Preserva estrutura, Irreversível); DELETE FROM (Remove linhas, Preserva estrutura, Reversível (ROLLBACK))

Alternativa A — ❌ Incorreta

DELETE FROM TABELA WHERE ID > 1; remove apenas as linhas que atendem à condição ID > 1. É um comando DML, não destrói a estrutura da tabela e pode ser revertido com ROLLBACK dentro de uma transação. Portanto, não é o mais destrutivo.

Alternativa B — ❌ Incorreta

DELETE FROM TABELA; remove todas as linhas da tabela, mas a estrutura permanece intacta. É DML, dispara triggers e pode ser desfeito com ROLLBACK. Não elimina a estrutura, então não é o mais destrutivo.

Alternativa C — ✅ Correta ⟵ GABARITO

DROP TABLE TABELA; é o comando DDL que remove a tabela inteira, incluindo sua estrutura (definição, índices, constraints, triggers) e todos os dados. É irreversível sem backup e não pode ser desfeito com ROLLBACK. É exatamente o que o enunciado pede: "elimina os dados e a estrutura de uma tabela".

Alternativa D — ❌ Incorreta

TRUNCATE TABLE TABELA; remove todas as linhas da tabela, mas preserva a estrutura (a tabela continua existindo, vazia). É um comando DDL, mas não elimina a estrutura. Portanto, não é o mais destrutivo.

Alternativa E — ❌ Incorreta

SELECT * FROM TABELA HAVING SUM(ID) <> NULL; é um comando de consulta (DQL/DML), não remove nada. Além disso, é sintaticamente inválido: HAVING exige GROUP BY, e a comparação com NULL deve ser feita com IS NULL/IS NOT NULL, não com <> NULL. Não tem efeito destrutivo algum.

NÃO CAIA NESSA!

A banca explora a confusão entre TRUNCATE e DROP. Muitos candidatos marcam TRUNCATE por saber que ele apaga todos os dados, mas esquecem que ele preserva a estrutura. O DROP é o único que destrói a tabela por completo. Lembre-se: TRUNCATE = esvazia; DROP = destrói.

PEGA ESSA DICA!

Para fixar, monte uma tabela mental:

Comando

Remove dados?

Remove estrutura?

Pode desfazer com ROLLBACK?

DELETE

Sim (linhas específicas ou todas)

Não

Sim (em transação)

TRUNCATE

Sim (todas as linhas)

Não

Não (no Oracle)

DROP

Sim (todos)

Sim

Não

Na prova, leia o enunciado com atenção: se pedir "dados e estrutura", é DROP; se pedir só "dados", pode ser DELETE ou TRUNCATE.

Gabarito: letra C

Link permanente: /questoes/vu212072