🗄️

Banco de Dados

Especializado em bancos de dados relacionais e NoSQL, incluindo Oracle, SQL Server, Cassandra e MongoDB para soluções escaláveis e de alta performance.

Tecnologias e Ferramentas

Oracle

Relacional

Oracle Database - RDBMS enterprise

📄 Ver Oracle →

SQL Server

Relacional

Microsoft SQL Server

🚧 Em Planejamento

MySQL

Relacional

Banco de dados open source

🚧 Em Planejamento

PostgreSQL

Relacional

Banco de dados relacional avançado

🚧 Em Planejamento

Cassandra

NoSQL

Banco NoSQL distribuído

🚧 Em Planejamento

MongoDB

NoSQL

Banco de dados orientado a documentos

🚧 Em Planejamento

DynamoDB

NoSQL

NoSQL gerenciado AWS

🚧 Em Planejamento

Redis

NoSQL

Banco de dados em memória

🚧 Em Planejamento

Modelagem de Dados

Conceitos

Design e modelagem de esquemas de bancos de dados, normalização e relacionamentos

🚧 Em Planejamento

Mapeamento de Requisitos

Conceitos

Análise de requisitos e mapeamento para estruturas de dados

🚧 Em Planejamento

Performance - Boas Práticas

Conceitos

Otimização de queries, índices, tuning e melhores práticas de performance

🚧 Em Planejamento

SQL - Guia Prático

Comandos SQL organizados por categoria: DML (Manipulação), DDL (Definição) e DCL (Controle).

📊

DML - Data Manipulation Language

Comandos para manipulação de dados: consultar, inserir, atualizar e deletar registros.

SELECT

Consulta dados de uma ou mais tabelas

SELECT Básico
-- Selecionar todas as colunas
SELECT * FROM clientes;

-- Selecionar colunas específicas
SELECT nome, email, telefone 
FROM clientes;

-- SELECT com WHERE (filtro)
SELECT nome, email 
FROM clientes 
WHERE cidade = 'São Paulo';

-- SELECT com ORDER BY (ordenação)
SELECT nome, salario 
FROM funcionarios 
ORDER BY salario DESC;

-- SELECT com LIMIT (limitar resultados)
SELECT * FROM produtos 
ORDER BY preco DESC 
LIMIT 10;
SELECT com JOIN
-- INNER JOIN: Intersecção entre tabelas
SELECT 
    p.pedido_id,
    p.data_pedido,
    c.nome_cliente,
    c.email
FROM pedidos p
INNER JOIN clientes c ON p.cliente_id = c.cliente_id;

-- LEFT JOIN: Todos da esquerda + correspondentes da direita
SELECT 
    c.nome_cliente,
    p.pedido_id,
    p.valor_total
FROM clientes c
LEFT JOIN pedidos p ON c.cliente_id = p.cliente_id;
SELECT com Agregação
-- COUNT: Contar registros
SELECT COUNT(*) AS total_clientes 
FROM clientes;

-- SUM: Soma de valores
SELECT 
    categoria,
    SUM(valor_total) AS total_vendas
FROM vendas
GROUP BY categoria;

-- AVG: Média de valores
SELECT 
    departamento,
    AVG(salario) AS salario_medio
FROM funcionarios
GROUP BY departamento;

-- MAX/MIN: Valores máximo e mínimo
SELECT 
    MAX(preco) AS preco_maximo,
    MIN(preco) AS preco_minimo
FROM produtos;

INSERT

Insere novos registros em uma tabela

INSERT Simples
-- Inserir um único registro
INSERT INTO clientes (nome, email, telefone, cidade)
VALUES ('João Silva', 'joao@email.com', '11999999999', 'São Paulo');

-- Inserir múltiplos registros
INSERT INTO produtos (nome, preco, categoria, estoque)
VALUES 
    ('Notebook Dell', 3500.00, 'Informática', 10),
    ('Mouse Logitech', 89.90, 'Acessórios', 50),
    ('Teclado Mecânico', 299.90, 'Acessórios', 30);

