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

10 Ejercicios de Práctica SQL para Principiantes con Soluciones

Resuelve estos diez problemas de práctica de SQL y comprueba tus conocimientos de SQL.

Este artículo trata sobre la práctica de SQL. Es la mejor manera de aprender SQL. Te mostramos diez ejercicios de práctica de SQL en los que tendrás que aplicar conceptos esenciales de SQL. Si eres un novato en SQL, no te preocupes: estos ejemplos son para principiantes.

Utilízalos como práctica o como forma de aprender nuevos conceptos SQL. Para más información teórica y (¡aún más!) ejercicios, está nuestro curso interactivo SQL para principiantes interactivo. En él aprenderás a seleccionar datos de una o varias tablas, a agregar y agrupar datos, a escribir subconsultas y a utilizar operaciones de conjunto. El curso consta de 129 ejercicios interactivos, por lo que no faltan oportunidades para practicar SQL, sobre todo si le añades algunas de las 12 formas de aprender SQL en línea.

Hablando de práctica, ¡comencemos con nuestros ejercicios!

El conjunto de datos

La pregunta siempre es dónde encontrar datos para practicar SQL. Usaremos nuestro conjunto de datos para todos los ejercicios. Sin embargo, no es necesario que te limites a éste: puedes encontrar otros conjuntos de datos gratuitos en línea para practicar SQL.

Nuestro conjunto de datos consta de dos tablas.

La tabla distribution_companies enumera las empresas distribuidoras de películas con las siguientes columnas:

  • id - ID de la empresa distribuidora. Es la clave principal de la tabla.
  • company_name - El nombre de la empresa distribuidora.

La tabla se muestra a continuación.

idcompany_name
1Columbia Pictures
2Paramount Pictures
3Warner Bros. Pictures
4United Artists
5Universal Pictures
6New Line Cinema
7Miramax Films
8Produzioni Europee Associate
9Buena Vista
10StudioCanal

La segunda tabla es movies. Estas son las columnas:

  • id - El ID de la película. Esta es la clave principal de la tabla.
  • movie_title - El título de la película.
  • imdb_rating - La calificación de la película en IMDb.
  • year_released - El año de estreno de la película.
  • budget - El presupuesto de la película en millones de dólares.
  • box_office - Los ingresos de la película en millones de dólares.
  • distribution_company_id - El ID de la empresa distribuidora, con referencia a la tabla distribution_companies (clave externa).
  • language - El idioma o idiomas hablados en la película.

La tabla se muestra a continuación.

idmovie_titleimdb_ratingyear_releasedbudgetbox_officedistribution_company_idlanguage
1The Shawshank Redemption9.2199425.0073.301English
2The Godfather9.219727.20291.002English
3The Dark Knight9.02008185.001,006.003English
4The Godfather Part II9.0197413.0093.002English, Sicilian
512 Angry Men9.019570.342.004English
6Schindler's List8.9199322.00322.205English, German, Yiddish
7The Lord of the Rings: The Return of the King8.9200394.001,146.006English
8Pulp Fiction8.819948.50213.907English
9The Lord of the Rings: The Fellowship of the Ring8.8200193.00898.206English
10The Good, the Bad and the Ugly8.819661.2038.908English, Italian, Spanish

Ejercicio 1: Seleccionar todas las columnas de una tabla

Ejercicio: Seleccionar todos los datos de la tabla distribution_companies.

Solución:

SELECT *
FROM distribution_companies;

Explicación de la solución: Seleccione los datos utilizando la sentencia SELECT. Para seleccionar todas las columnas, utilice un asterisco (*). La tabla de la que se seleccionan los datos se especifica en la cláusula FROM.

Salida de la solución:

idcompany_name
1Columbia Pictures
2Paramount Pictures
3Warner Bros. Pictures
4United Artists
5Universal Pictures
6New Line Cinema
7Miramax Films
8Produzioni Europee Associate
9Buena Vista
10StudioCanal

Ejercicio 2: Selección de algunas columnas de una tabla

Ejercicio: Para cada película, seleccione el título, la calificación IMDb y el año de estreno.

Solución:

SELECT
  movie_title,
  imdb_rating,
  year_released
FROM movies;

Explicación de la solución: Enumere todas las columnas necesarias (movie_title, imdb_rating, y year_released) en la sentencia SELECT, separadas por una coma. Haga referencia a la tabla movies en la cláusula FROM.

Salida de la solución:

movie_titleimdb_ratingyear_released
The Shawshank Redemption9.21994
The Godfather9.21972
The Dark Knight9.02008
The Godfather Part II9.01974
12 Angry Men9.01957
Schindler's List8.91993
The Lord of the Rings: The Return of the King8.92003
Pulp Fiction8.81994
The Lord of the Rings: The Fellowship of the Ring8.82001
The Good, the Bad and the Ugly8.81966

