Hoja de Trucos de SQL
Última actualización
Consultar datos (SELECT)
El núcleo de SQL: leer filas de una o varias tablas.
| Operación | Sintaxis |
|---|---|
| Seleccionar todas las columnas | SELECT * FROM users; |
| Seleccionar columnas específicas | SELECT id, name FROM users; |
| Renombrar una columna (alias) | SELECT name AS full_name FROM users; |
| Valores distintos | SELECT DISTINCT country FROM users; |
| Limitar filas | SELECT * FROM users LIMIT 10; |
| Omitir y luego limitar (paginación) | SELECT * FROM users LIMIT 10 OFFSET 20; |
| Contar filas | SELECT COUNT(*) FROM users; |
Filtrar filas (WHERE)
Reduce qué filas devuelve una consulta.
| Operación | Sintaxis |
|---|---|
| Igualdad / comparación | WHERE age >= 18 |
| Varias condiciones | WHERE age >= 18 AND country = 'US' |
| Cualquiera de las condiciones | WHERE role = 'admin' OR role = 'owner' |
| En un conjunto | WHERE country IN ('US', 'CA', 'MX') |
| Entre un rango | WHERE price BETWEEN 10 AND 50 |
| Coincidencia de patrón | WHERE email LIKE '%@gmail.com' |
| Es / no es nulo | WHERE deleted_at IS NULL |
| Negar | WHERE status NOT IN ('archived') |
Ordenar y agrupar
| Operación | Sintaxis |
|---|---|
| Orden ascendente (por defecto) | ORDER BY created_at |
| Orden descendente | ORDER BY created_at DESC |
| Ordenar por varias columnas | ORDER BY country, name DESC |
| Agrupar filas | SELECT country, COUNT(*) FROM users GROUP BY country; |
| Filtrar grupos | GROUP BY country HAVING COUNT(*) > 100 |
Joins
Combina filas de dos tablas según una columna coincidente.
| Tipo de join | Devuelve | Sintaxis |
|---|---|---|
| INNER JOIN | Solo las filas que coinciden en ambas tablas | FROM orders o INNER JOIN users u ON o.user_id = u.id |
| LEFT JOIN | Todas las filas de la izquierda + coincidencias (nulos en caso contrario) | FROM users u LEFT JOIN orders o ON o.user_id = u.id |
| RIGHT JOIN | Todas las filas de la derecha + coincidencias | FROM orders o RIGHT JOIN users u ON o.user_id = u.id |
| FULL OUTER JOIN | Todas las filas de ambos lados | FROM a FULL OUTER JOIN b ON a.id = b.a_id |
| CROSS JOIN | Cada combinación (producto cartesiano) | FROM sizes CROSS JOIN colors |
| Self join | Una tabla unida consigo misma | FROM employees e JOIN employees m ON e.manager_id = m.id |
Funciones de agregación
Calcula un solo valor a partir de un grupo de filas.
| Función | Qué hace |
|---|---|
COUNT(*) | Número de filas |
COUNT(col) | Número de valores no nulos |
SUM(col) | Total de una columna numérica |
AVG(col) | Valor promedio |
MIN(col) / MAX(col) | Valor más pequeño / más grande |
STRING_AGG(col, ',') | Concatena valores (Postgres; GROUP_CONCAT en MySQL) |
Funciones de ventana
Calcula sobre un conjunto de filas sin colapsarlas en una sola.
| Función | Sintaxis |
|---|---|
| Número de fila | ROW_NUMBER() OVER (ORDER BY score DESC) |
| Rango (con huecos) | RANK() OVER (PARTITION BY country ORDER BY score DESC) |
| Rango denso | DENSE_RANK() OVER (ORDER BY score DESC) |
| Total acumulado | SUM(amount) OVER (ORDER BY created_at) |
| Fila anterior / siguiente | LAG(score) OVER (ORDER BY date), LEAD(score) OVER (...) |
Modificar datos (INSERT, UPDATE, DELETE)
| Operación | Sintaxis |
|---|---|
| Insertar una fila | INSERT INTO users (name, email) VALUES ('Ada', 'ada@x.com'); |
| Insertar varias filas | INSERT INTO users (name) VALUES ('Ada'), ('Alan'); |
| Actualizar filas | UPDATE users SET active = true WHERE id = 1; |
| Eliminar filas | DELETE FROM users WHERE active = false; |
| Upsert (Postgres/SQLite) | INSERT ... ON CONFLICT (email) DO UPDATE SET name = EXCLUDED.name; |
Definir tablas (DDL)
| Operación | Sintaxis |
|---|---|
| Crear una tabla | CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT NOT NULL); |
| Añadir una columna | ALTER TABLE users ADD COLUMN age INTEGER; |
| Eliminar una columna | ALTER TABLE users DROP COLUMN age; |
| Eliminar una tabla | DROP TABLE users; |
| Crear un índice | CREATE INDEX idx_users_email ON users (email); |
| Clave foránea | FOREIGN KEY (user_id) REFERENCES users (id) |
Cada sentencia, cláusula y join de SQL que necesitas, en una sola página. Esta hoja de trucos de SQL es una referencia rápida para consultar y modificar datos relacionales: las cláusulas SELECT, los cuatro tipos de JOIN, la agregación y el DDL y DML que usas para crear y actualizar tablas.
La sintaxis aquí es SQL ANSI estándar y funciona en PostgreSQL, MySQL, SQLite y SQL Server salvo que se indique lo contrario. Copia lo que necesites o prueba cada consulta en vivo en el playground de SQL, sin instalar ninguna base de datos.
Preguntas frecuentes sobre la hoja de trucos de SQL
¿Esta hoja de trucos de SQL es gratis?
¿Funciona con MySQL, PostgreSQL y SQLite?
SELECT, WHERE, JOIN, GROUP BY y DDL que se muestra aquí es SQL ANSI estándar y se ejecuta igual en MySQL, PostgreSQL, SQLite y SQL Server. Algunas funciones avanzadas difieren según el dialecto (los upserts y la agregación de cadenas son las más comunes) y esas filas indican la diferencia.¿Cuál es la diferencia entre INNER JOIN y LEFT JOIN?
INNER JOIN devuelve solo las filas que tienen coincidencia en ambas tablas. Un LEFT JOIN devuelve cada fila de la tabla izquierda (la primera), rellenando con NULL las columnas de la tabla derecha cuando no hay coincidencia; es útil cuando quieres todos los usuarios aunque algunos no tengan pedidos.¿Puedo practicar estos comandos SQL en línea?
SELECT hasta los joins y las funciones de ventana.