Volver a la lista de artículos Artículos
Lectura de 16 minutos

19 ejercicios prácticos de PostgreSQL con soluciones detalladas

Probablemente haya escuchado el dicho "la práctica hace al maestro". Descubra si esta frase es cierta probando el completo conjunto de ejercicios de práctica de PostgreSQL que encontrará en este artículo.

Para dominar cualquier idioma, es esencial practicarlo con regularidad para no perder la habilidad. Esto es tan cierto para la comunicación verbal como para la programación. Y la programación SQL no es una excepción. Incluso el programador PostgreSQL más experimentado necesita practicar PostgreSQL diariamente para perfeccionar (y mantener) sus habilidades.

Los principiantes en PostgreSQL deben desarrollar sus habilidades a través de ejercicios sencillos que les permitan incorporar gradualmente nuevos conocimientos. En este artículo, encontrará una serie de ejercicios de práctica PostgreSQL que le ayudarán a aprender rápidamente cómo consultar bases de datos PostgreSQL. Puedes encontrar más ejercicios de práctica SQL para principiantes en este artículo.

Para trabajar en estos ejercicios, necesitarás un servidor PostgreSQL donde puedas crear una base de datos, agregarle tablas y llenarla con datos. También necesitarás una aplicación cliente que te permita ejecutar comandos SQL contra el servidor PostgreSQL. Con estos elementos, podrás crear las tablas de ejemplo que te permitirán realizar todos los ejercicios prácticos de PostgreSQL a lo largo de este artículo. Si necesitas ayuda, puedes leer este artículo sobre cómo crear tu propia base de datos SQL de práctica.

Hay muchas maneras de practicar SQL en línea. La que recomiendo específicamente para usuarios de PostgreSQL es nuestra página interactiva Ejercicios prácticos de SQL en PostgreSQL. En él encontrarás 88 ejercicios que van de conceptos sencillos a avanzados. Las tablas de ejemplo utilizadas en este artículo ya están creadas y pobladas; puedes escribir y ejecutar todos los ejercicios de consulta que quieras y ver cómo funcionan. Los ejercicios de este artículo se han extraído directamente de este curso: si le resultan útiles, puede estar seguro de que el resto del curso también lo será. No se preocupe: se le permite cometer todo tipo de errores - no hay nada que pueda romper y nadie se va a enfadar con usted por ejecutar consultas extrañas.

Finalmente, tenga a mano nuestra hoja de trucos PostgreSQL mientras trabaja en este artículo. Esta guía rápida resume los comandos y características clave de PostgreSQL.

Ahora, ¡comencemos a practicar PostgreSQL!

PostgreEjercicio de SQL Conjunto de Datos

La tabla principal que usaremos para los ejercicios PostgreSQL en este artículo contiene información sobre gatos - su nombre, raza, edad, etc. El nombre de la tabla es simplemente gato, y su estructura es la siguiente:

  • id: Un valor numérico que identifica a cada gato representado en la tabla.
  • name: El nombre del gato.
  • breed
  • coloration
  • age
  • Fav_toy: El tipo de juguete favorito del gato.

He aquí una muestra de los datos:

idnamebreedcolorationagefav_toy
1MickyMaine Coontortoiseshell3ball - red
2NineRagamuffincream2ball - green
3CarmenPersianbrown2toy mouse
4LunaAbyssiniantortoiseshell12teaser
5BellaSiamesered15teaser

Ejercicio 1: Conocer los datos

Ejercicio: Obtener toda la información de la tabla cat.

Solución:

SELECT *
FROM cat;

Explicación: El comando SELECT * FROM cat pide a PostgreSQL que obtenga todas las columnas y todas las filas de la tabla. cat tabla. La clave para obtener todas las columnas es SELECT *. El "*" funciona como comodín: cuando no se conocen los nombres de las columnas, SELECT * devolverá todas ellas.

Con la cláusula FROM cat le está diciendo a PostgreSQL que desea obtener información de la tabla cat tabla. Al no establecer ninguna condición adicional, obtendrá todas las filas. El punto y coma al final del comando es simplemente una indicación de que el comando termina allí.

Ejercicio 2: Selección de Columnas Específicas de una Tabla

Ejercicio: Seleccionar sólo las columnas name y edad de la tabla cat.

Solución:

