O Guia Definitivo de SQL: Comandos, Joins e Referência de Funções
SQL (Structured Query Language) é a linguagem padrão para gerenciar e manipular bancos de dados relacionais. Quer você trabalhe com MySQL, PostgreSQL, SQL Server ou SQLite, estes comandos principais formam a base das suas interações com o banco de dados.
Use esta folha de dicas como uma referência rápida para a sintaxe comum de SQL e as melhores práticas.
1. Recuperação Básica de Dados
A tarefa de SQL mais comum é recuperar dados de uma tabela.
| Comando | Descrição | Exemplo |
|---|---|---|
SELECT |
Especifica as colunas a recuperar | SELECT nome, idade |
FROM |
Especifica a tabela de onde recuperar | FROM usuarios |
WHERE |
Filtra o conjunto de resultados baseado em uma condição | WHERE idade > 18 |
ORDER BY |
Ordena o conjunto de resultados (ASC ou DESC) | ORDER BY data_criacao DESC |
LIMIT |
Restringe o número de linhas retornadas | LIMIT 10 |
DISTINCT |
Retorna apenas valores únicos | SELECT DISTINCT cidade |
Exemplo de Consulta:
SELECT nome, email
FROM usuarios
WHERE pais = 'BR'
ORDER BY nome ASC
LIMIT 5;
2. SQL Joins: Combinando Dados
Os Joins permitem recuperar data de múltiplas tabelas baseando-se em uma coluna relacionada.
- INNER JOIN: Retorna linhas quando há uma correspondência em ambas as tabelas.
- LEFT (OUTER) JOIN: Retorna todas as linhas da tabela à esquerda e as linhas correspondentes da tabela à direita.
- RIGHT (OUTER) JOIN: Retorna todas as linhas da tabela à direita e as linhas correspondentes da tabela à esquerda.
- FULL (OUTER) JOIN: Retorna linhas quando há uma correspondência em uma das tabelas.
Exemplo de Join:
SELECT pedidos.id, usuarios.nome
FROM pedidos
INNER JOIN usuarios ON pedidos.usuario_id = usuarios.id;
3. Agregação e Agrupamento
As funções de agregação realizam um cálculo sobre um conjunto de valores e retornam um único valor.
| Função | Descrição |
|---|---|
COUNT() |
Retorna o número de linhas |
SUM() |
Retorna a soma total de uma coluna numérica |
AVG() |
Retorna o valor médio |
MIN() |
Retorna o menor valor |
MAX() |
Retorna o maior valor |
GROUP BY e HAVING:
GROUP BY é usado com funções de agregação para agrupar o conjunto de resultados por uma ou mais colunas. HAVING é usado para filtrar grupos.
SELECT departamento, COUNT(*)
FROM funcionarios
GROUP BY departamento
HAVING COUNT(*) > 5;
4. Modificação de Dados (DML)
Comandos para adicionar, atualizar e remover dados.
- INSERT: Adicionar novas linhas.
INSERT INTO usuarios (nome, email) VALUES ('João Silva', '[email protected]'); - UPDATE: Modificar linhas existentes.
UPDATE usuarios SET email = '[email protected]' WHERE id = 1; - DELETE: Remover linhas.
DELETE FROM usuarios WHERE id = 1;
5. Definição de Esquema (DDL)
Comandos para definir e gerenciar a estrutura do banco de dados.
- CREATE TABLE: Criar uma nova tabela.
CREATE TABLE produtos ( id INT PRIMARY KEY, nome VARCHAR(100), preco DECIMAL(10, 2) ); - ALTER TABLE: Modificar a estrutura de uma tabela existente (adicionar/remover colunas).
ALTER TABLE usuarios ADD ultimo_login TIMESTAMP; - DROP TABLE: Excluir uma tabela e todos os seus dados.
DROP TABLE dados_temporarios; - Indexes (Índices): Usados para acelerar a recuperação de dados.
CREATE INDEX idx_usuario_email ON usuarios(email);
Perguntas Comuns (FAQ)
Q: SQL vs NoSQL: Qual devo escolher?
A: Use SQL (Relacional) quando seus dados forem estruturados, você precisar de joins complexos e a conformidade ACID for uma prioridade. Use NoSQL (Não relacional) para dados não estruturados, requisitos de alta escalabilidade e ciclos de desenvolvimento rápidos, onde os esquemas mudam com frequência.
Q: Quais são as melhores práticas para o design de bancos de dados?
A:
- Normalização: Reduzir a redundância de dados.
- Convenções de Nomes: Use nomes consistentes, em minúsculas e separados por sublinhados (underscores).
- Chaves Primárias: Cada tabela deve ter um identificador exclusivo.
- Use Índices com Sabedoria: Eles aceleram as leituras, mas retardam as gravações.
Q: O que é uma Injeção de SQL e como posso preveni-la?
A: A Injeção de SQL é uma vulnerabilidade onde um invasor pode executar instruções SQL maliciosas. Prevenção: Nunca concatene a entrada do usuário diretamente nas consultas. Use Prepared Statements (Consultas Parametrizadas) fornecidas pelo driver de banco de dados da sua linguagem de programação.
Q: Como posso otimizar o desempenho do SQL?
A:
- Evite
SELECT *; recupere apenas as colunas necessárias. - Use
EXPLAINpara analisar os planos de execução das consultas. - Garanta a indexação adequada nas colunas usadas nas cláusulas
WHEREeJOIN. - Evite o uso de subconsultas quando um
JOINfor mais eficiente.
Ferramentas Relacionadas no Tool3M
- Formatador SQL: Limpe e formate suas consultas SQL para melhor legibilidade.
- JSON para CSV: Converta suas exportações de banco de dados entre os formatos JSON e CSV.