Guía Completa de SQL y Bases de Datos: Consultas, Joins y Optimización
Lo Que Dominarás en Este Tutorial
- Escribir consultas estándar compatibles con PostgreSQL, MySQL y SQL Server.
- Dominar relaciones entre tablas con INNER JOIN y LEFT JOIN.
- Agrupar datos con GROUP BY y filtrar agregaciones con HAVING.
- Utilizar funciones de ventana avanzadas (ROW_NUMBER, RANK).
- Crear índices eficientes para optimizar consultas lentas.
1. Introducción a las Bases de Datos Relacionales
SQL es el estándar indiscutible para almacenar, consultar y transformar datos. Dominar SQL abre las puertas a los puestos mejor remunerados en ingeniería de datos, backend y análisis cuantitativo.
2. Uniones entre Tablas: INNER JOIN y Agrupaciones
Las bases de datos relacionales dividen los datos en tablas vinculadas mediante claves foráneas para evitar redundancia.
Evaluación Rápida: Pon a Prueba tus Conocimientos
Preguntas Frecuentes
Profundizando: SQL en la práctica
El SQL de trabajo se vuelve más fácil cuando llevas en la cabeza el orden lógico de procesamiento: FROM y JOIN reúnen las filas, WHERE las filtra, GROUP BY y HAVING las resumen, las funciones de ventana las anotan sin colapsarlas, y los índices deciden si algo de eso exige escanear la tabla entera. Esa cadena explica la mayoría de las sorpresas de los principiantes: por qué un agregado no puede filtrarse en WHERE, por qué un join descuidado duplica tu número de filas y por qué ROW_NUMBER() responde preguntas que GROUP BY no puede. Practica tomando una misma pregunta de informes y respondiéndola de tres maneras: con un join, con una subconsulta y con una función de ventana, comparando después los planes de ejecución.
Errores comunes
- Filtrar valores agregados en WHERE. WHERE se ejecuta antes de agrupar, así que no puede ver sumas ni conteos. La comprobación de conocimientos del tutorial lo distingue con precisión: WHERE filtra filas individuales antes de agrupar; HAVING filtra los grupos agregados después de GROUP BY.
- Multiplicar filas por accidente en un join. Unir por una clave no única duplica cada fila coincidente e infla en silencio conteos y sumas. Verifica la unicidad de las claves y comprueba los conteos de filas tras los joins INNER y LEFT antes de confiar en el resultado.
- Forzar subconsultas donde encaja una función de ventana. Las clasificaciones, las comparaciones acumuladas y los valores de la fila anterior son justo para lo que existen ROW_NUMBER(), RANK() y LAG/LEAD: calculan sobre filas relacionadas sin colapsarlas ni retorcer la consulta en autouniones.
- Consultar columnas sin índice en una tabla que crece. Sin un índice sobre las columnas de unión y de filtro, la base de datos recurre a escaneos secuenciales: esas lecturas completas de tabla, costosas, que este tutorial te enseña a evitar. La consulta que parecía instantánea con datos de prueba se convierte en el cuello de botella de producción.
Preguntas frecuentes
¿Qué dialecto de SQL debería aprender primero?
PostgreSQL, como recomienda la sección de preguntas del tutorial: se adhiere de cerca al SQL estándar ANSI y se usa mucho en startups, proveedores en la nube y arquitecturas empresariales. Lo aprendido allí se transfiere a MySQL y SQL Server absorbiendo solo las diferencias de dialecto.
¿Cuándo es una subconsulta la herramienta correcta en lugar de un join?
Cuando necesitas un resultado intermedio filtrado o agregado por separado para alimentar la consulta exterior: por ejemplo, comparar cada fila con un promedio calculado sobre un subconjunto. Para simplemente combinar tablas relacionadas, un join es más claro; para anotar filas, una función de ventana suele ganar.
¿Cómo hago más rápida una consulta lenta?
Empieza por el plan de ejecución: busca escaneos secuenciales en tablas grandes y después añade índices a las columnas de unión y de filtro implicadas, seleccionando solo las columnas que necesitas. Mide antes y después de cada cambio en lugar de reescribir la consulta por una corazonada.