Folha de Consulta SQL
Última atualização
Consultar dados (SELECT)
O núcleo do SQL: ler linhas de uma ou mais tabelas.
| Operação | Sintaxe |
|---|---|
| Selecionar todas as colunas | SELECT * FROM users; |
| Selecionar colunas específicas | SELECT id, name FROM users; |
| Renomear uma coluna (alias) | SELECT name AS full_name FROM users; |
| Valores distintos | SELECT DISTINCT country FROM users; |
| Limitar linhas | SELECT * FROM users LIMIT 10; |
| Pular e depois limitar (paginação) | SELECT * FROM users LIMIT 10 OFFSET 20; |
| Contar linhas | SELECT COUNT(*) FROM users; |
Filtrar linhas (WHERE)
Restringe quais linhas uma consulta retorna.
| Operação | Sintaxe |
|---|---|
| Igualdade / comparação | WHERE age >= 18 |
| Várias condições | WHERE age >= 18 AND country = 'US' |
| Qualquer uma das condições | WHERE role = 'admin' OR role = 'owner' |
| Em um conjunto | WHERE country IN ('US', 'CA', 'MX') |
| Entre um intervalo | WHERE price BETWEEN 10 AND 50 |
| Correspondência de padrão | WHERE email LIKE '%@gmail.com' |
| É / não é nulo | WHERE deleted_at IS NULL |
| Negar | WHERE status NOT IN ('archived') |
Ordenar e agrupar
| Operação | Sintaxe |
|---|---|
| Ordem crescente (padrão) | ORDER BY created_at |
| Ordem decrescente | ORDER BY created_at DESC |
| Ordenar por várias colunas | ORDER BY country, name DESC |
| Agrupar linhas | SELECT country, COUNT(*) FROM users GROUP BY country; |
| Filtrar grupos | GROUP BY country HAVING COUNT(*) > 100 |
Joins
Combina linhas de duas tabelas a partir de uma coluna correspondente.
| Tipo de join | Retorna | Sintaxe |
|---|---|---|
| INNER JOIN | Apenas as linhas que correspondem em ambas as tabelas | FROM orders o INNER JOIN users u ON o.user_id = u.id |
| LEFT JOIN | Todas as linhas da esquerda + correspondências (nulos caso contrário) | FROM users u LEFT JOIN orders o ON o.user_id = u.id |
| RIGHT JOIN | Todas as linhas da direita + correspondências | FROM orders o RIGHT JOIN users u ON o.user_id = u.id |
| FULL OUTER JOIN | Todas as linhas de ambos os lados | FROM a FULL OUTER JOIN b ON a.id = b.a_id |
| CROSS JOIN | Toda combinação (produto cartesiano) | FROM sizes CROSS JOIN colors |
| Self join | Uma tabela unida a si mesma | FROM employees e JOIN employees m ON e.manager_id = m.id |
Funções de agregação
Calcula um único valor a partir de um grupo de linhas.
| Função | O que faz |
|---|---|
COUNT(*) | Número de linhas |
COUNT(col) | Número de valores não nulos |
SUM(col) | Total de uma coluna numérica |
AVG(col) | Valor médio |
MIN(col) / MAX(col) | Menor / maior valor |
STRING_AGG(col, ',') | Concatena valores (Postgres; GROUP_CONCAT no MySQL) |
Funções de janela
Calcula sobre um conjunto de linhas sem agrupá-las em uma só.
| Função | Sintaxe |
|---|---|
| Número da linha | ROW_NUMBER() OVER (ORDER BY score DESC) |
| Classificação (com lacunas) | RANK() OVER (PARTITION BY country ORDER BY score DESC) |
| Classificação densa | DENSE_RANK() OVER (ORDER BY score DESC) |
| Total acumulado | SUM(amount) OVER (ORDER BY created_at) |
| Linha anterior / seguinte | LAG(score) OVER (ORDER BY date), LEAD(score) OVER (...) |
Modificar dados (INSERT, UPDATE, DELETE)
| Operação | Sintaxe |
|---|---|
| Inserir uma linha | INSERT INTO users (name, email) VALUES ('Ada', 'ada@x.com'); |
| Inserir várias linhas | INSERT INTO users (name) VALUES ('Ada'), ('Alan'); |
| Atualizar linhas | UPDATE users SET active = true WHERE id = 1; |
| Excluir linhas | DELETE FROM users WHERE active = false; |
| Upsert (Postgres/SQLite) | INSERT ... ON CONFLICT (email) DO UPDATE SET name = EXCLUDED.name; |
Definir tabelas (DDL)
| Operação | Sintaxe |
|---|---|
| Criar uma tabela | CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT NOT NULL); |
| Adicionar uma coluna | ALTER TABLE users ADD COLUMN age INTEGER; |
| Remover uma coluna | ALTER TABLE users DROP COLUMN age; |
| Remover uma tabela | DROP TABLE users; |
| Criar um índice | CREATE INDEX idx_users_email ON users (email); |
| Chave estrangeira | FOREIGN KEY (user_id) REFERENCES users (id) |
Cada instrução, cláusula e join de SQL que você usa, em uma única página. Esta folha de consulta SQL é uma referência rápida para consultar e modificar dados relacionais: as cláusulas SELECT, os quatro tipos de JOIN, a agregação e o DDL e DML que você usa para criar e atualizar tabelas.
A sintaxe aqui é SQL ANSI padrão e funciona em PostgreSQL, MySQL, SQLite e SQL Server salvo indicação em contrário. Copie o que precisar ou teste cada consulta ao vivo no playground de SQL, sem instalar nenhum banco de dados.
Perguntas frequentes sobre a folha de consulta SQL
Esta folha de consulta SQL é gratuita?
Funciona com MySQL, PostgreSQL e SQLite?
SELECT, WHERE, JOIN, GROUP BY e DDL mostrada aqui é SQL ANSI padrão e roda da mesma forma em MySQL, PostgreSQL, SQLite e SQL Server. Alguns recursos avançados variam conforme o dialeto (upserts e agregação de strings são os mais comuns) e essas linhas indicam a diferença.Qual é a diferença entre INNER JOIN e LEFT JOIN?
INNER JOIN retorna apenas as linhas que têm correspondência em ambas as tabelas. Um LEFT JOIN retorna cada linha da tabela da esquerda (a primeira), preenchendo com NULL as colunas da tabela da direita quando não há correspondência; é útil quando você quer todos os usuários mesmo que alguns não tenham pedidos.Posso praticar estes comandos SQL online?
SELECT aos joins e às funções de janela.