Seleccionar datos de una tabla
Lección 2.1 · Tiempo de lectura: ~6 min · Tareas de práctica ↓
La operación más básica de SQL es obtener datos de una tabla. Para ello se usa la sentencia SELECT.
Sintaxis básica (seleccionar todas las columnas)
Para seleccionar todas las columnas de una tabla, se usa la sintaxis SELECT *:
SELECT *
FROM table_name;
SELECT: esta palabra clave obtiene datos de una tabla.*(asterisco): indica que hay que obtener todas las columnas de la tabla. El asterisco (*) funciona como comodín que representa todas las columnas.FROM table_name: indica la tabla de la que se obtienen los datos. Sustituyetable_namepor el nombre real de la tabla que consultas.
Ejemplo (base de datos Sakila)
Para seleccionar todas las columnas de la tabla actor de la base de datos Sakila:
SELECT *
FROM actor;
Esta consulta devuelve todas las filas y todas las columnas (por ejemplo, actor_id, first_name, last_name, last_update) de la tabla actor.
Evita usar * para seleccionar todas las columnas
En general no se recomienda usar * para seleccionar todas las columnas. Aunque parezca cómodo, puede causar varios problemas:
- Impacto en el rendimiento: obtener todas las columnas puede aumentar la cantidad de datos transferidos, sobre todo si la tabla tiene muchas columnas o muchos datos.
- Cambios inesperados: si cambia el esquema de la tabla (por ejemplo, se añaden columnas), las consultas con
*pueden devolver resultados inesperados. - Legibilidad y mantenimiento: indicar las columnas de forma explícita hace que la consulta sea más fácil de entender y mantener.
En lugar de *, es una buena práctica enumerar explícitamente las columnas que necesitas. Así la consulta es más clara, se reduce el riesgo de resultados inesperados y mejora el rendimiento.
Seleccionar columnas concretas
Para obtener columnas concretas, escribe sus nombres en la sentencia SELECT, separados por comas:
SELECT column1, column2, column3
FROM table_name;
SELECT column1, column2, column3: indica las columnas que se obtienen. Sustituyecolumn1,column2ycolumn3por los nombres reales de las columnas.FROM table_name: indica la tabla de la que se obtienen los datos.
Ejemplo (base de datos Sakila)
Para obtener solo las columnas first_name y last_name de la tabla actor:
SELECT first_name, last_name
FROM actor;
Esta consulta devuelve todas las filas, pero solo las columnas first_name y last_name de cada actor.
Seleccionar valores únicos con DISTINCT
A veces no necesitas todas las filas, sino solo los valores únicos de una columna (o de un conjunto de columnas). Para eso se usa la palabra clave DISTINCT.
Sintaxis básica
SELECT DISTINCT column_name
FROM table_name;
DISTINCT elimina los duplicados del resultado y deja solo las filas únicas.
Ejemplo (base de datos Sakila)
Obtengamos la lista de clasificaciones de películas sin repetir:
SELECT DISTINCT rating
FROM film;
Esta consulta devuelve cada valor de rating una sola vez.
DISTINCT con varias columnas
También puedes aplicar DISTINCT a varias columnas. En ese caso, la unicidad se determina por la combinación de valores.
SELECT DISTINCT rating, rental_duration
FROM film;
Aquí los duplicados se eliminan según el par rating + rental_duration.
Cuándo usar DISTINCT
DISTINCT es útil cuando:
- creas listas de referencia (por ejemplo, categorías, estados o clasificaciones únicas);
- compruebas la calidad de los datos (¿hay valores repetidos inesperados?);
- preparas datos para filtros y controles de la interfaz.
Si solo necesitas comprobar si un valor pertenece a una lista corta,
IN (...)enWHEREsuele ser más adecuado. UsaDISTINCTprecisamente para quitar duplicados del resultado.
Orden de las columnas en SELECT
El orden en que escribes las columnas en la sentencia SELECT determina su orden en el resultado. Sin embargo, no cambia el orden de las columnas en la propia tabla.
Ejemplo (base de datos Sakila)
SELECT last_name, first_name
FROM actor;
En este caso, la columna last_name aparecerá antes que first_name en el resultado, aunque first_name esté definida antes en la estructura de la tabla. El orden de la sentencia SELECT tiene prioridad sobre el orden de las columnas de la tabla.
Preguntas frecuentes
¿Puedo usar SELECT * en proyectos reales?
Sí, pero de forma consciente. Es cómodo para comprobaciones rápidas y depuración, mientras que las consultas de producción suelen ser más seguras si enumeran solo las columnas necesarias.
¿El orden de las columnas en SELECT cambia la estructura de la tabla?
No. Solo cambia el orden de las columnas en el resultado de la consulta. La definición de la tabla en la base de datos sigue igual.
¿Por qué evitar SELECT * en APIs e informes?
Porque los cambios de esquema pueden añadir columnas al resultado automáticamente. Eso puede romper contratos de API, informes o código cliente que espera un conjunto fijo de campos.
Preguntas de entrevista
¿Cuál es el riesgo práctico de SELECT *?
Los riesgos principales son transferir datos de más, menor estabilidad cuando cambia el esquema y peor legibilidad. En código de producción, los entrevistadores suelen esperar listas de columnas explícitas.
¿Cuándo puede DISTINCT ralentizar una consulta?
Con conjuntos de datos grandes, porque la base de datos tiene que hacer trabajo extra para eliminar duplicados (a menudo ordenando o usando hashing). Usa DISTINCT cuando la unicidad sea necesaria, no por defecto.
¿Qué devuelve SELECT DISTINCT a, b?
Devuelve pares (a, b) únicos, no valores únicos de cada columna por separado.
¿Cómo eliges entre DISTINCT y filtrar con WHERE?
Usa WHERE para filtrar filas por condiciones. Usa DISTINCT para quitar duplicados de las filas ya seleccionadas.
Puntos clave de esta lección:
SELECT *obtiene todas las columnas de una tabla.SELECT column1, column2, ...obtiene solo las columnas indicadas.SELECT DISTINCT column_namedevuelve solo valores únicos, sin duplicados.- El orden de las columnas en la sentencia
SELECTdetermina su orden en el resultado.