El comando SELECT es la instrucción más utilizada en SQL, ya que permite consultar datos almacenados en una o varias tablas de una base de datos.
Con SELECT
podemos elegir qué columnas mostrar, aplicar filtros, ordenar resultados, agrupar información e incluso generar cálculos.
👉 En otras palabras: SELECT es la forma de “preguntar” a la base de datos y obtener respuestas.
Sintaxis básica de SELECT
SELECT columnas
FROM tabla
[WHERE condición]
[GROUP BY columna]
[HAVING condición]
[ORDER BY columna ASC | DESC]
[LIMIT n OFFSET m];
Explicación:
- SELECT columnas → qué columnas mostrar (puede ser
*
para todas). - FROM tabla → de qué tabla obtener los datos.
- WHERE → filtrar filas según condiciones.
- GROUP BY → agrupar resultados.
- HAVING → filtrar resultados agrupados.
- ORDER BY → ordenar resultados.
- LIMIT / OFFSET → limitar la cantidad de filas y paginar resultados.
Ejemplo simple de SELECT
Tabla clientes
:
id | nombre | ciudad |
---|---|---|
1 | Ana | Madrid |
2 | Luis | Barcelona |
3 | Carla | Madrid |
Consulta:
SELECT nombre, ciudad
FROM clientes;
Resultado:
nombre | ciudad |
---|---|
Ana | Madrid |
Luis | Barcelona |
Carla | Madrid |
👉 Devuelve las columnas nombre
y ciudad
de todos los clientes.
SELECT con condiciones (WHERE)
SELECT nombre, ciudad
FROM clientes
WHERE ciudad = 'Madrid';
👉 Devuelve solo a los clientes de Madrid.
SELECT con operadores lógicos
SELECT nombre, ciudad
FROM clientes
WHERE ciudad = 'Madrid' OR ciudad = 'Barcelona';
👉 Permite combinar condiciones con AND
, OR
y NOT
.
SELECT con ordenamiento (ORDER BY)
SELECT nombre, salario
FROM empleados
ORDER BY salario DESC;
👉 Devuelve empleados ordenados por salario de mayor a menor.
SELECT con alias
Podemos renombrar columnas o tablas para mayor claridad:
SELECT nombre AS cliente, ciudad AS localidad
FROM clientes;
👉 AS
crea alias más legibles en los resultados.
SELECT con funciones agregadas
- COUNT(): contar registros.
- SUM(): sumar valores.
- AVG(): calcular promedios.
- MIN() / MAX(): valores mínimo y máximo.
Ejemplo:
SELECT COUNT(*) AS total_clientes, AVG(salario) AS promedio_salario
FROM empleados;
SELECT con GROUP BY y HAVING
SELECT ciudad, COUNT(*) AS total
FROM clientes
GROUP BY ciudad
HAVING COUNT(*) > 1;
👉 Muestra ciudades con más de 1 cliente.
SELECT con JOIN
SELECT c.nombre, p.total
FROM clientes c
JOIN pedidos p ON c.id = p.cliente_id;
👉 Combina datos de varias tablas relacionadas (más en JOIN)
SELECT con subconsultas
SELECT nombre
FROM empleados
WHERE salario > (SELECT AVG(salario) FROM empleados);
👉 Devuelve empleados que ganan más que el promedio, usando una subquery.
SELECT con funciones de ventana
SELECT nombre, salario,
ROW_NUMBER() OVER (ORDER BY salario DESC) AS ranking
FROM empleados;
👉 Numera filas en función del salario.
SELECT con LIMIT y OFFSET (paginación)
SELECT nombre, ciudad
FROM clientes
ORDER BY id
LIMIT 10 OFFSET 20;
👉 Devuelve 10 filas, empezando desde la fila 21 (para paginación).
SELECT con DISTINCT
SELECT DISTINCT ciudad
FROM clientes;
👉 Devuelve las ciudades únicas, eliminando duplicados.
SELECT con expresiones y cálculos
SELECT nombre, salario, salario * 0.1 AS bonus
FROM empleados;
👉 Calcula un 10% de bono sobre el salario.
Casos prácticos de SELECT
- Listar clientes de una ciudad específica.
- Obtener los productos más vendidos.
- Calcular el salario promedio de un departamento.
- Generar rankings de ventas.
- Extraer reportes para dashboards de BI.
Errores comunes al usar SELECT
- Usar SELECT * en producción
👉 Trae todas las columnas, incluso las que no se necesitan, afectando rendimiento. - Olvidar ORDER BY
👉 Sin orden explícito, los resultados no están garantizados en ningún orden. - Confundir WHERE con HAVING
👉WHERE
filtra antes del agrupamiento,HAVING
después. - No usar alias en queries complejas
👉 Hace que la consulta sea difícil de leer y mantener. - No indexar columnas filtradas en SELECT
👉 Puede ralentizar consultas en tablas grandes.
Buenas prácticas con SELECT
- Siempre especificar solo las columnas necesarias.
- Usar alias (
AS
) para mejorar legibilidad. - Acompañar consultas con comentarios si son complejas.
- Asegurar índices en columnas de
WHERE
yJOIN
. - Probar primero con
LIMIT
en consultas sobre tablas grandes.
SELECT en distintos motores de base de datos
- MySQL / MariaDB: soporta
LIMIT
yOFFSET
. - PostgreSQL: soporte avanzado para funciones de ventana.
- SQL Server: usa
TOP n
en lugar deLIMIT
. - Oracle: usa
ROWNUM
oFETCH FIRST
. - SQLite: soporta
LIMIT
yOFFSET
.
👉 El concepto es universal, con pequeñas diferencias de sintaxis según el motor.
Preguntas frecuentes (FAQ)
*1. ¿Qué significa SELECT ?
Devuelve todas las columnas de la tabla, pero no es recomendable en producción.
2. ¿Cuál es la diferencia entre WHERE y HAVING?WHERE
filtra filas antes de agrupar, HAVING
filtra después de GROUP BY
.
3. ¿Se puede usar SELECT sin FROM?
Sí, en algunos motores:
SELECT 2+2;
4. ¿SELECT siempre devuelve filas?
No, puede devolver cero si no hay coincidencias.
5. ¿Cuál es la consulta más usada en SQL?SELECT
es la más utilizada, ya que permite leer datos de la base.
Conclusión
El comando SELECT en SQL es la herramienta más importante del lenguaje:
- Permite consultar datos en una o varias tablas.
- Soporta filtros, agrupaciones, ordenamientos y cálculos.
- Se utiliza en reportes, aplicaciones, análisis de datos y BI.
Dominar SELECT
es el primer paso para manejar bases de datos de manera profesional.
Domina la selección de columnas y tablas en SELECT y FROM y consulta el Glosario SQL completo.