Saltar al contenido

Mentoring

SELECT en MySQL: cómo consultar datos

Aprende a usar SELECT en MySQL con WHERE, JOIN, GROUP BY, ORDER BY y LIMIT.

Mentoring 2 min de lectura

Actualizado el

SELECT en MySQL

SELECT consulta columnas y filas de una o varias tablas. La forma mínima es:

SELECT * FROM clientes;

Sintaxis general

SELECT columnas
FROM tabla
WHERE condicion
GROUP BY columnas
HAVING condicion
ORDER BY columnas
LIMIT numero;

No es obligatorio usar todas las cláusulas: añade las que necesites para acotar el resultado.

Seleccionar columnas concretas

SELECT nombre, email
FROM clientes;

Evita SELECT * si solo necesitas algunas columnas. La consulta será más clara y normalmente moverá menos datos.

Eliminar duplicados del resultado con DISTINCT

DISTINCT elimina filas repetidas del resultado de la consulta, pero no borra datos de la tabla:

SELECT DISTINCT ciudad, activo
FROM clientes;

Al indicar varias columnas, MySQL considera la combinación completa: solo omite las filas cuya tupla de ciudad y activo ya apareció.

Filtrar con WHERE

SELECT *
FROM clientes
WHERE ciudad = 'Madrid';

También puedes combinar condiciones:

SELECT *
FROM clientes
WHERE ciudad = 'Madrid'
  AND activo = 1;

Operadores habituales:

  • = igual.
  • <> distinto.
  • > mayor que.
  • < menor que.
  • IN dentro de una lista.
  • BETWEEN entre dos valores.
  • LIKE búsqueda por patrón.

Para búsquedas con comodines, consulta la guía de LIKE en MySQL.

Ordenar con ORDER BY

SELECT nombre, precio
FROM productos
ORDER BY precio ASC;

ASC ordena de menor a mayor. DESC ordena de mayor a menor.

SELECT nombre, precio
FROM productos
ORDER BY precio DESC;

Limitar resultados con LIMIT

SELECT *
FROM productos
ORDER BY precio DESC
LIMIT 10;

Devuelve los 10 productos más caros.

Para paginar:

SELECT *
FROM productos
ORDER BY id
LIMIT 10 OFFSET 20;

Devuelve 10 filas saltando las 20 primeras.

Consultar varias tablas con JOIN

SELECT c.nombre AS cliente, p.total, p.fecha
FROM pedidos p
JOIN clientes c ON c.id = p.cliente_id;

JOIN relaciona filas de varias tablas. En este caso une pedidos con clientes.

Agrupar con GROUP BY

SELECT cliente_id, COUNT(*) AS total_pedidos
FROM pedidos
GROUP BY cliente_id;

GROUP BY se usa con funciones como COUNT, SUM, AVG, MIN o MAX.

Las diferencias entre contar filas, valores no nulos y valores únicos se explican en la guía de COUNT en MySQL.

Ejemplo con suma:

SELECT cliente_id, SUM(total) AS facturado
FROM pedidos
GROUP BY cliente_id;

Filtrar grupos con HAVING

SELECT cliente_id, SUM(total) AS facturado
FROM pedidos
GROUP BY cliente_id
HAVING SUM(total) > 1000;

WHERE filtra filas antes de agrupar. HAVING filtra después de agrupar.

Ejemplo completo

SELECT
  c.nombre AS cliente,
  COUNT(p.id) AS total_pedidos,
  SUM(p.total) AS facturado
FROM clientes c
JOIN pedidos p ON p.cliente_id = c.id
WHERE p.fecha >= '2024-01-01'
GROUP BY c.id, c.nombre
HAVING SUM(p.total) > 500
ORDER BY facturado DESC
LIMIT 10;

Esta consulta obtiene los 10 clientes que más han facturado desde 2024, siempre que superen 500 de facturación.

Consejos

  • Selecciona solo las columnas que necesitas.
  • Usa WHERE para reducir filas cuanto antes.
  • Si una consulta empieza a degradarse al crecer la tabla, revisa cómo crear y analizar índices en MySQL. Los índices pueden ayudar en columnas usadas en filtros, relaciones y ordenaciones, pero conviene comprobar su efecto en cada consulta.
  • Usa alias (AS) para que los resultados sean más legibles.