menu
languageEspañol
save_alt Descargar

Hoja de referencia del lenguaje SQL

Referencia esencial de comandos y sintaxis SQL para consultar bases de datos

🔍 Fundamentos de SELECT

Obtén datos de las tablas indicando qué columnas devolver. Usa DISTINCT para quitar duplicados y AS para crear alias de columnas.
SELECT customer_id, name, email
FROM customers;

-- With alias and DISTINCT
SELECT DISTINCT country AS customer_country
FROM customers;

Puntos clave:

  • Usa columnas específicas en lugar de * para un mejor rendimiento
  • DISTINCT elimina las filas duplicadas
  • La palabra clave AS crea alias de columnas
  • El orden de las columnas en SELECT define el orden del resultado

⚡ Cláusula WHERE

Filtra filas según condiciones usando operadores de comparación. Combina varias condiciones con AND/OR para filtros más complejos.
SELECT name, price
FROM products
WHERE price > 100;

-- Multiple conditions
SELECT name, category
FROM products
WHERE category = 'Electronics'
  AND price <= 500;

Puntos clave:

  • Filtra las filas antes de devolver los resultados
  • Puede combinar varias condiciones con AND/OR
  • Los valores de texto requieren comillas simples
  • Operadores: =, !=, <>, <, >, <=, >=

⚙️ Operadores lógicos

Combina varias condiciones con AND (todas deben cumplirse), OR (al menos una debe cumplirse) y NOT (niega la condición).
-- AND operator
SELECT * FROM orders
WHERE status = 'shipped' AND total > 100;

-- OR operator
SELECT * FROM customers
WHERE country = 'USA' OR country = 'Canada';

-- NOT operator
SELECT * FROM products
WHERE NOT category = 'Discontinued';

Puntos clave:

  • AND tiene mayor precedencia que OR
  • Usa paréntesis para controlar el orden de evaluación
  • NOT equivale a != o <>
  • Combina operadores para lógica compleja

↕️ ORDER BY

Ordena los resultados de forma ascendente (ASC) o descendente (DESC). Ordena por varias columnas para ordenamientos complejos.
-- Single column sort
SELECT name, price
FROM products
ORDER BY price DESC;

-- Multiple columns
SELECT name, category, price
FROM products
ORDER BY category ASC, price DESC;

Puntos clave:

  • ASC es el valor predeterminado si no se especifica
  • Ordena por varias columnas (prioridad de izquierda a derecha)
  • Puedes ordenar por una columna que no está en el SELECT
  • Los valores NULL van al principio o al final (según la base de datos)

✂️ LIMIT / OFFSET

Limita el número de filas devueltas y sáltate filas con OFFSET. Esencial para paginar y trabajar con conjuntos de resultados grandes.
-- First 10 rows
SELECT name, price
FROM products
ORDER BY price DESC
LIMIT 10;

-- Pagination (skip first 20, get next 10)
SELECT name, price
FROM products
ORDER BY price DESC
LIMIT 10 OFFSET 20;

Puntos clave:

  • Esencial para la paginación
  • Combínalo con ORDER BY para obtener resultados consistentes
  • OFFSET empieza en 0 (primera fila)
  • Nota: SQL Server usa TOP en lugar de LIMIT

*️⃣ Coincidencia de patrones (LIKE)

Busca patrones de texto con comodines: % coincide con cualquier secuencia de caracteres y _ con un solo carácter.
-- Starts with 'John'
SELECT name, email
FROM customers
WHERE name LIKE 'John%';

-- Contains 'smith'
SELECT name FROM customers
WHERE name LIKE '%smith%';

-- Exact pattern (5 characters starting with 'A')
SELECT code FROM products
WHERE code LIKE 'A____';

Puntos clave:

  • % coincide con cero o más caracteres
  • _ coincide exactamente con un carácter
  • Distinguir mayúsculas y minúsculas depende de la collation de la base de datos
  • Puedes usar NOT LIKE para excluir

↔️ Rangos y conjuntos (BETWEEN, IN)

Filtra por rangos con BETWEEN (inclusivo) o busca valores en una lista con IN. Es más eficiente que varias condiciones OR.
-- BETWEEN (inclusive)
SELECT name, price
FROM products
WHERE price BETWEEN 50 AND 100;

-- IN operator
SELECT name, country
FROM customers
WHERE country IN ('USA', 'Canada', 'Mexico');

-- NOT IN
SELECT name FROM products
WHERE category NOT IN ('Discontinued', 'Draft');

Puntos clave:

  • BETWEEN incluye ambos valores límite
  • IN es más limpio que varias condiciones OR
  • Puedes usar IN con subconsultas
  • BETWEEN funciona con fechas y textos

❓ Manejo de NULL

Trabaja con valores NULL usando IS NULL e IS NOT NULL. Usa COALESCE para dar valores predeterminados a columnas NULL.
-- Find NULL values
SELECT name, phone
FROM customers
WHERE phone IS NULL;

