Um guia hands-on para modelagem, criação e manipulação de dados utilizando SQL.
Antes de escrever comandos, é fundamental compreender a estrutura de um Banco de Dados Relacional (RDBMS):
Estrutura bidimensional composta por colunas (atributos) e linhas (registros/tuplas).
Identificador único de cada registro em uma tabela. Não pode conter valores nulos ou duplicados.
Campo que cria um relacionamento entre duas tabelas, apontando para a PK de outra tabela.
A Linguagem de Definição de Dados (DDL) permite criar e modificar a estrutura do banco.
-- Criar a base de dados CREATE DATABASE LojaVirtual; -- Selecionar a base de dados para uso USE LojaVirtual;
-- Tabela 1: Clientes CREATE TABLE clientes ( id_cliente INT PRIMARY KEY AUTO_INCREMENT, nome VARCHAR(100) NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, data_cadastro DATE DEFAULT CURRENT_DATE ); -- Tabela 2: Categorias CREATE TABLE categorias ( id_categoria INT PRIMARY KEY AUTO_INCREMENT, nome_categoria VARCHAR(50) NOT NULL ); -- Tabela 3: Produtos (Com FK para Categorias) CREATE TABLE produtos ( id_produto INT PRIMARY KEY AUTO_INCREMENT, nome_produto VARCHAR(100) NOT NULL, preco DECIMAL(10, 2) NOT NULL, estoque INT DEFAULT 0, id_categoria INT, FOREIGN KEY (id_categoria) REFERENCES categorias(id_categoria) ); -- Tabela 4: Pedidos (Com FK para Clientes) CREATE TABLE pedidos ( id_pedido INT PRIMARY KEY AUTO_INCREMENT, id_cliente INT, data_pedido DATETIME DEFAULT CURRENT_TIMESTAMP, total DECIMAL(10, 2), FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente) );
A Linguagem de Manipulação de Dados (DML) lida com a inclusão, alteração e remoção de registros.
-- Inserindo Categorias INSERT INTO categorias (nome_categoria) VALUES ('Eletrônicos'), ('Periféricos'), ('Livros'); -- Inserindo Clientes INSERT INTO clientes (nome, email) VALUES ('Ana Silva', 'ana@email.com'), ('Carlos Souza', 'carlos@email.com'), ('Beatriz Lima', 'beatriz@email.com'); -- Inserindo Produtos INSERT INTO produtos (nome_produto, preco, estoque, id_categoria) VALUES ('Smartphone X', 2500.00, 15, 1), ('Teclado Mecânico', 350.50, 30, 2), ('Mouse Sem Fio', 120.00, 50, 2), ('Livro de SQL', 89.90, 100, 3); -- Inserindo Pedidos INSERT INTO pedidos (id_cliente, total) VALUES (1, 2850.50), (2, 120.00), (1, 89.90);
-- Aplicando 10% de desconto nos produtos da categoria Eletrônicos (id 1) UPDATE produtos SET preco = preco * 0.90 WHERE id_categoria = 1;
-- Deletando um produto específico mantendo a integridade DELETE FROM produtos WHERE id_produto = 3;
-- Listar produtos com preço maior que 200 reais ordenados pelo preço SELECT nome_produto, preco FROM produtos WHERE preco > 200.00 ORDER BY preco DESC;
Combine dados de múltiplas tabelas usando as chaves estrangeiras:
-- Listar produtos juntamente com os nomes de suas categorias SELECT p.nome_produto, p.preco, c.nome_categoria FROM produtos p INNER JOIN categorias c ON p.id_categoria = c.id_categoria;
-- Calcular o total gasto por cada cliente SELECT c.nome, COUNT(p.id_pedido) AS total_pedidos, SUM(p.total) AS valor_total_gasto FROM clientes c LEFT JOIN pedidos p ON c.id_cliente = p.id_cliente GROUP BY c.id_cliente, c.nome;
Resolva os desafios abaixo para consolidar o aprendizado:
INNER JOIN e GROUP BY que mostre a quantidade de produtos cadastrados por categoria.