Cuando sacamos datos de una base, rara vez nos interesan absolutamente todas las columnas. Por ejemplo, en la tabla de empleados employees puede haber 15 columnas: nombre, apellido, fecha de nacimiento, puesto, salario, fecha de contratación y así. Pero tú solo quieres saber sus nombres y puestos. Lógico, traer todos los datos es inútil e ineficiente. Aquí es donde entra el arte de seleccionar columnas concretas.
Si lo piensas, es como si tuvieras una cesta con naranjas, manzanas y plátanos y solo quisieras sacar las manzanas. Mola, ¿no? ¡Pues eso vamos a hacer!
Sintaxis
Recuerda, SQL está diseñado para ser lo más user-friendly posible.
Primero, el case del texto de la consulta no importa. Puedes escribir SELECT, Select o select y todo va a funcionar igual. Segundo, los saltos de línea no afectan. El SGBD va a convertir la consulta en una sola línea larga, así que puedes escribirla como te dé la gana.
Como ya te imaginas, las palabras clave SELECT y FROM no son todo. Si no, no habría tanto lío con SQL. La versión extendida de una consulta SQL se ve así:
SELECT columnas
FROM tabla
WHERE condición
GROUP BY columnas
HAVING columnas
ORDER BY orden
Donde:
columnas— son los nombres de las columnas que quieres obtener.tabla— el nombre de la tabla de donde sacas los datos.condición— la condición para filtrar filas.orden— las filas y el orden de ordenación.
¿Suena fácil? Vamos a verlo con un ejemplo real. Pero mejor empezamos con algo más sencillo.
Ejemplo de consulta básica
Supón que tenemos una tabla students con datos de estudiantes. Así podría ser la estructura de la tabla:
| id | first_name | last_name | age | grade |
|---|---|---|---|---|
| 1 | Alex | Lin | 20 | A |
| 2 | Anna | Song | 22 | B |
| 3 | Otto | Art | 19 | A |
Ahora queremos saber solo los apellidos last_name y las notas grade de todos los estudiantes.
La consulta sería así:
SELECT last_name, grade
FROM students;
Resultado:
| last_name | grade |
|---|---|
| Lin | A |
| Song | B |
| Art | A |
¡Enhorabuena, acabas de ahorrar recursos de la base de datos y hacer el resultado más legible!
Concatenación de cadenas
Ya sabes seleccionar datos, vamos a probar algo más interesante. En nuestra tabla, el nombre y el apellido están en columnas separadas. Vamos a escribir una consulta donde haya una columna con el nombre completo del estudiante.
Para juntar dos cadenas en PostgreSQL se usa el operador ||. Así se vería nuestra consulta SELECT:
SELECT first_name || last_name, grade
FROM students;
Resultado:
| first_name || last_name | grade |
|---|---|
| AlexLin | A |
| AnnaSong | B |
| OttoArt | A |
Hmm. Parece que falta algo. ¡Por ejemplo, un espacio entre el nombre y el apellido! Vamos a arreglarlo.
SELECT first_name || ' ' || last_name, grade
FROM students;
Resultado:
| first_name || ' ' || last_name | grade |
|---|---|
| Alex Lin | A |
| Anna Song | B |
| Otto Art | A |
Genial. El contenido de la tabla resultado me mola, pero ¿qué pasa con el encabezado? Me gustaría ver ahí full name, o simplemente name, pero no first_name || ' ' || last_name. Así no queda bonito ni práctico. Pero también hay solución para eso.
Selección usando alias
Las consultas SQL pueden ser mucho más legibles usando alias. Es solo una forma de darle un nuevo nombre a una columna dentro de la consulta. Los alias usan la palabra clave AS (aunque formalmente puedes omitirla, pero para la legibilidad mejor no lo hagas).
Veamos un ejemplo:
SELECT first_name AS "Nombre", last_name AS "Apellido", grade AS "Nota"
FROM students;
Resultado:
| Nombre | Apellido | Nota |
|---|---|---|
| Alex | Lin | A |
| Anna | Song | B |
| Otto | Art | A |
Aquí:
- Renombramos las columnas para que sus nombres sean más claros en español.
- Usamos alias en la consulta, usando
AS.
Si tu jefe o cliente necesita ver los datos de usuarios y no quieres que se vuelva loco mirando la tabla, los alias son tus amigos.
Ahora vamos a mejorar un poco nuestra consulta para obtener el nombre completo.
SELECT first_name || ' ' || last_name AS "Nombre completo", grade AS "Nota"
FROM students;
Resultado:
| Nombre completo | Nota |
|---|---|
| Alex Lin | A |
| Anna Song | B |
| Otto Art | A |
Perfecto. Justo como queríamos.
¿Por qué seleccionar solo algunas columnas?
- Rendimiento
Imagina que trabajas con una tabla enorme de millones de filas y cientos de columnas. Sacar todos los datos con SELECT * puede tardar minutos o incluso horas, y consumir muchos recursos del servidor. Así solo obtienes lo que necesitas.
- Legibilidad
Cuando solo sacas las columnas que necesitas, el resultado es mucho más fácil de entender. Si no, tu resultado será como intentar leer un feed de noticias larguísimo un viernes por la noche.
- Minimizar errores
Cuantos menos datos proceses en la consulta, menos probable es que te salga algo mal. Especialmente si luego vas a trabajar con esos datos.
¿Qué hay que tener en cuenta?
Alias de tablas
Otra forma de lidiar con nombres de tablas largos es usar alias de tablas. Deberían recordar al nombre original de la tabla o tener sentido con su contenido.
SELECT sa05.first_name, sa05.course_id
FROM students_archive_2005 AS sa05
Este método es especialmente útil si tienes nombres de tablas largos como university_students_enrollments_records, puedes usar usr o us
Errores típicos al seleccionar columnas concretas
Errores en los nombres de las columnas. Si escribes mal el nombre de una columna, te saldrá un error como:
ERROR: column "lastname" does not exist. Revisa que los nombres estén bien escritos.Nombres en conflicto. Cuando hay varias tablas en la consulta, siempre indica a qué tabla pertenece el campo. Por ejemplo,
students.first_name.Usar
SELECT *— es una trampa para novatos. Sí, funciona y es cómodo, pero en proyectos grandes es mala práctica. ¡Selecciona solo las columnas que realmente necesitas!
GO TO FULL VERSION