-- Exclude NULL values
SELECT name, email
FROM customers
WHERE email IS NOT NULL;

-- Provide default value
SELECT name, COALESCE(phone, 'No phone') AS contact
FROM customers;

Puntos clave:

  • No puedes usar = ni != con NULL
  • Debes usar IS NULL o IS NOT NULL
  • COALESCE devuelve el primer argumento que no sea NULL
  • NULL en operaciones matemáticas da como resultado NULL

Σ Funciones de agregación

Realiza cálculos sobre conjuntos de filas: COUNT, SUM, AVG, MIN, MAX. Las agregaciones ignoran los valores NULL (excepto COUNT(*)).
-- Basic aggregates
SELECT
  COUNT(*) AS total_orders,
  SUM(amount) AS total_revenue,
  AVG(amount) AS avg_order_value,
  MIN(amount) AS smallest_order,
  MAX(amount) AS largest_order
FROM orders;

-- COUNT variations
SELECT COUNT(*) AS all_rows,
       COUNT(email) AS rows_with_email,
       COUNT(DISTINCT country) AS unique_countries
FROM customers;

Puntos clave:

  • COUNT(*) incluye todas las filas (incluso con NULL)
  • COUNT(column) excluye los valores NULL
  • COUNT(DISTINCT column) cuenta valores únicos
  • SUM/AVG solo funcionan con tipos numéricos

▦ GROUP BY / HAVING

Agrupa filas por valores de columna y aplica funciones de agregación. Usa HAVING para filtrar grupos (como WHERE, pero para grupos).
-- Group by single column
SELECT country, COUNT(*) AS customer_count
FROM customers
GROUP BY country
ORDER BY customer_count DESC;

-- Group by multiple columns with HAVING
SELECT category, status, AVG(price) AS avg_price
FROM products
GROUP BY category, status
HAVING AVG(price) > 50;

Puntos clave:

  • Todas las columnas del SELECT que no sean agregadas deben estar en GROUP BY
  • WHERE filtra filas antes de agrupar
  • HAVING filtra grupos después de la agregación
  • Puedes usar funciones de agregación en la cláusula HAVING

🔗 Joins (referencia rápida) VER GUÍA DETALLADA

Combina datos de varias tablas a partir de columnas relacionadas. INNER JOIN devuelve solo coincidencias; LEFT/RIGHT conservan un lado.
-- INNER JOIN (most common)
SELECT orders.id, customers.name, orders.amount
FROM orders
INNER JOIN customers
  ON orders.customer_id = customers.id;

-- LEFT JOIN (all orders, even without customer)
SELECT orders.id, customers.name
FROM orders
LEFT JOIN customers
  ON orders.customer_id = customers.id;

Puntos clave:

  • INNER JOIN es el más común (puedes escribir solo JOIN)
  • LEFT/RIGHT JOIN conservan todas las filas de una tabla
  • Usa la cláusula ON para especificar la condición del join

⬚ Subconsultas

Consultas dentro de consultas para filtros y cálculos complejos. Úsalas con IN, EXISTS o como valores escalares.
-- Subquery with IN
SELECT name, price
FROM products
WHERE category_id IN (
  SELECT id FROM categories
  WHERE name = 'Electronics'
);

-- Subquery with EXISTS
SELECT name FROM customers c
WHERE EXISTS (
  SELECT 1 FROM orders o
  WHERE o.customer_id = c.id
);

-- Scalar subquery
SELECT name, price,
  price - (SELECT AVG(price) FROM products) AS price_diff
FROM products;

Puntos clave:

  • Una subconsulta con IN devuelve varios valores
  • EXISTS verifica si hay registros (eficiente)
  • Una subconsulta escalar devuelve un solo valor
  • Una subconsulta correlacionada hace referencia a la consulta externa

✂️ Funciones de texto

Extrae, transforma y formatea datos de texto. SUBSTRING extrae por posición; LEFT/RIGHT toman desde cualquiera de los extremos.
-- Extract characters by position
SELECT SUBSTRING(name, 1, 3) AS prefix FROM products;

-- First / last N characters
SELECT LEFT(email, 5), RIGHT(phone, 4) FROM users;

-- Dynamic position (find @ then extract domain)
SELECT SUBSTRING(email, INSTR(email, '@') + 1) AS domain
FROM users;

-- Common string helpers
SELECT
  UPPER(name), LOWER(name),
  TRIM(name),
  LENGTH(name)
FROM users;

Puntos clave:

  • Las posiciones en SQL empiezan en 1 (primer carácter = posición 1)
  • Usa LEFT/RIGHT para el inicio/final; SUBSTRING para el medio
  • SQLite no soporta LEFT/RIGHT — usa SUBSTRING
  • Oracle usa SUBSTR(), no SUBSTRING()

¿Necesitas una mejor forma de escribir SQL?

Beekeeper Studio es un editor SQL moderno e intuitivo con autocompletado, historial de consultas y soporte para más de 15 bases de datos.

Prueba Beekeeper Studio gratis