SELECT name, age
FROM cat;

Explicación: En el ejercicio anterior, utilizaste el comodín "*" para seleccionar todas las columnas de una tabla. En este ejercicio, sólo quieres ver el nombre y la edad de cada gato. En lugar de utilizar el comodín "*", basta con especificar los nombres de las columnas name y age después del comando SELECT. Separe las columnas con una coma.

Ejercicio 3: Recopilación de información sobre gatos siameses

Ejercicio: Obtener toda la información de la tabla cat sobre los gatos siameses.

Solución:

SELECT *
FROM cat
WHERE breed = 'Siamese';

Explicación: Para aplicar un filtro sobre las filas seleccionadas, utilice la cláusula WHERE. Esto permite especificar una condición que deben cumplir las filas para ser incluidas en el conjunto de resultados. En este ejercicio, la condición WHERE pide a la base de datos que devuelva información sólo de los gatos siameses.

La condición especificada en la cláusula WHERE es (en general) una condición lógica que puede evaluarse como verdadera o falsa. En su forma más simple, indica el nombre de una de las columnas de la tabla (breed), a continuación un operador de comparación (=) y un valor con el que comparar ('Siamese'). Tenga en cuenta que todas las cadenas literales deben ir entre comillas.

Ejercicio 4: Encontrar los gatos más jóvenes

Ejercicio: Obtener filas de la tabla cat que correspondan a individuos menores de 8 años.

Solución:

SELECT *
FROM cat
WHERE age < 8;

Explicación: En el ejercicio anterior vimos cómo filtrar los resultados de la consulta comparando una columna de texto (breed) con un valor literal ('Siamese'). Esto incluía sólo las filas en las que el valor de esa columna coincidía con el literal de cadena especificado.

En este ejercicio, también tiene que especificar una condición en la cláusula WHERE. Sin embargo, ahora está aplicando la condición a un valor numérico y utilizando el operador de comparación de no igualdad < (menos que).

Para obtener una lista de todas las filas de la tabla cat de gatos menores de 8 años, debe utilizar la columna edad en la cláusula WHERE. Se combina con el operador de comparación < y el valor numérico 8.

Del mismo modo, puede utilizar diferentes criterios para comparar valores numéricos. Para ver gatos mayores de 8 años, por ejemplo, sólo tiene que cambiar la condición de la cláusula WHERE por age > 8.

Ejercicio 5: Búsqueda de gatos siameses jóvenes

Ejercicio: Obtener las filas que corresponden a gatos siameses menores de 8 años.

Solución:

SELECT *
FROM cat
WHERE breed = 'Siamese'
AND age < 8;

Explicación: A menudo necesitará obtener filas que cumplan más de una condición. Para ello, se deben especificar todas las condiciones en la cláusula WHERE y unirlas mediante la conjunción AND. Como resultado de esta consulta, PostgreSQL devolverá un conjunto de filas de gatos siameses de menos de 8 años.

Además de la conjunción AND, existen otras formas de combinar condiciones en sentencias lógicas que se evalúan como verdadero o falso.

Ejercicio 6: Uso de Condiciones Alternativas (Una u Otra)

Ejercicio: Obtenga una lista de gatos persas o siameses de la cat tabla.

Solución:

SELECT id, name
FROM cat
WHERE breed = 'Siamese'
OR breed = 'Persian';

Explicación: Las condiciones combinadas por el operador lógico OR devuelven Verdadero cuando al menos una de las expresiones es True. En este ejercicio, hemos utilizado el operador OR para obtener los datos de gatos siameses o persas.

Ejercicio 7: Combinación de diferentes condiciones lógicas

Ejercicio: Obtener una lista de gatos siameses o persas de la cat que tengan menos de 5 años o más de 10 años.

Solución:

SELECT id, name
FROM cat
WHERE (breed = 'Siamese' OR breed = 'Persian')
AND (age < 5 OR age > 10);

Explicación: Para obtener datos de una tabla que cumpla una combinación de condiciones alternativas u obligatorias, debemos combinar los operadores lógicos OR y AND. Lo hacemos con paréntesis, para que PostgreSQL entienda correctamente la precedencia de las condiciones.

