Lesión 2.1 · Tiempo de lectura: ~6 min
Seleccionar Datos de una Tabla
La operación más fundamental en SQL es recuperar datos de una tabla. La instrucción SELECT se utiliza para este propósito.
Sintaxis Básica (Seleccionando Todas las Columnas)
Para seleccionar todas las columnas de una tabla, utilizas la sintaxis SELECT *:
SELECT *
FROM table_name;
SELECT: Esta palabra clave recupera datos de una tabla.*(Asterisco): Indica que se deben recuperar todas las columnas de la tabla. El asterisco (*) actúa como un comodín que representa todas las columnas en la tabla.FROM table_name: Especifica la tabla de la cual se van a recuperar los datos. Reemplazatable_namecon el nombre real de la tabla que estás consultando.
Ejemplo (Base de Datos Sakila)
Para seleccionar todas las columnas de la tabla actor en la base de datos Sakila:
SELECT *
FROM actor;
Esta consulta devolverá todas las filas y todas las columnas (por ejemplo, actor_id, first_name, last_name, last_update) de la tabla actor.
Evitar Usar * para Seleccionar Todas las Columnas
Usar * para seleccionar todas las columnas generalmente no se recomienda. Aunque puede parecer conveniente, puede llevar a varios problemas:
- Impacto en el Rendimiento: Recuperar todas las columnas puede aumentar la cantidad de datos transferidos, especialmente si la tabla tiene muchas columnas o conjuntos de datos grandes.
- Cambios No Intencionados: Si el esquema de la tabla cambia (por ejemplo, se agregan nuevas columnas), las consultas que usan
*pueden devolver resultados inesperados. - Legibilidad y Mantenimiento: Especificar explícitamente las columnas hace que la consulta sea más fácil de entender y mantener.
En lugar de usar *, es una buena práctica enumerar explícitamente las columnas que necesitas. Este enfoque asegura claridad, reduce el riesgo de resultados no intencionados y mejora el rendimiento de la consulta.
Seleccionando Columnas Específicas
Para recuperar columnas específicas, enumera sus nombres en la instrucción SELECT, separadas por comas:
SELECT column1, column2, column3
FROM table_name;
SELECT column1, column2, column3: Especifica las columnas a recuperar. Reemplazacolumn1,column2ycolumn3con los nombres reales de las columnas.FROM table_name: Indica la tabla de la cual recuperar los datos.
Ejemplo (Base de Datos Sakila)
Para recuperar solo las columnas first_name y last_name de la tabla actor:
SELECT first_name, last_name
FROM actor;
Esta consulta devolverá todas las filas, pero solo las columnas first_name y last_name para cada actor.
Seleccionando Valores Únicos con DISTINCT
A veces no necesitas cada fila, sino solo valores únicos en una columna (o un conjunto de columnas). Para esto, usa la palabra clave DISTINCT.
Sintaxis Básica
SELECT DISTINCT column_name
FROM table_name;
DISTINCT elimina duplicados del resultado y mantiene solo filas únicas.
Ejemplo (Base de Datos Sakila)
Vamos a obtener una lista de calificaciones de películas únicas:
SELECT DISTINCT rating
FROM film;
Esta consulta devuelve cada valor de rating solo una vez.
DISTINCT con Múltiples Columnas
También puedes aplicar DISTINCT a múltiples 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 en función del par rating + rental_duration.
Cuándo Usar DISTINCT
DISTINCT es útil cuando:
- construyes listas de referencia (por ejemplo, categorías, estados o calificaciones únicas);
- verificas la calidad de los datos (¿hay valores repetidos inesperados?);
- preparas datos para filtros y controles de interfaz de usuario.
Si solo necesitas verificar si un valor pertenece a una lista corta,
IN (...)enWHEREsuele ser una mejor opción. UsaDISTINCTespecíficamente para eliminar duplicados del conjunto de resultados.
Orden de las Columnas en SELECT
El orden en que enumeras las columnas en la instrucción SELECT determina su orden en el conjunto de resultados. Sin embargo, no altera el orden de las columnas en la tabla misma.
Ejemplo (Base de Datos Sakila)
SELECT last_name, first_name
FROM actor;
En este caso, la columna last_name aparecerá antes de la columna first_name en la salida, aunque first_name pueda estar definida antes en la estructura de la tabla. El orden en la instrucción SELECT anula el orden predeterminado de las columnas de la tabla.
Preguntas Frecuentes
¿Puedo usar SELECT * en proyectos reales?
Sí, pero úsalo intencionadamente. Es conveniente para verificaciones rápidas y depuración, mientras que las consultas de producción suelen ser más seguras cuando enumeran solo las columnas requeridas.
¿El orden de las columnas en SELECT cambia la estructura de la tabla?
No. Solo cambia el orden de las columnas en la salida de la consulta. La definición de la tabla en la base de datos permanece igual.
¿Por qué evitar SELECT * en APIs e informes?
Porque los cambios en el esquema pueden agregar columnas automáticamente a los resultados. Eso puede romper contratos de API, informes o código de cliente que espera un conjunto fijo de campos.
Preguntas de Entrevista
¿Cuál es el riesgo práctico de SELECT *?
Los principales riesgos son la transferencia de datos extra, menor estabilidad cuando cambian los esquemas y menor legibilidad. En el código de producción, los entrevistadores suelen esperar listas de columnas explícitas.
¿Cuándo puede DISTINCT ralentizar una consulta?
En conjuntos de datos grandes, porque la base de datos debe hacer trabajo adicional para eliminar duplicados (a menudo ordenando o haciendo hashing). Usa DISTINCT cuando se requiere unicidad, no por defecto.
¿Qué devuelve SELECT DISTINCT a, b?
Devuelve pares únicos (a, b), no valores únicos de cada columna de forma independiente.
¿Cómo eliges entre DISTINCT y filtrado WHERE?
Usa WHERE para filtrar filas por condiciones. Usa DISTINCT para eliminar duplicados de filas que ya han sido seleccionadas.
Conclusiones Clave de esta Lección:
SELECT *recupera todas las columnas de una tabla.SELECT column1, column2, ...recupera solo las columnas especificadas.SELECT DISTINCT column_namedevuelve solo valores únicos sin duplicados.- El orden de las columnas en la instrucción
SELECTdetermina el orden en el conjunto de resultados.