Ejercicio 3: Selección de unas pocas columnas y filtrado de datos numéricos en WHERE

Ejercicio: Seleccione las columnas movie_title y box_office de la tabla movies. Mostrar sólo las películas con ganancias superiores a 300 millones de dólares.

Solución:

SELECT
  movie_title,
  box_office
FROM movies
WHERE box_office > 300;

Explicación de la solución: Escriba las columnas en SELECT y haga referencia a la tabla en FROM. Utilice una cláusula WHERE para filtrar los datos - escriba la columna box_office y utilice el operador "mayor que" (>) para mostrar sólo los valores superiores a 300 millones de dólares.

Salida de la solución:

movie_titlebox_office
The Dark Knight1,006.00
Schindler's List322.20
The Lord of the Rings: The Return of the King1,146.00
The Lord of the Rings: The Fellowship of the Ring898.20

Ejercicio 4: Selección de unas pocas columnas y filtrado de datos de texto en WHERE

Ejercicio: Seleccione las columnas movie_title, imdb_rating, y year_released de la tabla movies. Mostrar las películas que tienen la palabra 'El Padrino' en el título.

Solución:

SELECT
  movie_title,
  imdb_rating,
  year_released
FROM movies
WHERE movie_title LIKE '%Godfather%';

Explicación de la solución: Enumere las columnas en SELECT y haga referencia a la tabla en la cláusula FROM. Utilice una cláusula WHERE para filtrar los datos. Después de escribir el nombre de la columna, utiliza el operador lógico LIKE para buscar 'Padrino' en el título de la película, escrito entre comillas simples. Para buscar la palabra en cualquier lugar del título de la película, coloque el carácter comodín (%) antes y después de la palabra.

Salida de la solución:

movie_titleimdb_ratingyear_released
The Godfather9.21972
The Godfather Part II9.01974

Ejercicio 5: Selección de unas pocas columnas y filtrado de datos mediante dos condiciones en WHERE

Ejercicio: Seleccione las columnas movie_title, imdb_rating, y year_released de la tabla movies. Mostrar las películas que se estrenaron antes de 2001 y tuvieron una calificación superior a 9.

Solución:

SELECT
  movie_title,
  imdb_rating,
  year_released
FROM movies
WHERE year_released < 2001 AND imdb_rating > 9;

Explicación de la solución: Listar las columnas en SELECT y referenciar la tabla en FROM. Establezca como primera condición que el año de estreno sea anterior a 2001 utilizando el operador "menor que" (<). Para añadir otra condición, utilice el operador lógico AND. Usa la misma lógica que la primera condición, esta vez usando el operador 'mayor que' con la columna imdb_rating.

Salida de la solución:

movie_titleimdb_ratingyear_released
The Shawshank Redemption9.21994
The Godfather9.21972

Ejercicio 6: Filtrado de datos mediante WHERE y ordenación de la salida

Ejercicio: Seleccione las columnas movie_title, imdb_rating, y year_released de la tabla movies. Muestra las películas estrenadas después de 1991. Ordene la salida por el año de estreno en orden ascendente.

Solución:

SELECT
  movie_title,
  imdb_rating,
  year_released
FROM movies
WHERE year_released > 1991
ORDER BY year_released ASC;

Explicación de la solución: Enumerar las columnas en SELECT y referenciar la tabla en FROM. Filtre los datos con WHERE aplicando el operador "mayor que" a la columna year_released. Para ordenar los datos, utilice una cláusula ORDER BY y escriba el nombre de la columna por la que desea ordenar. El tipo de ordenación se especifica escribiendo ASC (ascendente) o DESC (descendente). Si se omite el tipo, la salida se ordena por defecto en orden ascendente.

Salida de la solución:

movie_titleimdb_ratingyear_released
Schindler's List8.91993
The Shawshank Redemption9.21994
Pulp Fiction8.81994
The Lord of the Rings: The Fellowship of the Ring8.82001
The Lord of the Rings: The Return of the King8.92003
The Dark Knight9.02008

Ejercicio 7: Agrupación de datos por una columna

Ejercicio: Mostrar el recuento de películas por cada categoría de idioma.

Solución:

SELECT
  language,
  COUNT(*) AS number_of_movies
FROM movies
GROUP BY language;

Explicación de la solución: Seleccione la columna language de la tabla movies. Para contar el número de películas, utilice la función agregada COUNT(). Utilice el asterisco (*) para contar las filas, lo que equivale al recuento de películas. Para dar un nombre a esta columna, utilice la palabra clave AS seguida del nombre deseado. Para mostrar el recuento por idioma, necesita agrupar los datos por él, así que escriba la columna language en la cláusula GROUP BY.

