Questão de Banco de Dados — Sublinguagens SQL (DDL, DML, DQL, DCL e DTL) — VUNESP 2024
Banco de Dados›Sublinguagens 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.
ADELETE FROM TABELA WHERE ID > 1;
BDELETE FROM TABELA;
CDROP TABELA;
DTRUNCATE TABELA;
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.
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.