CodeGym /Cursos /SQL SELF /Selección de columnas concretas: extrayendo datos por nom...

Selección de columnas concretas: extrayendo datos por nombres de columnas

SQL SELF
Nivel 2, Lección 0
Disponible

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í:

  1. Renombramos las columnas para que sus nombres sean más claros en español.
  2. 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?

  1. 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.

  1. 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.

  1. 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

  1. 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.

  2. Nombres en conflicto. Cuando hay varias tablas en la consulta, siempre indica a qué tabla pertenece el campo. Por ejemplo, students.first_name.

  3. 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!

2
Tarea
SQL SELF, nivel 2, lección 0
Bloqueada
Extracción de datos usando alias
Extracción de datos usando alias
2
Tarea
SQL SELF, nivel 2, lección 0
Bloqueada
Formación de una nueva columna utilizando datos de otras columnas
Formación de una nueva columna utilizando datos de otras columnas
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION