Database Management Systems: A Complete Guide Help

Laboratório: Manipulação de Dados

Objetivo

Praticar operações DML (Data Manipulation Language) básicas em um banco de dados relacional, aplicando boas práticas de manipulação de dados.

Cenário

Você é um desenvolvedor de banco de dados em uma empresa de e-commerce que precisa implementar operações de manipulação de dados para o sistema de gerenciamento de pedidos.

Setup Inicial

-- Carregar dados de exemplo INSERT INTO lab_workspace.clientes (nome, email, segmento, limite_credito) VALUES ('Ana Silva', 'ana.silva@email.com', 'Varejo', 2000.00), ('Bruno Costa', 'bruno@email.com', 'Atacado', 5000.00), ('Carla Mendes', 'carla@email.com', 'Varejo', 1500.00), ('Daniel Oliveira', 'daniel@email.com', 'Corporativo', 10000.00), ('Elena Santos', 'elena@email.com', 'Varejo', 2500.00); INSERT INTO lab_workspace.produtos (codigo, nome, descricao, preco, estoque, categoria) VALUES ('PROD001', 'Smartphone X', 'Smartphone avançado com câmera de alta resolução', 1299.99, 50, 'Eletrônicos'), ('PROD002', 'Notebook Pro', 'Notebook para uso profissional', 3499.99, 20, 'Informática'), ('PROD003', 'Fones Bluetooth', 'Fones de ouvido sem fio', 199.99, 100, 'Acessórios'), ('PROD004', 'Monitor 24"', 'Monitor LED Full HD', 799.99, 30, 'Informática'), ('PROD005', 'Teclado Mecânico', 'Teclado para gamers', 249.99, 45, 'Periféricos'); -- Registrar início do laboratório INSERT INTO lab_workspace.lab_progress (lab_name) VALUES ('Manipulação de Dados');

Parte 1: Operações CRUD Básicas

1.1 Inserção de Dados

-- Inserir um novo cliente INSERT INTO lab_workspace.clientes (nome, email, segmento, limite_credito) VALUES ('Fernando Gomes', 'fernando@email.com', 'Varejo', 3000.00); -- Inserir múltiplos produtos INSERT INTO lab_workspace.produtos (codigo, nome, descricao, preco, estoque, categoria) VALUES ('PROD006', 'Mouse Sem Fio', 'Mouse ergonômico', 89.90, 60, 'Periféricos'), ('PROD007', 'Caixa de Som', 'Caixa de som bluetooth', 159.90, 25, 'Acessórios'); -- Inserir um pedido com seus itens INSERT INTO lab_workspace.pedidos (cliente_id, observacoes) VALUES (1, 'Entrega prioritária'); INSERT INTO lab_workspace.itens_pedido (pedido_id, produto_id, quantidade, preco_unitario) VALUES (1, 1, 1, 1299.99), (1, 3, 2, 199.99); UPDATE lab_workspace.pedidos SET valor_total = ( SELECT SUM(quantidade * preco_unitario) FROM lab_workspace.itens_pedido WHERE pedido_id = 1 ) WHERE id = 1;

1.2 Consulta de Dados

-- Consulta simples SELECT * FROM lab_workspace.clientes WHERE segmento = 'Varejo'; -- Consulta com JOIN SELECT p.id as pedido_id, c.nome as cliente, p.data_pedido, p.valor_total, p.status FROM lab_workspace.pedidos p JOIN lab_workspace.clientes c ON p.cliente_id = c.id; -- Consulta detalhada de pedido SELECT p.id as pedido_id, c.nome as cliente, pr.nome as produto, ip.quantidade, ip.preco_unitario, (ip.quantidade * ip.preco_unitario) as subtotal FROM lab_workspace.pedidos p JOIN lab_workspace.clientes c ON p.cliente_id = c.id JOIN lab_workspace.itens_pedido ip ON p.id = ip.pedido_id JOIN lab_workspace.produtos pr ON ip.produto_id = pr.id WHERE p.id = 1;

1.3 Atualização de Dados

-- Atualização simples UPDATE lab_workspace.clientes SET email = 'ana.silva.nova@email.com' WHERE id = 1; -- Atualização com cálculo UPDATE lab_workspace.produtos SET preco = preco * 1.05 WHERE categoria = 'Eletrônicos'; -- Atualização com subconsulta UPDATE lab_workspace.pedidos SET status = 'Aprovado' WHERE cliente_id IN ( SELECT id FROM lab_workspace.clientes WHERE limite_credito > 2000.00 );

1.4 Exclusão de Dados

-- Exclusão simples DELETE FROM lab_workspace.itens_pedido WHERE pedido_id = 1 AND produto_id = 3; -- Exclusão com subconsulta DELETE FROM lab_workspace.produtos WHERE estoque = 0 AND id NOT IN ( SELECT produto_id FROM lab_workspace.itens_pedido ); -- Exclusão em cascata DELETE FROM lab_workspace.itens_pedido WHERE pedido_id = 1; DELETE FROM lab_workspace.pedidos WHERE id = 1;

Parte 2: Manipulação em Lote

2.1 Inserção em Lote

-- Inserir múltiplos clientes INSERT INTO lab_workspace.clientes (nome, email, segmento, limite_credito) SELECT 'Cliente ' || i, 'cliente' || i || '@email.com', CASE WHEN i % 3 = 0 THEN 'Varejo' WHEN i % 3 = 1 THEN 'Atacado' ELSE 'Corporativo' END, 1000 * (i % 10 + 1) FROM generate_series(1, 10) i; -- Verificar inserção SELECT COUNT(*) FROM lab_workspace.clientes;

2.2 Atualização em Lote

-- Atualizar status de múltiplos pedidos UPDATE lab_workspace.pedidos SET status = 'Processando' WHERE status = 'Pendente'; -- Atualizar preços com base na categoria UPDATE lab_workspace.produtos SET preco = preco * 0.95 -- 5% desconto WHERE categoria = 'Eletrônicos';

2.3 Exclusão em Lote

-- Excluir pedidos antigos DELETE FROM lab_workspace.itens_pedido WHERE pedido_id IN ( SELECT id FROM lab_workspace.pedidos WHERE status = 'Cancelado' ); DELETE FROM lab_workspace.pedidos WHERE status = 'Cancelado';

Conclusão

Neste laboratório, você praticou as operações DML básicas:

  • Inserção de dados (INSERT)

  • Consulta de dados (SELECT)

  • Atualização de dados (UPDATE)

  • Exclusão de dados (DELETE)

Estas operações são fundamentais para qualquer sistema de banco de dados e formam a base para manipulação de dados em aplicações.

09 maio 2025