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
SQL Server
RelacionalMicrosoft SQL Server
🚧 Em PlanejamentoMySQL
RelacionalBanco de dados open source
🚧 Em PlanejamentoPostgreSQL
RelacionalBanco de dados relacional avançado
🚧 Em PlanejamentoCassandra
NoSQLBanco NoSQL distribuído
🚧 Em PlanejamentoMongoDB
NoSQLBanco de dados orientado a documentos
🚧 Em PlanejamentoDynamoDB
NoSQLNoSQL gerenciado AWS
🚧 Em PlanejamentoRedis
NoSQLBanco de dados em memória
🚧 Em PlanejamentoModelagem de Dados
ConceitosDesign e modelagem de esquemas de bancos de dados, normalização e relacionamentos
🚧 Em PlanejamentoMapeamento de Requisitos
ConceitosAnálise de requisitos e mapeamento para estruturas de dados
🚧 Em PlanejamentoPerformance - Boas Práticas
ConceitosOtimização de queries, índices, tuning e melhores práticas de performance
🚧 Em PlanejamentoSQL - 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.