-- INSERT a partir de outra tabela
INSERT INTO clientes_backup (nome, email)
SELECT nome, email 
FROM clientes 
WHERE ativo = 1;
INSERT com Subquery
-- Inserir dados calculados
INSERT INTO relatorio_vendas (mes, total_vendas)
SELECT 
    MONTH(data_pedido) AS mes,
    SUM(valor_total) AS total_vendas
FROM pedidos
WHERE YEAR(data_pedido) = 2024
GROUP BY MONTH(data_pedido);

UPDATE

Atualiza registros existentes em uma tabela

UPDATE Simples
-- Atualizar um registro específico
UPDATE clientes 
SET email = 'novo_email@email.com'
WHERE cliente_id = 123;

-- Atualizar múltiplas colunas
UPDATE produtos 
SET 
    preco = 999.90,
    estoque = estoque - 5,
    data_atualizacao = GETDATE()
WHERE produto_id = 456;

-- UPDATE com condição composta
UPDATE funcionarios 
SET salario = salario * 1.10  -- Aumento de 10%
WHERE departamento = 'TI' 
  AND data_admissao < '2020-01-01';
UPDATE com JOIN
-- Atualizar baseado em outra tabela
UPDATE p
SET p.desconto = c.desconto_padrao
FROM pedidos p
INNER JOIN clientes c ON p.cliente_id = c.cliente_id
WHERE p.status = 'Pendente';

DELETE

Remove registros de uma tabela

DELETE Simples
-- Deletar registro específico
DELETE FROM clientes 
WHERE cliente_id = 123;

-- Deletar múltiplos registros
DELETE FROM pedidos 
WHERE data_pedido < '2020-01-01' 
  AND status = 'Cancelado';

-- DELETE com subquery
DELETE FROM produtos 
WHERE produto_id NOT IN (
    SELECT DISTINCT produto_id 
    FROM pedidos_items
);
TRUNCATE TABLE
-- Remover todos os registros (mais rápido que DELETE)
TRUNCATE TABLE logs_antigos;

-- CUIDADO: TRUNCATE não pode ser revertido e reseta contadores de ID
🏗️

DDL - Data Definition Language

Comandos para definir e modificar a estrutura de objetos do banco de dados (tabelas, índices, views).

CREATE TABLE

Cria uma nova tabela no banco de dados

CREATE TABLE Básico
-- Criar tabela simples
CREATE TABLE clientes (
    cliente_id INT PRIMARY KEY IDENTITY(1,1),
    nome VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    telefone VARCHAR(20),
    data_cadastro DATETIME DEFAULT GETDATE()
);

-- Criar tabela com chaves estrangeiras
CREATE TABLE pedidos (
    pedido_id INT PRIMARY KEY IDENTITY(1,1),
    cliente_id INT NOT NULL,
    data_pedido DATETIME DEFAULT GETDATE(),
    valor_total DECIMAL(10,2),
    status VARCHAR(20) DEFAULT 'Pendente',
    FOREIGN KEY (cliente_id) REFERENCES clientes(cliente_id)
);
CREATE TABLE com Constraints
-- Criar tabela com múltiplas constraints
CREATE TABLE produtos (
    produto_id INT PRIMARY KEY IDENTITY(1,1),
    nome VARCHAR(200) NOT NULL,
    preco DECIMAL(10,2) CHECK (preco > 0),
    categoria VARCHAR(50),
    estoque INT DEFAULT 0 CHECK (estoque >= 0),
    ativo BIT DEFAULT 1,
    data_criacao DATETIME DEFAULT GETDATE(),
    CONSTRAINT UQ_produto_nome UNIQUE (nome)
);
CREATE TABLE como SELECT
-- Criar tabela a partir de uma query
CREATE TABLE clientes_premium AS
SELECT 
    cliente_id,
    nome,
    email,
    SUM(valor_total) AS total_compras
FROM clientes c
INNER JOIN pedidos p ON c.cliente_id = p.cliente_id
GROUP BY cliente_id, nome, email
HAVING SUM(valor_total) > 10000;

ALTER TABLE

Modifica a estrutura de uma tabela existente

Adicionar Colunas
-- Adicionar uma coluna
ALTER TABLE clientes 
ADD cidade VARCHAR(100);