Se debe tener cuidado cuando los operadores OR y AND se colocan en la misma cláusula WHERE. PostgreSQL combinará las condiciones lógicas en el orden en que aparecen a menos que se utilicen paréntesis. Si se usan paréntesis (como en el ejemplo anterior), el resultado de lo que está en los paréntesis se evalúa primero; luego, esos resultados se combinan con el operador que los conecta.

En este ejercicio, primero se evalúa la raza del gato. Si cumple alguna de las dos condiciones de WHERE, la base de datos evaluará a continuación el siguiente conjunto de condiciones para ver si el gato cumple los requisitos de edad. Sólo se incluyen en el resultado los gatos que cumplen una condición de raza y otra de edad.

Ejercicio 8: Listado de gatos de diferentes razas

Ejercicio: Obtener una lista de gatos Persa, Siamés o Ragdoll - sin utilizar el operador OR.

Solución:

SELECT id, name
FROM cat
WHERE breed IN ('Persian', 'Siamese', 'Ragdoll');

Explicación: A veces es necesario filtrar los resultados de una consulta por un conjunto de valores. Esto se puede conseguir especificando muchas condiciones conectadas por operadores OR, como en este caso:

SELECT name
FROM cat
WHERE breed = 'Persian' OR breed = 'Siamese' OR breed = 'Ragdoll';

Pero para simplificar una consulta con muchas enumeraciones, es preferible utilizar el operador lógico IN, que evalúa la pertenencia de un valor a un conjunto. En este caso, el valor sería la raza de la columna y el conjunto sería una lista de valores ('Persian', 'Siamese', 'Ragdoll').

El operador IN facilita la lectura y comprensión de consultas complejas.

Ejercicio 9: Búsqueda de coincidencias parciales

Ejercicio: Obtener todas las filas de la tabla cat correspondiente a los gatos cuyo juguete favorito es una pelota de cualquier color.

Solución:

SELECT *
FROM cat
WHERE fav_toy LIKE '%ball%';

Explicación: Cuando se intenta buscar coincidencias en columnas que contienen descripciones, a menudo no se sabe exactamente cómo están almacenadas las descripciones. A veces es necesario buscar una palabra concreta que puede aparecer en una descripción. En estas situaciones, el operador de comparación = no es útil, ya que sólo devuelve las filas en las que la coincidencia es exacta.

Cuando necesite encontrar coincidencias parciales, PostgreSQL le permite buscar fragmentos de texto dentro de las columnas varchar. El truco consiste en sustituir el operador = por LIKE, añadiendo comodines para representar las partes del texto que no conoce.

En la tabla cat la columna fav_toy almacena "pelota" y su color (por ejemplo, "pelota roja" o "pelota verde"). Con el operador LIKE, puede pedir a PostgreSQL que le devuelva las filas en las que fav_toy contenga la palabra "pelota".

El símbolo % colocado a ambos lados de la palabra "pelota" actúa como comodín, indicando que puede haber cualquier texto alrededor de "pelota". Las filas resultantes son aquellas en las que la palabra "pelota" aparece como parte del texto en la columna fav_toy, independientemente de qué otro texto contenga.

Ejercicio 10: Búsqueda de valores nulos en determinadas columnas

Ejercicio: Obtener todas las filas de la tabla cat correspondiente a los gatos que no tienen juguete favorito.

Solución:

SELECT name
FROM cat
WHERE fav_toy IS NULL;

Explicación: Hay situaciones en las que se necesita obtener las filas de una tabla para las que no hay información en una determinada columna. En otras palabras, es necesario indicar a la base de datos que obtenga sólo las filas en las que una columna determinada tenga un valor NULL. Para ello no se pueden utilizar operadores de comparación; en SQL, cualquier comparación que incluya valores NULL siempre da como resultado el valor lógico False.

La única forma de indicar a la base de datos que obtenga dichas filas es especificar que el valor de la columna sea IS NULL: fav_toy IS NULL.

Recuerde que la palabra NULL en SQL se refiere a un valor desconocido. No es lo mismo que el valor 0 en una columna numérica o una cadena de longitud cero en una columna varchar. Cualquier operación numérica, de fecha o de cadena que involucre un valor NULL también resulta en un valor NULL.

Ejercicio 11: Evitar filas sin datos en determinadas columnas

Ejercicio: Obtenga todas las filas de la tabla cat correspondientes a gatos que tienen un juguete favorito.

Solución:

