O que fiz para aprender e criar consultas complexas e gigantescas usando sql
Estou a trabalhar numa aplicação web há 2 meses, o que me obrigou a melhorar os meus conhecimentos em sql. Foi preciso alguma dedicação para obter resultados mais ou menos consideráveis, por isso aqui ficam algumas dicas para quem quer construir consultas mais complexas e eficientes.
-
Dominar o básico: Antes de se aventurar em consultas complexas, certifique-se de que tem um bom conhecimento das noções básicas de
SQL
, comoSELECT
,INSERT
,UPDATE
,DELETE
,JOIN
,GROUP BY
,HAVING
eWHERE
. -
Entenda os diferentes tipos de junções: As junções são a espinha dorsal de consultas complexas. Domine os diferentes tipos:
INNER JOIN
: Combina registos comuns entre duas tabelas.
LEFT JOIN
(ouLEFT OUTER JOIN
): Devolve todos os registos da tabela da esquerda, mesmo que não haja correspondência na tabela da direita.RIGHT JOIN
: Semelhante aoLEFT JOIN
, mas devolve todos os registos da tabela da direita.FULL JOIN
: Devolve registos quando existe uma correspondência numa das tabelas.
- Utilizar subconsultas e CTEs (Common Table Expressions):
- Subconsultas: São consultas dentro de consultas. Podem ser utilizadas para dividir grandes problemas em partes mais pequenas.
SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);
- CTEs: Proporcionam uma forma mais legível e reutilizável de estruturar consultas complexas. São definidos com
WITH
.
WITH HighEarners AS (
SELECT name, salary FROM employees WHERE salary > 5000
)
SELECT * FROM HighEarners;
- Utilizar agregações de forma inteligente: Utilize funções como
SUM()
,AVG()
,COUNT()
,MIN()
,MAX()
combinadas comGROUP BY
para resumir dados de grandes volumes de registos.
SELECT department, COUNT(employee_id), AVG(salary)
FROM employees
GROUP BY department;
- Aprender a otimizar as consultas:
- Utilizar índices: A indexação de colunas frequentemente utilizadas em WHERE e JOIN pode melhorar o desempenho.
- Examine o plano de execução: Use o comando EXPLAIN para ver como o banco de dados processa suas consultas e identificar gargalos.
EXPLAIN SELECT * FROM employees WHERE salary > 5000;
Comece sempre por coisas pequenas e vai pegando a pratica.