Recursos educativos para dominar a linguagem de consulta estruturada — do básico ao avançado, com exercícios práticos.
SQL (Structured Query Language) é uma linguagem padronizada para comunicar com bases de dados relacionais. Foi criada na década de 1970 pela IBM e tornou-se a norma ISO/ANSI para manipulação de dados tabulares.
Com SQL podes criar tabelas, inserir dados, fazer consultas, atualizar registos e definir permissões — tudo isso usando uma sintaxe declarativa e legível.
SQL não é um programa — é uma linguagem. É como dizer "português": o português é a língua, mas podes escrever em papel, computador ou quadro negro.
Imagina que SQL é como a língua portuguesa. O MySQL, PostgreSQL e SQLite são como diferentes "editores de texto" que lêem e escrevem nessa língua — cada um com as suas particularidades, mas todos compreendem o mesmo português base.
Aprender SQL é, portanto, aprender o núcleo universal que funciona em todos os sistemas de bases de dados relacionais.
O que são tabelas, linhas, colunas, chaves primárias e estrangeiras. Modelo relacional.
CREATE, ALTER e DROP para criar e modificar tabelas, bases de dados e índices.
INSERT, UPDATE, DELETE para adicionar, alterar e remover registos nas tabelas.
A instrução mais usada. Filtrar com WHERE, ordenar com ORDER BY, limitar com LIMIT.
INNER, LEFT, RIGHT e FULL JOIN para cruzar informação entre múltiplas tabelas.
COUNT, SUM, AVG, MAX, MIN com GROUP BY e HAVING para resumir e analisar dados.
GRANT e REVOKE para controlar quem acede ao quê na base de dados.
COMMIT, ROLLBACK e SAVEPOINT para garantir consistência e atomicidade dos dados.
Consultas dentro de consultas. Criar vistas reutilizáveis para simplificar queries complexas.
CREATE TABLE alunos ( id INT PRIMARY KEY AUTO_INCREMENT, nome VARCHAR(100) NOT NULL, idade INT, email VARCHAR(150) UNIQUE, criado_em DATE DEFAULT CURRENT_DATE );
-- Inserir um registo INSERT INTO alunos (nome, idade, email) VALUES ('Ana Silva', 17, 'ana@escola.pt'); -- Consultar todos SELECT * FROM alunos; -- Filtrar e ordenar SELECT nome, idade FROM alunos WHERE idade >= 16 ORDER BY nome ASC;
-- Tabela turmas com chave estrangeira SELECT a.nome, t.designacao FROM alunos a INNER JOIN turmas t ON a.turma_id = t.id WHERE t.designacao = '10ºA';
-- Contar alunos por turma SELECT turma_id, COUNT(*) AS total, AVG(idade) AS media_idade FROM alunos GROUP BY turma_id HAVING COUNT(*) > 20;
⬤ Iniciante
Cria uma BD chamada escola. Dentro dela, cria as tabelas alunos (id, nome, data_nascimento, email) e turmas (id, designação, ano). Define as chaves primárias em ambas.
Insere pelo menos 3 turmas e 10 alunos na base de dados criada no exercício anterior. Usa nomes e emails realistas. Certifica-te que cada aluno tem uma turma atribuída (chave estrangeira).
Escreve queries para: (a) listar todos os alunos por ordem alfabética; (b) mostrar apenas alunos com email do domínio @gmail.com; (c) contar quantos alunos existem na base de dados.
⬤ Intermédio
Usa um INNER JOIN para criar uma consulta que mostre o nome do aluno e a designação da sua turma. Ordena pelo nome da turma e depois pelo nome do aluno.
Para cada turma, mostra a designação, o número de alunos e a média de idades. Apresenta apenas as turmas com mais de 5 alunos. Ordena do maior para o menor número de alunos.
Atualiza o email de um aluno específico. De seguida, remove todos os alunos cuja data de nascimento é anterior a 2005. Usa transações (BEGIN/COMMIT) para garantir segurança.
⬤ Avançado
Escreve uma query que liste todos os alunos cuja idade é superior à média de idades de todos os alunos. Usa uma subquery no WHERE em vez de calcular a média manualmente.
Cria uma VIEW chamada v_alunos_turma que combine dados de alunos e turmas. Usa essa view para responder a 3 perguntas diferentes sem reescrever o JOIN.
Adiciona uma tabela notas com (id, aluno_id, disciplina, nota). Cria queries para: (a) média por aluno; (b) ranking dos 3 melhores alunos; (c) alunos com nota negativa em alguma disciplina; (d) disciplina com maior taxa de negativas.
Tutoriais interativos progressivos com exercícios de nível crescente. Interface simples e feedback imediato. Ideal para iniciantes.
→ sqlzoo.net18 lições interativas que cobrem SELECT, JOINs, subqueries e mais. Explicações claras e exercícios práticos em cada lição.
→ sqlbolt.comReferência completa com editor "Try it Yourself". Cobre toda a sintaxe SQL com exemplos editáveis em tempo real.
→ w3schools.com/sqlDesafios de SQL com sistema de pontuação e certificados. Ótimo para preparar entrevistas e medir o teu progresso real.
→ hackerrank.com/sqlProblemas reais de SQL usados em entrevistas de empresas como Google e Amazon. Recomendado para nível avançado.
→ leetcode.com/databaseEditor online que suporta MySQL, PostgreSQL e SQLite. Podes criar tabelas, inserir dados e testar queries sem instalar nada.
→ db-fiddle.com