SELECT name
FROM cat
WHERE fav_toy IS NOT NULL;

Explicación: Sabemos cómo obtener filas en las que una columna tiene un valor NULL. Pero, ¿y si necesitamos lo contrario, es decir, obtener todas las filas con cualquier valor en esa columna? La condición IS NOT NULL hace exactamente lo contrario que IS NULL: devuelve todas las filas que tienen algún dato (cualquier dato) en la columna fav_toy.

Ejercicio 12: Obtención de una Lista de Gatos Ordenados por Edad

Ejercicio: Seleccione el nombre y la edad de la tabla cat asegurándose de que los resultados están ordenados por edad.

Solución:

SELECT name, age
FROM cat
ORDER BY age;

Explicación: Cuando se ejecuta una consulta SELECT en una base de datos SQL, es imposible predecir en qué orden aparecerán los resultados, a menos que se especifique un criterio de ordenación. Si se desea obtener los resultados de una consulta en un orden determinado, es necesario especificar las columnas que determinarán el orden mediante una cláusula ORDER BY.

Ejercicio 13: Ordenación de gatos por raza y edad

Ejercicio: Seleccione la raza, el nombre y la edad de todas las filas de la tabla catobteniendo los resultados ordenados primero por raza y luego por edad.

Solución:

SELECT breed, name, age
FROM cat
ORDER BY breed, age;

Explicación: Puede utilizar la cláusula ORDER BY para indicar una o más columnas como criterios de ordenación. La consulta de este ejercicio ordena los resultados por raza; dentro de cada raza, las filas se ordenan por edad.

Ejercicio 14: Uso de Ordenación Ascendente y Descendente

Ejercicio: Seleccione la raza, nombre y edad de todos los gatos, luego ordene los resultados primero por raza en orden alfabético y luego por edad de mayor a menor.

Solución:

SELECT breed, name, age
FROM cat
ORDER BY breed ASC, age DESC;

Explicación: La cláusula ORDER BY también permite especificar el orden ascendente o descendente para cada una de las columnas de ordenación. La palabra ASC indica orden ascendente (A a Z, 1 a 10); DESC indica orden descendente (Z a A, 10 a 1). Si no se especifica el orden de clasificación, se asume el orden ascendente. Para los datos alfanuméricos, el orden ascendente es el mismo que el orden alfabético.

La consulta de este ejercicio ordena las filas alfabéticamente por raza (en orden ascendente) y luego por edad en orden descendente.

Ejercicio 15: Agrupación y agregación de datos

Ejercicio: Seleccione las razas de gatos de la cat y el número de gatos de cada raza.

Solución:

SELECT breed, COUNT(*)
FROM cat
GROUP BY breed;

Explicación: La cláusula GROUP BY agrupa filas basándose en el valor de una columna (GROUP BY breed); se devuelve una fila por cada valor de grupo (por ejemplo, la tabla cats tendría una fila para Siamés, otra para Ragdoll, etc.)

Para obtener el número de gatos de cada raza, se utiliza la función agregada COUNT(*), que devuelve el número de filas de cada grupo.

Al utilizar la cláusula GROUP BY, es importante tener en cuenta que las columnas de la lista SELECT que no se utilizan en una función agregada también deben aparecer en la lista de columnas de la cláusula GROUP BY.

Si crees que necesitas más práctica para entender completamente la agrupación en SQL, prueba estos 10 ejercicios de práctica GROUP BY.

Ejercicio 16: Obtención de la Edad del Gato más Joven y el más Viejo de cada Raza

Ejercicio: Seleccione una lista de razas de gatos de la tabla cat junto con la edad máxima y mínima de cada raza.

Solución:

SELECT breed, MIN(age), MAX(age)
FROM cat
GROUP BY breed;

Explicación: La agrupación nos permite obtener datos resumidos. Además de obtener el número de elementos de cada grupo (como hicimos en el ejercicio anterior), podemos utilizar funciones para calcular totales, medias y valores máximos/mínimos de cada grupo.

En este ejercicio, se utilizan las funciones MIN() y MAX() para obtener las edades máxima y mínima de cada raza.

Ejercicio 17: Agrupación por Varias Columnas

Ejercicio: Seleccione una lista de las razas de gatos y diferentes coloraciones de la cat tabla, contando el número de gatos de cada combinación de raza y coloración.

