📊

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
SELECT 
    departamento,
    AVG(salario) AS salario_medio
FROM funcionarios
GROUP BY departamento;

INSERT

Inserir novos registros em uma tabela

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

-- Inserir múltiplos registros
INSERT INTO produtos (nome, preco, categoria)
VALUES 
    ('Notebook', 3500.00, 'Informática'),
    ('Mouse', 50.00, 'Informática'),
    ('Teclado', 150.00, 'Informática');
INSERT com SELECT
-- Inserir dados de outra tabela
INSERT INTO clientes_backup (nome, email)
SELECT nome, email
FROM clientes
WHERE data_cadastro < '2020-01-01';

UPDATE

Atualizar registros existentes

UPDATE Simples
-- Atualizar um registro específico
UPDATE clientes 
SET telefone = '11988888888'
WHERE cliente_id = 123;

-- Atualizar múltiplos registros
UPDATE produtos 
SET preco = preco * 1.10
WHERE categoria = 'Eletrônicos';

-- UPDATE com JOIN
UPDATE pedidos p
INNER JOIN clientes c ON p.cliente_id = c.cliente_id
SET p.status = 'Cancelado'
WHERE c.cidade = 'São Paulo';

DELETE

Remover 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
);
🏗️

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 AUTO_INCREMENT,
    nome VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    telefone VARCHAR(20),
    data_cadastro DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- Criar tabela com chaves estrangeiras
CREATE TABLE pedidos (
    pedido_id INT PRIMARY KEY AUTO_INCREMENT,
    cliente_id INT NOT NULL,
    data_pedido DATETIME DEFAULT CURRENT_TIMESTAMP,
    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 AUTO_INCREMENT,
    nome VARCHAR(200) NOT NULL,
    preco DECIMAL(10,2) CHECK (preco > 0),
    categoria VARCHAR(50),
    estoque INT DEFAULT 0 CHECK (estoque >= 0),
    ativo BOOLEAN DEFAULT TRUE,
    data_criacao DATETIME DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT UQ_produto_nome UNIQUE (nome)
);

ALTER TABLE

Modifica a estrutura de uma tabela existente

Adicionar e Modificar 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 tipo de dados
ALTER TABLE clientes 
MODIFY telefone VARCHAR(30);

-- Remover coluna
ALTER TABLE clientes 
DROP COLUMN cidade;
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);

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);

-- 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;

-- 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;

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;
← Voltar para Banco de Dados