menu
languagePortuguês (Brasil)
save_alt Baixar

Guia Rápido da Linguagem SQL

Referência essencial de comandos e sintaxe SQL para consultar bancos de dados

🔍 Básico do SELECT

Recupere dados de tabelas especificando quais colunas retornar. Use DISTINCT para remover duplicatas e AS para criar aliases de colunas.
SELECT customer_id, name, email
FROM customers;

-- With alias and DISTINCT
SELECT DISTINCT country AS customer_country
FROM customers;

Pontos-chave:

  • Use colunas específicas em vez de * para melhor desempenho
  • DISTINCT remove linhas duplicadas
  • A palavra-chave AS cria aliases de colunas
  • A ordem das colunas no SELECT define a ordem no resultado

⚡ Cláusula WHERE

Filtre linhas com base em condições usando operadores de comparação. Combine várias condições com AND/OR para filtros complexos.
SELECT name, price
FROM products
WHERE price > 100;

-- Multiple conditions
SELECT name, category
FROM products
WHERE category = 'Electronics'
  AND price <= 500;

Pontos-chave:

  • Filtra as linhas antes de retornar os resultados
  • Pode combinar várias condições com AND/OR
  • Valores de texto exigem aspas simples
  • Operadores: =, !=, <>, <, >, <=, >=

⚙️ Operadores Lógicos

Combine várias condições usando AND (todas devem ser verdadeiras), OR (pelo menos uma deve ser verdadeira) e NOT (nega a condição).
-- AND operator
SELECT * FROM orders
WHERE status = 'shipped' AND total > 100;

-- OR operator
SELECT * FROM customers
WHERE country = 'USA' OR country = 'Canada';

-- NOT operator
SELECT * FROM products
WHERE NOT category = 'Discontinued';

Pontos-chave:

  • AND tem precedência maior que OR
  • Use parênteses para controlar a ordem de avaliação
  • NOT equivale a != ou <>
  • Combine operadores para lógicas complexas

↕️ ORDER BY

Ordene os resultados da consulta em ordem crescente (ASC) ou decrescente (DESC). Ordene por várias colunas para ordenações complexas.
-- Single column sort
SELECT name, price
FROM products
ORDER BY price DESC;

-- Multiple columns
SELECT name, category, price
FROM products
ORDER BY category ASC, price DESC;

Pontos-chave:

  • ASC é o padrão se nada for especificado
  • Ordene por várias colunas (prioridade da esquerda para a direita)
  • É possível ordenar por coluna que não está no SELECT
  • Valores NULL ficam no início ou no fim (depende do banco)

✂️ LIMIT / OFFSET

Limite o número de linhas retornadas e pule linhas com OFFSET. Essencial para paginação e para trabalhar com grandes conjuntos de resultados.
-- First 10 rows
SELECT name, price
FROM products
ORDER BY price DESC
LIMIT 10;

-- Pagination (skip first 20, get next 10)
SELECT name, price
FROM products
ORDER BY price DESC
LIMIT 10 OFFSET 20;

Pontos-chave:

  • Essencial para paginação
  • Combine com ORDER BY para resultados consistentes
  • OFFSET começa em 0 (primeira linha)
  • Observação: o SQL Server usa TOP em vez de LIMIT

*️⃣ Correspondência de Padrões (LIKE)

Encontre padrões de texto usando curingas: % corresponde a qualquer sequência de caracteres, _ corresponde a um único caractere.
-- Starts with 'John'
SELECT name, email
FROM customers
WHERE name LIKE 'John%';

-- Contains 'smith'
SELECT name FROM customers
WHERE name LIKE '%smith%';

-- Exact pattern (5 characters starting with 'A')
SELECT code FROM products
WHERE code LIKE 'A____';

Pontos-chave:

  • % corresponde a zero ou mais caracteres
  • _ corresponde a exatamente um caractere
  • A diferenciação de maiúsculas depende da collation do banco
  • Use NOT LIKE para exclusão

↔️ Intervalo e Conjunto (BETWEEN, IN)

Filtre por intervalos usando BETWEEN (inclusivo) ou busque valores em uma lista usando IN. Mais eficiente que várias condições OR.
-- BETWEEN (inclusive)
SELECT name, price
FROM products
WHERE price BETWEEN 50 AND 100;

-- IN operator
SELECT name, country
FROM customers
WHERE country IN ('USA', 'Canada', 'Mexico');

-- NOT IN
SELECT name FROM products
WHERE category NOT IN ('Discontinued', 'Draft');

Pontos-chave:

  • BETWEEN inclui os dois valores limite
  • IN é mais limpo que várias condições OR
  • É possível usar IN com subconsultas
  • BETWEEN funciona com datas e textos

❓ Tratamento de NULL

Trabalhe com valores NULL usando IS NULL e IS NOT NULL. Use COALESCE para definir valores padrão para colunas NULL.
-- Find NULL values
SELECT name, phone
FROM customers
WHERE phone IS NULL;

