La Guía Definitiva de SQL: Comandos, Joins y Referencia de Funciones
SQL (Structured Query Language) es el lenguaje estándar para administrar y manipular bases de datos relacionales. Ya sea que trabajes con MySQL, PostgreSQL, SQL Server o SQLite, estos comandos principales forman la base de tus interacciones con la base de datos.
Usa esta hoja de trucos como una referencia rápida para la sintaxis común de SQL y las mejores prácticas.
1. Recuperación Básica de Datos
La tarea de SQL más común es recuperar datos de una tabla.
| Comando | Descripción | Ejemplo |
|---|---|---|
SELECT |
Especifica las columnas a recuperar | SELECT nombre, edad |
FROM |
Especifica la tabla de la cual recuperar | FROM usuarios |
WHERE |
Filtra el conjunto de resultados basado en una condición | WHERE edad > 18 |
ORDER BY |
Ordena el conjunto de resultados (ASC o DESC) | ORDER BY fecha_creacion DESC |
LIMIT |
Restringe el número de filas devueltas | LIMIT 10 |
DISTINCT |
Devuelve solo valores únicos | SELECT DISTINCT ciudad |
Ejemplo de Consulta:
SELECT nombre, email
FROM usuarios
WHERE pais = 'ES'
ORDER BY nombre ASC
LIMIT 5;
2. SQL Joins: Combinando Datos
Los Joins te permiten recuperar datos de múltiples tablas basándote en una columna relacionada.
- INNER JOIN: Devuelve filas cuando hay una coincidencia en ambas tablas.
- LEFT (OUTER) JOIN: Devuelve todas las filas de la tabla izquierda y las filas coincidentes de la tabla derecha.
- RIGHT (OUTER) JOIN: Devuelve todas las filas de la tabla derecha y las filas coincidentes de la tabla izquierda.
- FULL (OUTER) JOIN: Devuelve filas cuando hay una coincidencia en una de las tablas.
Ejemplo de Join:
SELECT pedidos.id, usuarios.nombre
FROM pedidos
INNER JOIN usuarios ON pedidos.usuario_id = usuarios.id;
3. Agregación y Agrupación
Las funciones de agregación realizan un cálculo sobre un conjunto de valores y devuelven un solo valor.
| Función | Descripción |
|---|---|
COUNT() |
Devuelve el número de filas |
SUM() |
Devuelve la suma total de una columna numérica |
AVG() |
Devuelve el valor promedio |
MIN() |
Devuelve el valor más pequeño |
MAX() |
Devuelve el valor más grande |
GROUP BY y HAVING:
GROUP BY se usa con funciones de agregación para agrupar el conjunto de resultados por una o más columnas. HAVING se usa para filtrar grupos.
SELECT departamento, COUNT(*)
FROM empleados
GROUP BY departamento
HAVING COUNT(*) > 5;
4. Modificación de Datos (DML)
Comandos para añadir, actualizar y eliminar datos.
- INSERT: Añadir nuevas filas.
INSERT INTO usuarios (nombre, email) VALUES ('Juan Perez', '[email protected]'); - UPDATE: Modificar filas existentes.
UPDATE usuarios SET email = '[email protected]' WHERE id = 1; - DELETE: Eliminar filas.
DELETE FROM usuarios WHERE id = 1;
5. Definición de Esquema (DDL)
Comandos para definir y gestionar la estructura de la base de datos.
- CREATE TABLE: Crear una nueva tabla.
CREATE TABLE productos ( id INT PRIMARY KEY, nombre VARCHAR(100), precio DECIMAL(10, 2) ); - ALTER TABLE: Modificar la estructura de una tabla existente (añadir/eliminar columnas).
ALTER TABLE usuarios ADD ultimo_acceso TIMESTAMP; - DROP TABLE: Eliminar una tabla y todos sus datos.
DROP TABLE datos_temporales; - Indexes (Índices): Se usan para acelerar la recuperación de datos.
CREATE INDEX idx_usuario_email ON usuarios(email);
Preguntas Comunes (FAQ)
Q: SQL vs NoSQL: ¿Cuál debería elegir?
A: Usa SQL (Relacional) cuando tus datos estén estructurados, necesites joins complejos y la conformidad ACID sea una prioridad. Usa NoSQL (No relacional) para datos no estructurados, requisitos de alta escalabilidad y ciclos de desarrollo rápidos donde los esquemas cambian con frecuencia.
Q: ¿Cuáles son las mejores prácticas para el diseño de bases de datos?
A:
- Normalización: Reducir la redundancia de datos.
- Convenciones de Nombres: Usar nombres consistentes, en minúsculas y separados por guiones bajos.
- Claves Primarias: Cada tabla debe tener un identificador único.
- Usar Índices Sabiamente: Aceleran las lecturas pero ralentizan las escrituras.
Q: ¿Qué es una Inyección SQL y cómo puedo prevenirla?
A: La Inyección SQL es una vulnerabilidad donde un atacante puede ejecutar sentencias SQL maliciosas. Prevención: Nunca concatenes la entrada del usuario directamente en las consultas. Usa Sentencias Preparadas (Consultas Parametrizadas) proporcionadas por el controlador de base de datos de tu lenguaje de programación.
Q: ¿Cómo puedo optimizar el rendimiento de SQL?
A:
- Evita
SELECT *; recupera solo las columnas que necesites. - Usa
EXPLAINpara analizar los planes de ejecución de las consultas. - Asegúrate de indexar correctamente las columnas usadas en las cláusulas
WHEREyJOIN. - Evita usar subconsultas cuando un
JOINsea más eficiente.
Herramientas Relacionadas en Tool3M
- Formateador SQL: Limpia y formatea tus consultas SQL para una mejor legibilidad.
- JSON a CSV: Convierte tus exportaciones de base de datos entre los formatos JSON y CSV.