-- Adicionar múltiplas colunas
ALTER TABLE produtos 
ADD 
    descricao TEXT,
    fabricante VARCHAR(100),
    garantia_meses INT DEFAULT 12;
Modificar Colunas
-- Alterar tipo de dados
ALTER TABLE clientes 
ALTER COLUMN telefone VARCHAR(30);

-- Alterar constraint (Oracle)
ALTER TABLE produtos 
MODIFY preco DECIMAL(12,2);

-- SQL Server: pode precisar recriar a coluna
ALTER TABLE produtos 
ALTER COLUMN preco DECIMAL(12,2) NOT NULL;
Remover Colunas
-- Remover coluna
ALTER TABLE clientes 
DROP COLUMN cidade;

-- Remover múltiplas colunas
ALTER TABLE produtos 
DROP COLUMN descricao, fabricante;
Adicionar Constraints
-- Adicionar chave primária
ALTER TABLE funcionarios 
ADD CONSTRAINT PK_funcionarios PRIMARY KEY (funcionario_id);

-- Adicionar chave estrangeira
ALTER TABLE pedidos 
ADD CONSTRAINT FK_pedidos_cliente 
FOREIGN KEY (cliente_id) REFERENCES clientes(cliente_id);

-- Adicionar UNIQUE constraint
ALTER TABLE clientes 
ADD CONSTRAINT UQ_clientes_email UNIQUE (email);

-- Adicionar CHECK constraint
ALTER TABLE produtos 
ADD CONSTRAINT CHK_preco_positivo CHECK (preco > 0);
Remover Constraints
-- Remover constraint
ALTER TABLE produtos 
DROP CONSTRAINT CHK_preco_positivo;

ALTER TABLE pedidos 
DROP CONSTRAINT FK_pedidos_cliente;

DROP TABLE

Remove uma tabela do banco de dados

DROP TABLE
-- Remover tabela
DROP TABLE logs_antigos;

-- Remover tabela se existir (evita erro)
DROP TABLE IF EXISTS tabela_teste;

-- CUIDADO: DROP TABLE remove a tabela e todos os dados permanentemente!

CREATE INDEX

Cria índices para melhorar performance de consultas

CREATE INDEX
-- Criar índice simples
CREATE INDEX idx_clientes_email 
ON clientes(email);

-- Criar índice composto
CREATE INDEX idx_pedidos_cliente_data 
ON pedidos(cliente_id, data_pedido);

-- Criar índice único
CREATE UNIQUE INDEX idx_produtos_codigo 
ON produtos(codigo_barras);

-- Criar índice com ordenação
CREATE INDEX idx_produtos_preco_desc 
ON produtos(preco DESC);
DROP INDEX
-- Remover índice
DROP INDEX idx_clientes_email ON clientes;

CREATE VIEW

Cria uma view (visão) virtual baseada em uma query

CREATE VIEW
-- Criar view simples
CREATE VIEW vw_clientes_ativos AS
SELECT 
    cliente_id,
    nome,
    email,
    telefone
FROM clientes
WHERE ativo = 1;

-- Criar view com JOIN
CREATE VIEW vw_pedidos_completo AS
SELECT 
    p.pedido_id,
    p.data_pedido,
    p.valor_total,
    c.nome AS nome_cliente,
    c.email AS email_cliente
FROM pedidos p
INNER JOIN clientes c ON p.cliente_id = c.cliente_id;

-- Usar a view
SELECT * FROM vw_clientes_ativos;
SELECT * FROM vw_pedidos_completo WHERE valor_total > 500;
ALTER/DROP VIEW
-- Alterar view (recriar)
ALTER VIEW vw_clientes_ativos AS
SELECT 
    cliente_id,
    nome,
    email,
    telefone,
    data_cadastro
FROM clientes
WHERE ativo = 1;

-- Remover view
DROP VIEW vw_clientes_ativos;
🔒

DCL - Data Control Language

Comandos para controlar acesso e permissões no banco de dados (GRANT, REVOKE).

GRANT

Concede permissões a usuários ou roles

GRANT - Permissões de Objeto
-- Conceder SELECT em uma tabela
GRANT SELECT ON clientes TO usuario_vendedor;

-- Conceder múltiplas permissões
GRANT SELECT, INSERT, UPDATE ON produtos TO usuario_estoque;