Solución:

SELECT 
  breed, 
  coloration, 
  COUNT(*)
FROM cat
GROUP BY breed, coloration;

Explicación: Es posible que desee agrupar los datos por más de una columna, creando una jerarquía de varios criterios de agrupación anidados. Esto se puede hacer detallando todos los campos de agrupación en la cláusula GROUP BY.

El orden en que se escriban estos campos determinará el aspecto de la jerarquía de agrupación. En este ejercicio, obtenemos los datos agrupados por raza y luego por coloración dentro de cada raza. Y la función COUNT(*) muestra cuántos gatos hay en la tabla para cada combinación de raza y coloración.

Ejercicio 18: Establecimiento de Condiciones sobre Datos Agregados

Ejercicio: Obtenga una lista de las razas que están representadas por más de un registro en la tabla cat tabla.

Solución:

SELECT breed, COUNT(*)
FROM cat
GROUP BY breed
HAVING COUNT(*) > 1;

Explicación: Hemos visto que WHERE permite establecer condiciones sobre las filas devueltas por la consulta. Pero puede que necesites filtrar las filas agrupadas estableciendo condiciones sobre los resultados de las funciones agregadas.

Para ello, establezca la condición de que el resultado de la función COUNT(*) debe ser mayor que 1. Pero no puede especificar eso en la cláusula WHERE; se calcula sobre filas individuales antes de que GROUP BY sea procesada por la base de datos. Por lo tanto, debe utilizar la cláusula HAVING, como hicimos en este ejercicio.

Ejercicio 19: Obtención de Datos Relacionados de Tablas Diferentes

Ejercicio: Seleccione el origen de raza de cada gato de la tabla cat obteniéndolo de la tabla breed_origin relacionada. A continuación se muestran los datos de la tabla breed_origin tabla:

breedorigin
RagdollCalifornia
PersianUnknown
RagamuffinCalifornia
Maine CoonMaine
SiameseThailand
AbyssinianSoutheast Asia

Solución:

SELECT cat.name, cat.breed, breed_origin.origin
FROM cat JOIN breed_origin
ON cat.breed = breed_origin.breed;

Explicación: Si necesita una consulta que devuelva el origen de raza de cada uno de los gatos, debe unir la tabla cat con la tabla breed_origin tabla. Para ello, debe especificar ambas tablas en la cláusula FROM - separadas por la palabra JOIN.

La condición de unión se especifica después de los nombres de las tablas y precedida por la palabra ON. Es necesario establecer esta condición para que la base de datos sepa cómo emparejar correctamente las filas. En este caso, la condición es que la columna de raza de cat sea igual a la columna de raza de breed_origin.

Dado que hay más de una tabla en la cláusula FROM, es mejor poner el nombre de la tabla antes del nombre de la columna, separándolos con un punto (por ejemplo, cat.breed). Esto evita ambigüedades tanto para la base de datos como para el lector. No es obligatorio hacer esto para todas las columnas, pero es esencial para las columnas que comparten el mismo nombre en ambas tablas.

En el ejemplo anterior, la columna breed está tanto en cat como en breed_originpor lo que es obligatorio anteponer el nombre de la tabla cada vez que se haga referencia a cualquiera de las dos columnas.

Una vez que comprenda cómo unir tablas en SQL, puede reforzar sus conocimientos completando estos 12 ejercicios prácticos de JOIN.

¿Listo para Ejercicios Avanzados de PostgreEjercicio de SQL?

¿Qué le pareció este conjunto de ejercicios de práctica PostgreSQL para principiantes? Recuerde que puede seguir practicando con los 88 ejercicios del curso interactivo Ejercicios prácticos de SQL en PostgreSQL, que es sólo uno de los 65 cursos prácticos de SQL para principiantes y expertos que puede encontrar en LearnSQL.es.

Si los ejercicios de PostgreSQL sugeridos le resultaron muy fáciles, tal vez esté listo para comenzar a aprender PostgreSQL avanzado. Tenga en cuenta que cualquier esfuerzo que ponga en aprender PostgreSQL habrá sido bien invertido, ya que este dialecto del lenguaje SQL está creciendo rápidamente y le abrirá las puertas a muchas oportunidades de trabajo interesantes. Sigue practicando y aprendiendo, y mantendrás frescas tus habilidades SQL.