-- Exclude NULL values
SELECT name, email
FROM customers
WHERE email IS NOT NULL;

-- Provide default value
SELECT name, COALESCE(phone, 'No phone') AS contact
FROM customers;

Pontos-chave:

  • Não é possível usar = ou != com NULL
  • É preciso usar IS NULL ou IS NOT NULL
  • COALESCE retorna o primeiro argumento não NULL
  • NULL em operações matemáticas resulta em NULL

Σ Funções de Agregação

Faça cálculos sobre conjuntos de linhas: COUNT, SUM, AVG, MIN, MAX. Agregações ignoram valores NULL (exceto COUNT(*)).
-- Basic aggregates
SELECT
  COUNT(*) AS total_orders,
  SUM(amount) AS total_revenue,
  AVG(amount) AS avg_order_value,
  MIN(amount) AS smallest_order,
  MAX(amount) AS largest_order
FROM orders;

-- COUNT variations
SELECT COUNT(*) AS all_rows,
       COUNT(email) AS rows_with_email,
       COUNT(DISTINCT country) AS unique_countries
FROM customers;

Pontos-chave:

  • COUNT(*) inclui todas as linhas (mesmo com NULL)
  • COUNT(column) exclui valores NULL
  • COUNT(DISTINCT column) conta valores únicos
  • SUM/AVG só funcionam com tipos numéricos

▦ GROUP BY / HAVING

Agrupe linhas pelos valores das colunas e aplique funções de agregação. Use HAVING para filtrar grupos (como um WHERE para grupos).
-- Group by single column
SELECT country, COUNT(*) AS customer_count
FROM customers
GROUP BY country
ORDER BY customer_count DESC;

-- Group by multiple columns with HAVING
SELECT category, status, AVG(price) AS avg_price
FROM products
GROUP BY category, status
HAVING AVG(price) > 50;

Pontos-chave:

  • Todas as colunas não agregadas do SELECT devem estar no GROUP BY
  • WHERE filtra as linhas antes do agrupamento
  • HAVING filtra os grupos após a agregação
  • É possível usar funções de agregação na cláusula HAVING

🔗 Joins (Referência Rápida) VEJA O GUIA DETALHADO

Combine dados de várias tabelas com base em colunas relacionadas. INNER JOIN retorna apenas correspondências, LEFT/RIGHT preservam um dos lados.
-- INNER JOIN (most common)
SELECT orders.id, customers.name, orders.amount
FROM orders
INNER JOIN customers
  ON orders.customer_id = customers.id;

-- LEFT JOIN (all orders, even without customer)
SELECT orders.id, customers.name
FROM orders
LEFT JOIN customers
  ON orders.customer_id = customers.id;

Pontos-chave:

  • INNER JOIN é o mais comum (pode ser escrito apenas como JOIN)
  • LEFT/RIGHT JOINs preservam todas as linhas de uma tabela
  • Use a cláusula ON para especificar a condição do join

⬚ Subconsultas

Consultas dentro de consultas para filtros e cálculos complexos. Use com IN, EXISTS ou como valores escalares.
-- Subquery with IN
SELECT name, price
FROM products
WHERE category_id IN (
  SELECT id FROM categories
  WHERE name = 'Electronics'
);

-- Subquery with EXISTS
SELECT name FROM customers c
WHERE EXISTS (
  SELECT 1 FROM orders o
  WHERE o.customer_id = c.id
);

-- Scalar subquery
SELECT name, price,
  price - (SELECT AVG(price) FROM products) AS price_diff
FROM products;

Pontos-chave:

  • Subconsulta com IN retorna vários valores
  • EXISTS verifica a existência (eficiente)
  • Subconsulta escalar retorna um único valor
  • Subconsulta correlacionada referencia a consulta externa

✂️ Funções de Texto

Extraia, transforme e formate dados de texto. SUBSTRING extrai por posição; LEFT/RIGHT pegam de qualquer uma das extremidades.
-- Extract characters by position
SELECT SUBSTRING(name, 1, 3) AS prefix FROM products;

-- First / last N characters
SELECT LEFT(email, 5), RIGHT(phone, 4) FROM users;

-- Dynamic position (find @ then extract domain)
SELECT SUBSTRING(email, INSTR(email, '@') + 1) AS domain
FROM users;

-- Common string helpers
SELECT
  UPPER(name), LOWER(name),
  TRIM(name),
  LENGTH(name)
FROM users;

Pontos-chave:

  • Posições no SQL começam em 1 (primeiro caractere = posição 1)
  • Use LEFT/RIGHT para início/fim; SUBSTRING para o meio
  • SQLite não suporta LEFT/RIGHT — use SUBSTRING
  • Oracle usa SUBSTR(), não SUBSTRING()

Precisa de um Jeito Melhor de Escrever SQL?

Beekeeper Studio é um editor SQL moderno e intuitivo, com autocompletar, histórico de consultas e suporte a mais de 15 bancos de dados.

Experimente o Beekeeper Studio Grátis