-- Conceder todas as permissões
GRANT ALL PRIVILEGES ON pedidos TO usuario_admin;

-- Conceder permissão em múltiplas tabelas
GRANT SELECT ON clientes, produtos, pedidos TO usuario_relatorios;
GRANT - Permissões de Schema
-- Conceder permissões em todo o schema
GRANT SELECT ON SCHEMA::dbo TO usuario_consultas;

-- Conceder permissão de criar objetos
GRANT CREATE TABLE TO usuario_developer;

-- Conceder permissão de alterar estrutura
GRANT ALTER ON SCHEMA::dbo TO usuario_dba;
GRANT - Roles
-- Criar role
CREATE ROLE role_vendedores;

-- Conceder permissões ao role
GRANT SELECT, INSERT, UPDATE ON pedidos TO role_vendedores;
GRANT SELECT ON produtos TO role_vendedores;

-- Adicionar usuário ao role
ALTER ROLE role_vendedores ADD MEMBER usuario_vendedor1;
ALTER ROLE role_vendedores ADD MEMBER usuario_vendedor2;
GRANT - Com WITH GRANT OPTION
-- Permitir que o usuário conceda permissões a outros
GRANT SELECT ON clientes TO usuario_gerente 
WITH GRANT OPTION;

-- Agora usuario_gerente pode fazer:
-- GRANT SELECT ON clientes TO outro_usuario;

REVOKE

Revoga (remove) permissões de usuários ou roles

REVOKE - Permissões
-- Revogar permissão específica
REVOKE SELECT ON clientes FROM usuario_vendedor;

-- Revogar múltiplas permissões
REVOKE INSERT, UPDATE ON produtos FROM usuario_estoque;

-- Revogar todas as permissões
REVOKE ALL PRIVILEGES ON pedidos FROM usuario_admin;

-- Revogar WITH GRANT OPTION
REVOKE GRANT OPTION FOR SELECT ON clientes FROM usuario_gerente;
REVOKE - Roles
-- Remover usuário de um role
ALTER ROLE role_vendedores DROP MEMBER usuario_vendedor1;

-- Revogar permissões do role
REVOKE SELECT ON pedidos FROM role_vendedores;

-- Remover role (após revogar todas as permissões)
DROP ROLE role_vendedores;

CREATE USER / LOGIN

Cria usuários e logins no banco de dados

CREATE USER
-- SQL Server: Criar login
CREATE LOGIN novo_usuario 
WITH PASSWORD = 'SenhaSegura123!';

-- Criar usuário associado ao login
CREATE USER novo_usuario 
FOR LOGIN novo_usuario;

-- Oracle: Criar usuário diretamente
CREATE USER novo_usuario 
IDENTIFIED BY SenhaSegura123;

-- Conceder permissão de conexão (Oracle)
GRANT CONNECT TO novo_usuario;

-- Conceder permissão de criação de objetos
GRANT RESOURCE TO novo_usuario;
ALTER USER / DROP USER
-- Alterar senha (SQL Server)
ALTER LOGIN novo_usuario 
WITH PASSWORD = 'NovaSenha456!';

-- Oracle: Alterar senha
ALTER USER novo_usuario 
IDENTIFIED BY NovaSenha456;

-- Remover usuário (Oracle)
DROP USER novo_usuario CASCADE;

-- SQL Server: Remover usuário e login
DROP USER novo_usuario;
DROP LOGIN novo_usuario;

Áreas de Atuação

🗄️ Bancos Relacionais

Oracle, SQL Server, MySQL, PostgreSQL para dados estruturados.

📦 Bancos NoSQL

Cassandra, MongoDB, DynamoDB para dados não estruturados.

⚡ Performance - Boas Práticas

Otimização de queries, índices, tuning e melhores práticas de performance.

📊 Modelagem de Dados

Design e modelagem de esquemas de bancos de dados, normalização e relacionamentos.

📋 Mapeamento de Requisitos

Análise de requisitos e mapeamento para estruturas de dados.

🔄 Replicação

Configuração de replicação e alta disponibilidade.

🔒 Segurança

Implementação de segurança e controle de acesso.

← Voltar para Habilidades