Banco de Dados Relacional | Anotações Introdutórias
- #SQL Server
- #PostgreSQL
- #Banco de dados relacional
O que é um Banco de Dados?
Um banco de dados (BD) é utilizado para organizar e armazenar os dados de um sistema ou empresa. Em um banco de dados relacional, os dados são armazenados em tabelas que se relacionam entre si. Por exemplo:
Produtos podem estar relacionados com categorias ou fornecedores.
Um cliente pode estar relacionado a várias transações.
Conceito de Dados e Informação
Dados: São valores brutos ou observações armazenadas, como nomes ou números. Exemplos:
Nomes: "João", "Árvore".
Números: 10, 20.50.
Informações: Resultam do agrupamento e processamento de dados para gerar sentido. Exemplo:
Dado: "Árvore (Seringueira)".
Informação: "A madeira da árvore é usada para fabricar móveis, a seiva para criar a borracha."
Dados: Fatos brutos, como nomes, números ou eventos. Por exemplo: "João", "Carro", "23".
Informação: Dados organizados que geram sentido ou valor. Por exemplo:
Dado: "Carro".
Informação: "O carro pertence a João e foi comprado por R$30.000."
Estrutura dos Bancos de Dados Relacionais
Tabelas e Relacionamentos
Tabelas: Conjuntos de dados organizados em linhas e colunas. Cada linha é um registro, e cada coluna é um atributo.
Chaves Primárias (Primary Key): Um identificador único para cada registro da tabela.
Chaves Estrangeiras (Foreign Key): Um campo que referencia a chave primária de outra tabela, estabelecendo um relacionamento.
Exemplo prático de criação de tabelas e relacionamento:
CREATE TABLE cliente (
id SERIAL PRIMARY KEY,
nome VARCHAR(50),
email VARCHAR(100)
);
CREATE TABLE transacao (
id SERIAL PRIMARY KEY,
cliente_id INT NOT NULL,
valor NUMERIC(10,2),
FOREIGN KEY (cliente_id) REFERENCES cliente(id)
);
Nesse exemplo:
A tabela cliente armazena os dados dos clientes.
A tabela transacao armazena as transações realizadas por esses clientes, vinculadas pelo campo cliente_id.
Comandos Fundamentais
SELECT
O comando SELECT é usado para buscar dados em uma tabela.
Para retornar todas as colunas de uma tabela:
SELECT * FROM cliente;
Para retornar colunas específicas:
SELECT nome, email FROM cliente;
Adicionando filtros com WHERE:
SELECT nome FROM cliente
WHERE email LIKE '%gmail.com';
Exemplo completo com filtro:
SELECT nome, email
FROM cliente
WHERE ativo = TRUE;
CREATE TABLE
Criação de uma tabela para armazenar dados.
Exemplo de criação de tabela para produtos:
CREATE TABLE produto (
codigo INT NOT NULL,
descricao VARCHAR(100) NOT NULL,
data_validade DATE,
ean VARCHAR(15) NOT NULL,
ind_inativo INT NOT NULL DEFAULT 0,
PRIMARY KEY (codigo)
);
INSERT
Inserir dados em uma tabela:
Inserindo valores em todas as colunas:
INSERT INTO produto VALUES (1, 'Produto A', '2024-12-31', '1234567890123', 0);
Inserindo valores em colunas específicas:
INSERT INTO produto (codigo, descricao, ean)
VALUES (2, 'Produto B', '1234567890456');
UPDATE
Atualizar dados existentes em uma tabela:
UPDATE produto
SET descricao = 'Produto Atualizado'
WHERE codigo = 1;
DELETE
Excluir registros de uma tabela:
DELETE FROM produto
WHERE codigo = 2;
Atenção: Sempre use WHERE para evitar excluir todos os registros.
INDEX
Índices ajudam a acelerar as consultas.
Criando um índice para a tabela produto usando o campo ean:
CREATE INDEX idx_produto_ean
ON produto (ean);
Relacionando Tabelas
Foreign Keys e Relacionamentos
As tabelas podem ser relacionadas utilizando Foreign Keys. Exemplo:
ALTER TABLE estoque
ADD CONSTRAINT fk_estoque_produto
FOREIGN KEY (codigo_produto)
REFERENCES produto(codigo);
Esse comando relaciona a tabela estoque com a tabela produto, dizendo que codigo_produto é uma chave estrangeira que referencia codigo em produto.
Joins: Relacionando Dados
INNER JOIN
Combina registros que possuem correspondência em ambas as tabelas.
Exemplo:
SELECT cliente.nome, transacao.valor
FROM cliente
INNER JOIN transacao ON cliente.id = transacao.cliente_id;
LEFT JOIN
Retorna todos os registros da tabela da esquerda, mesmo que não haja correspondência na tabela da direita.
SELECT cliente.nome, transacao.valor
FROM cliente
LEFT JOIN transacao ON cliente.id = transacao.cliente_id;
RIGHT JOIN
Retorna todos os registros da tabela da direita, mesmo que não haja correspondência na tabela da esquerda.
SELECT cliente.nome, transacao.valor
FROM cliente
RIGHT JOIN transacao ON cliente.id = transacao.cliente_id;
FULL JOIN
Retorna todos os registros de ambas as tabelas, com valores NULL onde não houver correspondência.
SELECT cliente.nome, transacao.valor
FROM cliente
FULL JOIN transacao ON cliente.id = transacao.cliente_id;
CTEs: Common Table Expressions
CTEs organizam consultas longas em blocos reutilizáveis.
Exemplo:
WITH transacoes_altas AS (
SELECT cliente_id, SUM(valor) AS total
FROM transacao
WHERE valor > 1000
GROUP BY cliente_id
)
SELECT cliente.nome, transacoes_altas.total
FROM transacoes_altas
JOIN cliente ON cliente.id = transacoes_altas.cliente_id;
Consultas e Funções Úteis
COUNT: Contar registros.
SELECT COUNT(*) AS total_clientes FROM cliente;
SUM: Somar valores.
SELECT SUM(valor) AS total_transacoes FROM transacao;
AVG: Calcular a média.
SELECT AVG(valor) AS media_transacoes FROM transacao;
LIKE: Realizar buscas parciais.
SELECT * FROM produto
WHERE descricao LIKE '%Produto%';
Gerenciamento de Estruturas
Excluir tabela:
DROP TABLE produto;
Excluir chave estrangeira:
ALTER TABLE estoque
DROP CONSTRAINT fk_estoque_produto;
Com essa explicação detalhada, tanto a teoria quanto a prática de bancos de dados se tornam mais acessíveis, especialmente para iniciantes. Se precisar de mais exemplos ou revisões, é só pedir!