Salida de la solución:

languagenumber_of_movies
English7
English, German, Yiddish1
English, Sicilian1
English, Italian, Spanish1

Ejercicio 8: Agrupación de Datos por Varias Columnas

Ejercicio: Mostrar el conteo de películas por año de estreno e idioma. Ordenar los resultados por la fecha de estreno en orden ascendente.

Solución:

SELECT
  year_released,
  language,
  COUNT(*) AS number_of_movies
FROM movies
GROUP BY year_released, language
ORDER BY year_released ASC;

Explicación de la solución: Enumerar las columnas year_released y language de la tabla movies en SELECT. Utilice COUNT(*) para contar el número de películas y asigne un nombre a esta columna utilizando la palabra clave AS. Especifique las columnas por las que desea agrupar en la cláusula GROUP BY. Separe cada nombre de columna con una coma. Ordene la salida utilizando ORDER BY con la columna year_released y la palabra clave ASC.

Salida de la solución:

year_releasedlanguagenumber_of_movies
1957English1
1966English, Italian, Spanish1
1972English1
1974English, Sicilian1
1993English, German, Yiddish1
1994English2
2001English1
2003English1
2008English1

Ejercicio 9: Filtrado de Datos Después de Agrupar

Ejercicio: Mostrar los idiomas hablados y el presupuesto medio de las películas por categoría de idioma. Mostrar sólo los idiomas con un presupuesto medio superior a 50 millones de dólares.

Solución:

SELECT
  language,
  AVG(budget) AS movie_budget
FROM movies
GROUP BY language
HAVING AVG(budget) > 50;

Explicación de la solución: Seleccione la columna language de la tabla movies. Para calcular el presupuesto medio, utilice la función de agregado AVG() con la columna presupuesto entre paréntesis. Nombre la columna en la salida utilizando la palabra clave AS. Agrupe los datos por clasificación utilizando GROUP BY. Para filtrar los datos después de agruparlos, utilice una cláusula HAVING. En ella, utilice la misma construcción AVG() que en SELECT y establezca que los valores sean superiores a 50 utilizando el operador "mayor que".

Salida de la solución:

languagemovie_budget
English59.01

Ejercicio 10: Selección de Columnas de Dos Tablas

Ejercicio: Mostrar títulos de películas de la tabla movies, cada uno con el nombre de su distribuidora.

Solución:

SELECT
  movie_title,
  company_name
FROM distribution_companies dc
JOIN movies m
ON dc.id = m.distribution_company_id;

Explicación de la solución: Enumerar las columnas movie_title y company_name en SELECT. En la cláusula FROM, hacer referencia a la tabla distribution_companies. Dele un alias dc para acortar su nombre y poder utilizarlo más adelante. La palabra clave AS se omite aquí; puede utilizarla si lo desea. Para acceder a los datos de la otra tabla, utilice JOIN (también puede escribirse como INNER JOIN) y escriba el nombre de la tabla a continuación. Asigne también un alias a esta tabla. La unión utilizada aquí es una unión de tipo interno; sólo devuelve las filas que cumplen la condición de unión especificada en la cláusula ON. Las tablas se unen cuando la columna id de la tabla distribution_companies es igual a la columna distribution_company_id de la tabla movies. Para especificar qué columna procede de qué tabla, utilice el alias correspondiente de cada tabla.

Salida de la solución:

movie_titlecompany_name
The Shawshank RedemptionColumbia Pictures
The Godfather Part IIParamount Pictures
The GodfatherParamount Pictures
The Dark KnightWarner Bros. Pictures
12 Angry MenUnited Artists
Schindler's ListUniversal Pictures
The Lord of the Rings: The Fellowship of the RingNew Line Cinema
The Lord of the Rings: The Return of the KingNew Line Cinema
Pulp FictionMiramax Films
The Good, the Bad and the UglyProduzioni Europee Associate

¡Ha sido divertido! Ahora, ¡es hora de hacer Ejercicio de SQL por tu cuenta!

Estos diez ejercicios de práctica de SQL le dan una idea de cómo es la práctica de SQL. Ya sea que estés en el nivel principiante, intermedio o avanzado, es lo mismo. Lo que cambia es la complejidad de los problemas que resuelves y del código que escribes.

Busca más retos en el SQL para principiantes curso y en la pista mensual Ejercicio de SQL. Ambos son excelentes para tu práctica de SQL online. Esto es cierto, especialmente si no tienes la oportunidad de utilizar SQL a diario en tu trabajo.

Por lo tanto, ¡no intentes probar cuánto tardas en olvidar lo que antes sabías de SQL! Aprovecha cada oportunidad para resolver tantos problemas de práctica de SQL como sea posible.