Na linguagem SQL são respectivamente comandos DML, DDL e DCL:
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
A alternativa correta é a D - MERGE, TRUNCATE e REVOKE. Vamos entender o porquê, analisando cada uma das categorias de comandos SQL mencionadas na questão e os comandos associados a elas.
SQL é uma linguagem usada para gerenciar e manipular bancos de dados e é dividida em diferentes tipos de comandos, geralmente agrupados em categorias, tais como DML (Data Manipulation Language), DDL (Data Definition Language) e DCL (Data Control Language).
- DML (Data Manipulation Language): Estes são comandos utilizados para manipular dados dentro das tabelas do banco de dados. Comandos típicos de DML incluem INSERT, UPDATE, DELETE, e MERGE. O comando MERGE é usado para mesclar dados de uma tabela para outra, o que pode incluir a operação de inserção, atualização e até exclusão de registros.
- DDL (Data Definition Language): Estes comandos são usados para definir e modificar a estrutura do banco de dados e dos objetos nele contidos, como tabelas e índices. Alguns exemplos são: CREATE, ALTER, DROP, e TRUNCATE. O comando TRUNCATE é utilizado para remover todos os registros de uma tabela de forma rápida e eficiente, mas sem excluir a estrutura da tabela.
- DCL (Data Control Language): Estes comandos gerenciam os direitos e permissões de acesso ao banco de dados. Comandos DCL incluem GRANT e REVOKE. O comando REVOKE é usado para retirar permissões de acesso ou operações previamente concedidas a usuários ou grupos.
Tendo em vista essas definições, vamos analisar a alternativa D mais a fundo:
- MERGE: Como mencionado, é um comando DML que permite a inserção, atualização ou exclusão de registros baseados em uma condição específica.
- TRUNCATE: Um comando DDL que remove todos os registros de uma tabela sem excluir a tabela em si.
- REVOKE: Um comando DCL que é utilizado para retirar permissões de usuários ou grupos.
Portanto, a alternativa D é a única que corretamente associa um comando DML, um comando DDL e um comando DCL, de acordo com as funções que cada um desempenha dentro da linguagem SQL.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
DML - Data Manipulation Language
DDL - Data Definition Language
DCL - Data Control Language
A) DROP (DDL), LOCK TABLE (DML) e GRANT (DCL)
B) UPDATE (DML), CALL (DML) e ALTER (DDL)
C) CREATE (DDL), INSERT (DML) e GRANT (DCL)
D) MERGE (DML), TRUNCATE (DDL) e REVOKE (DCL)
E) RENAME (DDL), DELETE (DML)e DROP (DDL)
MERGE é uma instrução DML que pode combinar operações INSERT , UPDATE e DELETE
Galera, sobre o comando MERGE, eu fiz uma consulta no Gemini e ele me retornou a seguinte resposta (com exemplo):
O comando **MERGE** é uma das ferramentas mais poderosas da DML (Data Manipulation Language). Ele permite realizar operações de **INSERT**, **UPDATE** e até **DELETE** em uma única instrução, baseando-se em uma condição de correspondência entre duas tabelas.
Imagine que você tem uma tabela principal de "Produtos" e recebe uma planilha diária com atualizações. Em vez de escrever vários scripts, o `MERGE` resolve tudo de uma vez.
---
### Exemplo Prático: Atualização de Estoque
Vamos considerar duas tabelas:
1. **Produtos (Destino):** Onde estão os dados oficiais.
2. **Carga_Diaria (Origem):** Novos dados que chegaram hoje.
#### O Cenário:
* Se o produto **já existe** (IDs iguais), atualizamos o preço e o estoque.
* Se o produto **não existe**, nós o inserimos.
#### O Código SQL:
```sql
MERGE INTO Produtos AS Destino
USING Carga_Diaria AS Origem
ON (Destino.ProdutoID = Origem.ProdutoID)
-- Quando houver correspondência (O produto já existe)
WHEN MATCHED THEN
UPDATE SET
Destino.Preco = Origem.Preco,
Destino.Estoque = Destino.Estoque + Origem.Quantidade
-- Quando não houver correspondência (Produto novo)
WHEN NOT MATCHED THEN
INSERT (ProdutoID, Nome, Preco, Estoque)
VALUES (Origem.ProdutoID, Origem.Nome, Origem.Preco, Origem.Quantidade);
```
---
### Componentes Principais:
* **`MERGE INTO`**: Define a tabela que sofrerá as alterações (Target).
* **`USING`**: Define a fonte dos novos dados (Source).
* **`ON`**: A condição lógica que liga as duas tabelas (geralmente uma Chave Primária).
* **`WHEN MATCHED`**: Define o que acontece quando o registro é encontrado (geralmente um `UPDATE`).
* **`WHEN NOT MATCHED`**: Define o que acontece quando o registro é novo (geralmente um `INSERT`).
### Por que usar o MERGE?
* **Performance:** Executa todas as operações em uma única passagem pelos dados, o que é muito mais rápido do que fazer um loop de `UPDATE` e depois um de `INSERT`.
* **Atomicidade:** Toda a operação ocorre dentro de uma única transação. Se algo falhar, nada é alterado.
* **Simplicidade:** O código fica muito mais limpo e fácil de manter do que múltiplos blocos `IF EXISTS`.
Você está trabalhando com algum banco de dados específico, como SQL Server, Oracle ou PostgreSQL? Pergunto porque a sintaxe pode ter pequenas variações entre eles.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo