Capítulo 17: Consultas de Ação SQL: UPDATE e DELETE em Massa

🎯 Objetivo da Aula

Nesta aula de abertura do Módulo 5, você deixará de ser apenas um consultor de dados e aprenderá a atuar como um verdadeiro administrador de dados através das Consultas de Ação (Action Queries) da linguagem SQL. No laboratório de informática, você aprenderá a diferença fundamental entre consultas de seleção (que apenas exibem registros na tela) e consultas de ação, que modificam ou excluem dados fisicamente no disco em fração de segundo. Você dominará os comandos UPDATE (para reajustes tarifários em lote) e DELETE (para expurgo controlado de dados obsoletos), adotando o protocolo de segurança preventivo indispensável de todo DBA corporativo.

Ao final desta aula, você saberá reajustar tabelas de frete da FastLog S.A. com um único clique de comando, sem precisar alterar linha por linha manualmente no sistema.


🏢 Cenário Prático (FastLog S.A.)

Empresa: FastLog Transportes & Logística Integrada S.A.
Problema: A Petrobras anunciou um aumento emergencial de 6,5% no preço do óleo diesel. A diretoria comercial determinou que todas as 850 ordens de frete agendadas para o próximo mês na rota do interior paulista deveriam sofrer um repasse imediato de 6,5% no valor faturado. Um assistente começou a abrir frete por frete no formulário, multiplicar o valor na calculadora do celular e redigitar a nova quantia. Após 4 horas de digitação exaustiva, ele cometeu um erro de vírgula em uma carga de químicos, reajustando um frete de R$ 12.000,00 para R$ 1.200,00, gerando um prejuízo operacional de R$ 10.800,00 em uma única viagem.
Sua Missão: Como especialista em SQL corporativo, você escreverá um comando UPDATE que calcula e atualiza o reajuste de combustível de todas as 850 cargas simultaneamente em 0,05 segundo, com precisão de arredondamento bancário e sem risco de erro humano de digitação.


🧠 Fundamentos: A Teoria Traduzida

1. Consultas de Seleção vs. Consultas de Ação

  • Consulta de Seleção (SELECT): É passiva (somente leitura). Ela não altera nenhum caractere no disco; apenas extrai e projeta dados na tela.
  • Consulta de Ação (UPDATE, DELETE, INSERT INTO): É ativa e executável. Ela altera os bytes gravados no arquivo .accdb. Uma vez confirmada a execução, não existe botão “Desfazer” (Ctrl + Z) no SGBD!
flowchart LR
    subgraph PROTOCOLO["🛡️ A Regra Sagrada de Segurança do DBA"]
        P1["1. Teste Preventivo:<br/>SELECT ID_OrdemFrete, Valor_Frete<br/>FROM tbl_OrdensFrete<br/>WHERE Status_Ordem = 'Agendado';"]
        P1 -->|"Conferiu quantas linhas serão afetadas?"| P2["2. Execução Oficial:<br/>UPDATE tbl_OrdensFrete<br/>SET Valor_Frete = Valor_Frete * 1.065<br/>WHERE Status_Ordem = 'Agendado';"]
    end

    style PROTOCOLO fill:#f8f9fa,stroke:#0056b3,stroke-width:2px
    style P1 fill:#d1ecf1,stroke:#0c5460,stroke-width:1px,color:#0c5460
    style P2 fill:#d4edda,stroke:#155724,stroke-width:2px,color:#155724

2. O Comando de Atualização em Massa: UPDATE

A sintaxe canônica do UPDATE é composta por três elementos essenciais:

1
2
3
UPDATE NomeDaTabela
SET Coluna1 = NovoValor, Coluna2 = OutroValor
WHERE CondicaoDeFiltro;
  • Atenção Máxima: Se você esquecer a cláusula WHERE, o SGBD atualizará TODAS AS LINHAS DA TABELA INTEIRA sem distinção!

3. O Comando de Exclusão em Massa: DELETE

Permite expurgar registros obsoletos ou cancelados:

1
2
DELETE FROM NomeDaTabela
WHERE CondicaoDeExclusao;
  • Protocolo de Blindagem: Nunca rode um DELETE direto. Sempre rode primeiro um SELECT * FROM Tabela WHERE ... com o mesmo critério. Se a lista exibida na tela for exatamente o que deve ser apagado, aí sim você converte o comando para DELETE!

📖 Exemplo Guiado: Passo a Passo no Laboratório

Abra o arquivo FastLog_Database.accdb. Vamos construir a consulta de reajuste tarifário.

Passo 1: Abrindo a Consulta em Modo SQL

  1. Acesse Criar ➔ Design da Consulta.
  2. Feche a janelinha Adicionar Tabelas.
  3. No canto superior esquerdo, clique no botão Modo SQL.
  4. Limpe o editor em branco.

🛠️ Prática Obrigatória 1: Reajuste de Tarifas em Lote com UPDATE

Você aplicará um reajuste de combustível de 6,5% sobre os fretes com status 'Agendado'.

Passo a Passo no Computador:

  1. Passo de Verificação Prévia (Protocolo de Segurança):
    • Digite primeiro a consulta de inspeção no editor SQL:
      1
      2
      3
      
      SELECT ID_OrdemFrete, Valor_Frete, Status_Ordem
      FROM tbl_OrdensFrete
      WHERE Status_Ordem = 'Agendado';
    • Clique em ! Executar e anote na memória os valores atuais (ex: um frete de R$ 10.000,00).
  2. Passo de Execução do Reajuste:
    • Volte ao Modo SQL e altere o código para o comando de ação oficial:
      1
      2
      3
      
      UPDATE tbl_OrdensFrete
      SET Valor_Frete = Round(Valor_Frete * 1.065, 2)
      WHERE Status_Ordem = 'Agendado';
    • Clique no botão ! Executar (exclamação vermelha).
  3. A Mensagem de Confirmação do Access:
    • O Access exibirá um alerta oficial do sistema: “Você está prestes a atualizar X linha(s). Depois de clicar em Sim, você não poderá usar o comando Desfazer para reverter as alterações.”
    • Clique no botão Sim.
  4. Conferência da Atualização:
    • Abra a tabela tbl_OrdensFrete no Modo Folha de Dados:
    • Observe que o frete que antes era de R$ 10.000,00 agora está perfeitamente registrado como R$ 10.650,00!
  5. Salve a consulta como: qry_AcaoReajusteCombustivel.

✅ Resultado Esperado (Prática 1):

O comando UPDATE calcula e grava o aumento de 6,5% em todas as cargas agendadas de forma instantânea, com arredondamento em 2 casas decimais.


🛠️ Prática Obrigatória 2: Expurgo Seguro de Cotações Canceladas com DELETE

Agora você criará a rotina de limpeza do banco de dados, excluindo registros marcados com status 'Cancelado'.

Passo a Passo no Computador:

  1. Acesse Criar ➔ Design da Consulta ➔ Modo SQL.
  2. Teste Prévio de Visualização:
    • Digite primeiro o comando de conferência:
      1
      2
      3
      
      SELECT ID_OrdemFrete, Data_Despacho, Valor_Frete, Status_Ordem
      FROM tbl_OrdensFrete
      WHERE Status_Ordem = 'Cancelado';
    • Execute e verifique se apenas as viagens canceladas aparecem listadas.
  3. Convertendo para o Comando de Exclusão:
    • Volte ao Modo SQL e digite o comando de expurgo definitivo:
      1
      2
      
      DELETE FROM tbl_OrdensFrete
      WHERE Status_Ordem = 'Cancelado';
    • Clique no botão ! Executar.
  4. Confirmação do SGBD:
    • O Access emitirá a caixa de diálogo de segurança: “Você está prestes a excluir X linha(s) da tabela especificada.”
    • Clique em Sim.
  5. Abra a tabela tbl_OrdensFrete: nenhum frete cancelado existe mais na fila operacional!
  6. Salve a consulta como: qry_AcaoExpurgoCancelados.

✅ Resultado Esperado (Prática 2):

A rotina remove com total segurança os registros cancelados, limpando a base operacional sem tocar nos fretes em andamento ou entregues.


📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o banco de dados e feche o Access.
  2. Nomeie o arquivo: FastLog_BD_Cap17_SeuNome_SeuSobrenome.accdb.
  3. Acesse o Microsoft Teams na sua turma.
  4. Abra a tarefa: “Banco de Dados - Cap 17: Consultas de Ação UPDATE e DELETE”.
  5. Anexe o seu arquivo .accdb e conclua o envio clicando em Entregar (Turn In).

💡 Checkpoint de Gestão & TI

Por que operadores comuns nunca devem ter permissão para rodar comandos UPDATE e DELETE livremente? Porque uma vírgula ou um filtro esquecido pode alterar ou apagar o patrimônio financeiro inteiro de uma corporação em 1 segundo. Consultas de ação são as ferramentas mais poderosas de um DBA e devem ser protegidas por senhas, permissões restritas e procedimentos padronizados de homologação.


🔥 Desafio de Fixação: Reajuste Regional por Filial de Origem

A transportadora obteve um desconto comercial nos pedágios da Região Sul e decidiu repassar uma bonificação de 3% de redução no valor dos fretes cuja origem seja a filial de Curitiba (ID_Filial_Origem = 3).

Escreva uma consulta de ação SQL no Access que atenda aos seguintes requisitos:

  1. Utilize o comando UPDATE na tabela tbl_OrdensFrete.
  2. Aplique uma redução de 3% (Valor_Frete = Round(Valor_Frete * 0.97, 2)).
  3. Restrinja o reajuste apenas para ordens com ID_Filial_Origem = 3 E cujo status seja 'Agendado'.
  4. Salve a consulta com o nome: qry_AcaoBonificacaoCuritiba.

🔑 Revelar Gabarito Oficial e Material de Apoio da Aula (Clique para expandir)
💡 Incentivo Pedagógico: Tente resolver as práticas e o desafio de fixação por conta própria antes de abrir o gabarito. Seus erros e tentativas durante o laboratório são a chave para a consolidação real do aprendizado!

Código SQL Oficial do Desafio de Fixação:

1
2
3
UPDATE tbl_OrdensFrete
SET Valor_Frete = Round(Valor_Frete * 0.97, 2)
WHERE ID_Filial_Origem = 3 AND Status_Ordem = 'Agendado';

📥 Download dos Scripts desta Aula:
Baixe o arquivo de script Capitulo_17.sql ou o pacote compactado (.zip) com os comandos SQL e esquemas da aula.


📝 Atividade Extra: Questionário de Fixação (Caderno)

Instruções: Responda no caderno, de próprio punho, as 10 perguntas reflexivas abaixo com base no conteúdo deste capítulo. Ao concluir, apresente o caderno ao professor para conferência e visto.

  1. Qual é a diferença fundamental entre uma Consulta de Seleção (SELECT) e uma Consulta de Ação no Access?
  2. No Cenário Prático da FastLog, qual foi o prejuízo financeiro causado pelo erro de digitação manual na calculadora do assistente?
  3. O que acontece se um desenvolvedor executar o comando UPDATE sem declarar a cláusula WHERE?
  4. Qual é a finalidade da função matemática Round(valor, 2) nos cálculos de reajuste tarifário em SQL?
  5. O que acontece se executarmos o comando DELETE FROM tbl_OrdensFrete; sem nenhuma condição de filtro?
  6. Por que o comando “Desfazer” (Ctrl + Z) não funciona após confirmarmos a execução de uma consulta de ação no banco de dados?
  7. Explique a Regra Sagrada de Segurança do DBA recomendada antes de executar qualquer comando UPDATE ou DELETE.
  8. Como o Microsoft Access avisa visualmente o operador de que uma consulta de ação está prestes a modificar dados físicos?
  9. Na Prática Obrigatória 2, por que foi importante filtrar apenas registros com status 'Cancelado' na rotina de expurgo?
  10. No Desafio de Fixação, como a fórmula Valor_Frete * 0.97 consegue aplicar matematicamente um desconto de 3% sobre o frete?