Hemos recopilado una hoja de referencia rápida (cheat sheet) con consultas y conceptos fundamentales de SQL utilizados en el análisis de datos, abarcando desde comandos básicos hasta técnicas avanzadas. Estos consejos cubren un amplio rango de temas, incluyendo uniones (joins), manejo de duplicados, limpieza de datos, y más.
Para memorizar y visualizar mejor estos conceptos, sugiero organizar los consejos de SQL usando la estructura de un Mapa Mental. El nodo central serÃa "SQL para Análisis de Datos", y los cinco grandes temas de abajo actuarÃan como las ramas principales, facilitando la comprensión de cómo se conectan las técnicas:
COUNT(*)
, INNER JOIN
) serÃa una sub-rama de la categorÃa principal.Un analista de datos a menudo sigue un Orden Lógico de Procesamiento de Consultas (aunque no siempre sea el orden en que se escriben). Entender este flujo es clave para escribir queries más precisas y eficientes.
graph TD A[FROM: Origen de Datos Tablas] --> B{JOIN: Unir Datos} B --> C{WHERE: Filtrar Filas} C --> D{GROUP BY: Agrupar Filas} D --> E{HAVING: Filtrar Grupos} E --> F[SELECT: Proyectar Columnas/Cálculos] F --> G[ORDER BY: Ordenar el Resultado] G --> H[LIMIT/OFFSET: Limitar Filas Finales]
Utilice estas consultas para seleccionar y filtrar datos de una tabla.
SELECT * FROM employees;
SELECT first_name, last_name, hire_date FROM employees;
SELECT COUNT(*) FROM employees;
SELECT COUNT(salary) FROM employees;
SELECT DISTINCT department FROM employees;
SELECT * FROM employees WHERE department = 'Sales';
SELECT * FROM employees WHERE department = 'Sales' AND salary > 60000;
SELECT * FROM employees WHERE department = 'Sales' OR department = 'Marketing';
SELECT * FROM employees WHERE (department = 'Sales' OR department = 'Marketing') AND salary > 70000;
SELECT * FROM employees WHERE NOT department = 'IT';
Técnicas de filtrado avanzado utilizando IN
, BETWEEN
, y LIKE
.
SELECT * FROM employees WHERE department IN ('Sales', 'Marketing', 'IT');
SELECT * FROM employees WHERE department NOT IN ('Sales', 'Marketing');
SELECT * FROM employees WHERE salary BETWEEN 50000 AND 75000;
SELECT * FROM employees WHERE first_name ILIKE '%jo%';
SELECT * FROM employees WHERE last_name LIKE 'Smi%';
SELECT * FROM employees WHERE email LIKE '%@gmail.com';
SELECT * FROM employees WHERE first_name LIKE '_a%';
SELECT * FROM employees WHERE manager_id IS NULL;
SELECT * FROM employees WHERE manager_id IS NOT NULL;
SELECT * FROM employees WHERE hire_date BETWEEN '2023-01-01' AND '2023-12-31';
Controle el orden de sus resultados y limite el número de filas.
SELECT * FROM employees ORDER BY last_name ASC;
SELECT * FROM employees ORDER BY salary DESC;
SELECT * FROM employees ORDER BY department ASC, salary DESC;
SELECT * FROM employees ORDER BY salary DESC LIMIT 10;
SELECT * FROM employees ORDER BY hire_date DESC LIMIT 5;
SELECT DISTINCT department FROM employees ORDER BY department;
SELECT * FROM employees ORDER BY employee_id OFFSET 10 LIMIT 10;
SELECT * FROM employees ORDER BY salary DESC LIMIT 1;
SELECT DISTINCT salary FROM employees ORDER BY salary DESC LIMIT 1 OFFSET 1;
SELECT first_name, last_name, (salary * 0.1) AS bonus FROM employees ORDER BY bonus DESC;
Resuma y analice datos con funciones de agregación.
SELECT department, COUNT(*) FROM employees GROUP BY department;
SELECT department, AVG(salary) FROM employees GROUP BY department;
SELECT department, SUM(salary) FROM employees GROUP BY department;
SELECT department, MAX(salary) FROM employees GROUP BY department;
SELECT department, MIN(salary) FROM employees GROUP BY department;
SELECT department, AVG(salary) FROM employees GROUP BY department HAVING AVG(salary) > 65000;
SELECT department, COUNT(*) FROM employees GROUP BY department HAVING COUNT(*) > 5;
SELECT department, AVG(salary) FROM employees WHERE hire_date > '2022-01-01' GROUP BY department;
SELECT department, job_title, AVG(salary) FROM employees GROUP BY department, job_title;
SELECT department, MAX(salary) FROM employees GROUP BY department;
Combine datos de múltiples tablas. Este es un tema central en los consejos de SQL.
SELECT e.first_name, d.department_name FROM employees e INNER JOIN departments d ON e.department_id = d.department_id;
SELECT e.first_name, d.department_name FROM employees e LEFT JOIN departments d ON e.department_id = d.department_id;
SELECT e.first_name FROM employees e LEFT JOIN departments d ON e.department_id = d.department_id WHERE d.department_id IS NULL;
SELECT e.first_name, d.department_name FROM employees e RIGHT JOIN departments d ON e.department_id = d.department_id;
SELECT e.first_name, d.department_name FROM employees e FULL OUTER JOIN departments d ON e.department_id = d.department_id;
SELECT e.first_name, p.project_name, d.department_name FROM employees e JOIN projects p ON e.employee_id = p.employee_id JOIN departments d ON e.department_id = d.department_id;
SELECT e.first_name AS employee, m.first_name AS manager FROM employees e JOIN employees m ON e.manager_id = m.employee_id;
SELECT o.order_id, c.customer_name FROM orders o JOIN customers c ON o.customer_zip_code = c.customer_zip_code;
SELECT * FROM employees CROSS JOIN departments;
SELECT * FROM products p LEFT JOIN sales s ON p.product_id = s.product_id WHERE s.sale_id IS NULL;
SELECT e.first_name, e.last_name FROM employees e LEFT JOIN employee_projects ep ON e.employee_id = ep.employee_id WHERE ep.project_id IS NULL;
SELECT p.project_name FROM projects p LEFT JOIN employee_projects ep ON p.project_id = ep.project_id WHERE ep.employee_id IS NULL;
SELECT d.department_name, SUM(e.salary) AS total_salary FROM departments d LEFT JOIN employees e ON d.department_id = e.department_id GROUP BY d.department_name;
SELECT d.department_name, COUNT(e.employee_id) AS num_employees FROM departments d LEFT JOIN employees e ON d.department_id = e.department_id GROUP BY d.department_name;
SELECT o.*, c.customer_name FROM orders o JOIN customers c ON o.customer_id = c.customer_id AND o.order_date = c.last_purchase_date;
SELECT e.first_name, m.first_name AS manager_name, d.department_name FROM employees e JOIN employees m ON e.manager_id = m.employee_id JOIN departments d ON m.department_id = d.department_id;
Los joins son el corazón del análisis de datos en SQL. Aquà tienes un resumen de cuándo usar cada uno:
Tipo de JOIN | Descripción | Caso de Uso Común |
---|---|---|
INNER JOIN | Devuelve solo las filas que tienen coincidencias en ambas tablas. | Encontrar empleados que tienen asignado un departamento válido. |
LEFT (OUTER) JOIN | Devuelve todas las filas de la tabla izquierda, más las filas coincidentes de la derecha. Si no hay coincidencia, devuelve NULL para las columnas de la derecha. |
Encontrar todos los productos y, si tienen, la información de sus ventas. |
RIGHT (OUTER) JOIN | Devuelve todas las filas de la tabla derecha, más las filas coincidentes de la izquierda. | Encontrar todos los departamentos y, si tienen, la información de sus empleados. |
FULL (OUTER) JOIN | Devuelve filas cuando hay coincidencia en cualquiera de las tablas. | Ver todos los clientes y todos los pedidos, incluyendo clientes sin pedidos y pedidos sin cliente registrado. |
SELF-JOIN | Unir una tabla consigo misma (usando alias). | Consultar jerarquÃas, como empleados y sus gerentes. |
Además de las consultas de análisis, los recursos sobre SQL a menudo incluyen enfoques en administración, duplicados y limpieza de datos. Tenga en cuenta que estos comandos pueden variar significativamente según el dialecto SQL utilizado (MS SQL Server, PostGresql, Oracle, DB2, MySQL).
Un conocimiento sólido de SQL para el análisis requiere más que solo memorizar queries; necesita práctica constante y enfocarse en la lógica.
RANK()
, promedios móviles o totales acumulados sin colapsar las filas como lo hace GROUP BY
.La capacidad de consultar, filtrar y unir datos de forma eficiente es el súper-poder fundamental del analista. El SQL no es solo un lenguaje; es el marco lógico que le permite transformar datos crudos en información valiosa para la toma de decisiones.
Hemos sintetizado las consultas más importantes en cinco categorÃas clave: la base de SELECT
y WHERE
, el refinamiento de LIKE
y BETWEEN
, el orden de ORDER BY
, el resumen de GROUP BY
y la integración de Joins. Al aplicar la estrategia del Mapa Mental, usted no solo memoriza código, sino que también visualiza la conexión lógica entre cada técnica.
Le animamos a tomar esta cheat sheet y desafiarse a usted mismo con problemas de datos del mundo real. Al dominar estas 100 consultas, no solo estará listo para cualquier entrevista, sino que podrá generar insights poderosos que impulsen el éxito en cualquier organización.
¡Ahora es su turno! ¿Cuál de estas 100 consultas cree que es la más importante para su trabajo diario?