¿Qué aprenderás en esta lección?
Al finalizar esta lección, serás capaz de:
- Comprender la estructura básica de la sentencia SELECT
- Seleccionar columnas específicas de una tabla
- Utilizar el asterisco (*) vs. listar columnas explícitamente
- Aplicar alias a las columnas para mejor legibilidad
- Evitar errores comunes al escribir consultas
Introducción a SELECT
Immagina que tienes una biblioteca enorma con miles de libros. Si quisieras encontrar información específica, no revisarías todos los libros completos, ¿verdad? En su lugar, buscarías en el catálogo los datos que necesitas. SELECT es exactamente eso: tu catálogo de consulta en el mundo de las bases de datos.
La sentencia SELECT es el punto de entrada fundamental para interactuar con cualquier base de datos relacional. Con ella, puedes especificar exactamente qué información deseas obtener, de qué tablas proviene, y cómo deseas que se presente.
Estructura básica de SELECT
La sintaxis más simple de SELECT es:
SELECT columna1, columna2, ...
FROM nombre_tabla;Desglosemos cada parte:
- SELECT: Palabra clave que indica el inicio de la consulta
- columna1, columna2: Los nombres de las columnas que deseas recuperar (separadas por comas)
- FROM: Palabra clave que indica la tabla de origen
- nombre_tabla: El nombre de la tabla donde se encuentran los datos
Seleccionar todas las columnas con el asterisco (*)
El asterisco (*) es un atajo que significa "todas las columnas". Es útil cuando quieres ver toda la información disponible en una tabla sin conocer su estructura exacta:
SELECT *
FROM empleados;Esta consulta devolverá todas las columnas y todas las filas de la tabla empleados.
SELECT * en producción puede ser problemático porque: 1) Devuelve más datos de los necesarios, relentizando la consulta; 2) Si la estructura de la tabla cambia, tus resultados pueden cambiar inesperadamente; 3) Es más difícil de mantener en aplicaciones. Úsalo principalmente para exploración inicial o debugging.Seleccionar columnas específicas
Ahora viene la parte interesante: elegir exactamente qué columnas necesitas. Supongamos que tenemos una tabla llamada clientes con la siguiente estructura:
| id_cliente | nombre | apellido | telefono | ciudad | fecha_registro | |
|---|---|---|---|---|---|---|
| 1 | María | García | [email protected] | 555-1234 | Madrid | 2024-01-15 |
| 2 | Carlos | Rodríguez | [email protected] | 555-5678 | Barcelona | 2024-02-20 |
| 3 | Ana | Martínez | [email protected] | 555-9012 | Valencia | 2024-03-10 |
Ejemplo 1: Seleccionar nombres y apellidos
SELECT nombre, apellido
FROM clientes;Resultado:
| nombre | apellido |
|---|---|
| María | García |
| Carlos | Rodríguez |
| Ana | Martínez |
Ejemplo 2: Seleccionar email y ciudad
SELECT email, ciudad
FROM clientes;Ejemplo 3: Seleccionar una sola columna
SELECT nombre
FROM clientes;Alias de columnas
A veces los nombres de las columnas en la base de datos son técnicos o poco descriptivos. SQL te permite crear alias (nombres temporales) para las columnas en el resultado:
SELECT nombre AS "Nombre del cliente",
email AS "Correo electrónico",
ciudad AS "Ubicación"
FROM clientes;La palabra clave AS es opcional, pero altamente recomendada para mayor claridad:
SELECT nombre "Nombre del cliente",
email "Correo electrónico"
FROM clientes;" ") alrededor de alias con espacios. Algunos sistemas de bases de datos también requieren comillas para alias con caracteres especiales o palabras reservadas.Expresiones en SELECT
No estás limitado a solo nombres de columnas. Puedes incluir expresiones que calculen valores:
SELECT nombre,
precio AS "Precio unitario",
cantidad,
precio * cantidad AS "Total"
FROM productos;Esto calculará automáticamente el total multiplicando precio por cantidad.
Ver más sobre funciones de manipulación de textoTambién puedes manipular el texto de las columnas directamente en el SELECT:
SELECT UPPER(nombre) AS "Nombre en mayúsculas",
LOWER(email) AS "Email en minúsculas",
CONCAT(nombre, ' ', apellido) AS "Nombre completo"
FROM clientes;Estas funciones son extremadamente útiles para formatear datos para reportes o aplicaciones.
Evitar duplicados con DISTINCT
¿Qué pasa si quieres saber qué ciudades tienen clientes, sin repetir la misma ciudad múltiples veces? Usa DISTINCT:
SELECT DISTINCT ciudad
FROM clientes;Esto devolverá cada ciudad una sola vez, sin importar cuántos clientes tenga.
SELECT DISTINCT ciudad, nombre, получишь todas las combinaciones únicas de ciudad+nombre, no solo ciudades únicas.Errores comunes y cómo evitarlos
| Error común | Problema | Solución |
|---|---|---|
SELECT nombre FROM nombres | Olvidar el punto y coma | Siempre termina tu consulta con ; |
SELECT nombre, FROM clientes | Coma extra antes de FROM | No pongas coma antes de FROM |
SELECT nombres FROM clientes | Nombre de columna incorrecto | Verifica que el nombre exista en la tabla |
SELEC nombre FROM clientes | Error de escritura | Revisa la ortografía de las palabras clave |
"La precisión en SQL no es solo una buena práctica, es una necesidad. Un solo carácter mal colocado puede cambiar completamente el significado de tu consulta."
Buenas prácticas recomendadas
- Siempre especifica las columnas: En lugar de
SELECT *, lista exactamente las columnas que necesitas. - Ordena tu código: Escribe cada columna en su propia línea para mejor legibilidad.
- Usa alias descriptivos: Haz que tu código sea auto-documentado.
- Incluye comentarios: Usa
--para comentar tu código cuando sea necesario. - Formato consistente: Mantén un estilo de formato uniforme en todas tus consultas.
-- Ejemplo de consulta bien formateada
SELECT
id_cliente,
nombre,
apellido,
email,
fecha_registro AS "Fecha de registro"
FROM clientes;
--WHERE ciudad = 'Madrid'; -- Esta línea está comentada por ahoraResumen de la lección
En esta lección hemos cubierto los fundamentos de la sentencia SELECT en SQL:
- SELECT es la instrucción fundamental para recuperar datos
- Puedes elegir columnas específicas listándolas después de SELECT
- El asterisco (*) selecciona todas las columnas (úsalo con precaución)
- Los alias con AS mejoran la legibilidad de los resultados
- DISTINCT elimina duplicados en los resultados
- El formato y la organización son cruciales para mantenibilidad
¿Cuál de las siguientes consultas seleccionará únicamente el nombre y el email de la tabla "usuarios"?
- A) SELECT * FROM usuarios;
- B) SELECT nombre, email FROM usuarios;
- C) SELECT ALL nombre, email FROM usuarios;
- D) FETCH nombre, email FROM usuarios;
SELECT nombre, email FROM usuarios;. La opción A seleccionaría todas las columnas, la C usa una sintaxis incorrecta, y la D usa FETCH que tiene otro propósito en SQL.¿Para qué sirve la cláusula AS en una sentencia SELECT?
- A) Para eliminar filas duplicadas
- B) Para renombrar columnas en el resultado de la consulta
- C) Para ordenar los resultados
- D) Para filtrar datos específicos
SELECT nombre AS "Nombre completo" FROM clientes;Ejercicios prácticos
Para reforzar lo aprendido, practica con estos ejercicios usando una tabla de ejemplo llamada productos:
-- Estructura de la tabla productos:
-- id (número), nombre (texto), categoría (texto), precio (número), stock (número)Ejercicio 1: Escribe una consulta para ver solo los nombres y precios de todos los productos.
Ejercicio 2: Selecciona todas las columnas de la tabla productos, pero usa alias para que aparezcan en español: "Identificador", "Nombre del producto", "Categoría", "Precio" y "Cantidad en stock".
Ejercicio 3: Usando DISTINCT, encuentra todas las categorías únicas de productos.
Ver solucionesSolución Ejercicio 1:
SELECT nombre, precio
FROM productos;Solución Ejercicio 2:
SELECT
id AS "Identificador",
nombre AS "Nombre del producto",
categoría AS "Categoría",
precio AS "Precio",
stock AS "Cantidad en stock"
FROM productos;Solución Ejercicio 3:
SELECT DISTINCT categoría
FROM productos;