Envía las consultas a la base de datos
1. Encuentra a todos los investigadores que nacieron después de 1980 y son arqueólogos.
Resultado esperado: Una lista de exploradores con sus ID, nombres y fechas de nacimiento.
Solución
Para obtener la lista de todos los investigadores nacidos después de 1980 que son arqueólogos, selecciona las columnas id, full_name y date_of_birth de la tabla Explorers usando la cláusula WHERE:
SELECT id, full_name, date_of_birth
FROM Explorers
WHERE date_of_birth > '1980-12-31' AND speciality = 'Archaeologist';
2. Calcula cuántos artefactos hay en cada estado de conservación (Excellent, Good, Damaged, Fragmented).
Resultado esperado: Una lista de valores de condition_id con el número de artefactos de cada estado. Cada fila representará un estado único y mostrará cuántos artefactos tienen asignado ese estado.
* Para mostrar los nombres de los estados se necesita un JOIN, que veremos más adelante.
Solución
Esta consulta SQL usa la cláusula GROUP BY para agrupar las filas de la tabla Artifacts según su condition_id. La función de agregación COUNT(id) calcula el número de artefactos (contando sus ID) dentro de cada grupo.
SELECT condition_id, COUNT(id) AS num_artifacts
FROM Artifacts
GROUP BY condition_id;
3. Obtén una lista de todos los eventos, ordenados del más reciente al más antiguo y, después, por tipo de evento en orden alfabético.
Resultado esperado: Todos los eventos de la tabla Events, ordenados principalmente por la columna date (los más recientes primero). Si varios eventos tienen la misma fecha, deben ordenarse alfabéticamente por tipo de evento.
Solución
Esta consulta SQL usa la cláusula ORDER BY para ordenar el conjunto de resultados. ORDER BY date DESC ordena los eventos por fecha en orden descendente y coloca los más recientes arriba. El segundo criterio, event_type ASC, ordena los eventos alfabéticamente por tipo cuando las fechas coinciden.
SELECT id, name, date, event_type
FROM Events
ORDER BY date DESC, event_type ASC;
4. Obtén una lista de todos los artefactos encontrados durante una expedición, incluida la información de la expedición correspondiente.
Resultado esperado: Una tabla en la que cada fila contiene el nombre del artefacto, el nombre de la expedición y la fecha de inicio de la expedición.
Solución
Debes hacer un JOIN entre las tablas Artifacts y Expeditions mediante el campo expedition_id.
SELECT a.name AS artifact_name, e.name AS expedition_name, e.start_date AS expedition_start_date
FROM Artifacts a
JOIN Expeditions e ON a.expedition_id = e.id;
5. Obtén una lista de todos los artefactos con su estado actual (por ejemplo, Excellent, Good, etc.). Muestra el nombre del artefacto y su estado.
Resultado esperado: Una tabla en la que cada fila contiene el nombre del artefacto y su estado.
Solución
Debes hacer un JOIN entre las tablas Artifacts y Conditions por los campos condition_id e id.
SELECT a.name, c.name AS condition
FROM Artifacts a
JOIN Conditions c ON a.condition_id = c.id;
6. Muestra una lista de todos los eventos que tienen una expedición asociada.
Resultado esperado: Una tabla con el nombre del evento y el nombre de la expedición. Incluye solo los eventos en los que el campo expedition_id no es NULL.
Solución
Haz un JOIN entre Events y Expeditions mediante expedition_id e id, y filtra por expedition_id IS NOT NULL.
SELECT ev.name AS event_name, exp.name AS expedition_name
FROM Events ev
JOIN Expeditions exp ON ev.expedition_id = exp.id
WHERE ev.expedition_id IS NOT NULL;
7. Obtén una lista de todos los eventos asociados tanto a una región como a una expedición.
Resultado esperado: Para cada evento que hace referencia tanto a una región como a una expedición, la lista debe incluir información sobre el evento, la región y la expedición asociada.
Solución
Debes unir la tabla Events con la tabla Regions por region_id, y con la tabla Expeditions por expedition_id.
SELECT ev.name AS event_name, r.name AS region_name, exp.name AS expedition_name
FROM Events ev
JOIN Regions r ON ev.region_id = r.id
JOIN Expeditions exp ON ev.expedition_id = exp.id;
8. Obtén una lista de todos los artefactos que tienen indicados el explorador que los encontró y su estado actual.
Resultado esperado: Para cada artefacto con un explorador indicado, la lista debe incluir el nombre del artefacto, el nombre del explorador y el estado actual del artefacto.
Solución
Une la tabla Artifacts con la tabla Explorers por founded_by_id, y con la tabla Conditions por condition_id.
SELECT a.name AS artifact_name, ex.full_name AS explorer_name, c.name AS condition
FROM Artifacts a
JOIN Explorers ex ON a.founded_by_id = ex.id
JOIN Conditions c ON a.condition_id = c.id;
9. Obtén una lista de todos los roles de expedición, incluido el nombre del explorador y el nombre de la expedición en la que participó.
Resultado esperado: Para cada rol de expedición, la lista debe mostrar el rol, el nombre del explorador y el nombre de la expedición.
Solución
Une la tabla ExpeditionRoles con la tabla Explorers por explorer_id, y con la tabla Expeditions por expedition_id.
SELECT er.role, ex.full_name AS explorer_name, exp.name AS expedition_name
FROM ExpeditionRoles er
JOIN Explorers ex ON er.explorer_id = ex.id
JOIN Expeditions exp ON er.expedition_id = exp.id;
10. Obtén una lista de todos los artefactos encontrados por exploradores durante expediciones, incluido el nombre del explorador, el nombre de la expedición y el país de la región de la expedición.
Resultado esperado: Para cada artefacto, muestra su nombre, el nombre del explorador que lo encontró, el nombre de la expedición y el país de la región de la expedición.
Solución
Debes unir la tabla Artifacts con Explorers (por founded_by_id), con Expeditions (por expedition_id), y Expeditions con Regions (por region_id).
SELECT a.name AS artifact_name, ex.full_name AS explorer_name, e.name AS expedition_name, r.country AS region_country
FROM Artifacts a
JOIN Explorers ex ON a.founded_by_id = ex.id
JOIN Expeditions e ON a.expedition_id = e.id
JOIN Regions r ON e.region_id = r.id;
11. Obtén una lista de todos los eventos relacionados con expediciones, con el nombre del evento, el nombre de la expedición, el nombre del jefe de la expedición y el país de la región donde tuvo lugar la expedición.
Resultado esperado: Para cada evento, muestra su nombre, el nombre de la expedición, el nombre del jefe de la expedición y el país de la región de la expedición.
Solución
Une la tabla Events con Expeditions (por expedition_id), Expeditions con Explorers (por leader_id) y Expeditions con Regions (por region_id).
SELECT ev.name AS event_name, exp.name AS expedition_name, ex.full_name AS leader_name, r.country AS region_country
FROM Events ev
JOIN Expeditions exp ON ev.expedition_id = exp.id
JOIN Explorers ex ON exp.leader_id = ex.id
JOIN Regions r ON exp.region_id = r.id;
12. Obtén una lista de todos los participantes de las expediciones, con su rol, el nombre del explorador, el nombre de la expedición y el país de la región de la expedición.
Resultado esperado: Para cada participante, muestra su rol, el nombre del explorador, el nombre de la expedición y el país de la región de la expedición.
Solución
Une la tabla ExpeditionRoles con Explorers (por explorer_id), ExpeditionRoles con Expeditions (por expedition_id) y Expeditions con Regions (por region_id).
SELECT er.role, ex.full_name AS explorer_name, exp.name AS expedition_name, r.country AS region_country
FROM ExpeditionRoles er
JOIN Explorers ex ON er.explorer_id = ex.id
JOIN Expeditions exp ON er.expedition_id = exp.id
JOIN Regions r ON exp.region_id = r.id;
13. Añade un nuevo explorador a la base de datos rellenando todas las columnas de la tabla explorers.
Resultado esperado: En la tabla explorers debe aparecer una nueva fila con los datos completos del explorador y todas las columnas rellenadas (id, full_name, date_of_birth, country_of_born, speciality).
Solución
Debes usar una sentencia INSERT INTO, enumerando todas las columnas de la tabla explorers e indicando un valor para cada una de ellas.
INSERT INTO explorers (id, full_name, date_of_birth, country_of_born, speciality)
VALUES (138, 'Slobodan Androvic', '1988-10-08', 'Montenegro', 'Botanist');
Puedes comprobar la fila recién creada ejecutando la siguiente consulta:
SELECT * FROM explorers WHERE id = 138;
14. Actualiza los datos del explorador creado: cambia su fecha de nacimiento, su país de nacimiento y su especialidad por los nuevos valores que elijas.
Resultado esperado: En la tabla explorers, la fila del explorador creado debe tener actualizados los valores de las columnas date_of_birth, country_of_born y speciality con los nuevos valores que indiques.
Solución
Debes usar la sentencia UPDATE para modificar las columnas indicadas en la fila con el id que asignaste a tu nuevo explorador.
UPDATE explorers
SET date_of_birth = '1991-05-22', country_of_born = 'Serbia', speciality = 'Сhemist'
WHERE id = 138;
Puedes comprobar la fila actualizada ejecutando la siguiente consulta:
SELECT * FROM explorers WHERE id = 138;
15. Elimina de la tabla explorers el explorador que has creado.
Resultado esperado: La fila con el id que asignaste se eliminará de la tabla explorers. Tras ejecutar la consulta, el explorador con ese id ya no aparecerá en la tabla.
Solución
Usa la sentencia DELETE con una cláusula WHERE para eliminar solo la fila indicada.
DELETE FROM explorers
WHERE id = 138;
Puedes comprobar la fila eliminada ejecutando la siguiente consulta:
SELECT * FROM explorers WHERE id = 138;