SELECT en MySQL: cómo consultar datos
Aprende a usar SELECT en MySQL con WHERE, JOIN, GROUP BY, ORDER BY y LIMIT.
Actualizado el
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.INdentro de una lista.BETWEENentre dos valores.LIKEbú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
WHEREpara 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.