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;