FR
◀ Retour à la description de la tâche

Envoyez les requêtes à la base de données

1. Trouvez tous les chercheurs nés après 1980 qui sont archéologues.

Résultat attendu : une liste d’explorateurs avec leur ID, leur nom et leur date de naissance.

💡Solution

Pour obtenir la liste de tous les chercheurs nés après 1980 qui sont archéologues, sélectionnez les colonnes id, full_name et date_of_birth de la table Explorers à l’aide de la clause WHERE :

SELECT id, full_name, date_of_birth
FROM Explorers
WHERE date_of_birth > '1980-12-31' AND speciality = 'Archaeologist';

2. Calculez combien d’artefacts se trouvent dans chaque état (Excellent, Good, Damaged, Fragmented).

Résultat attendu : une liste de valeurs condition_id avec le nombre d’artefacts pour chaque état. Chaque ligne représente un état unique et indique combien d’artefacts lui sont associés.
* Pour afficher les noms des états, une jointure (JOIN) est nécessaire ; elle sera abordée plus loin.

💡Solution

Cette requête SQL utilise la clause GROUP BY pour regrouper les lignes de la table Artifacts selon leur condition_id. La fonction d’agrégation COUNT(id) calcule le nombre d’artefacts (en comptant leurs ID) dans chaque groupe.

SELECT condition_id, COUNT(id) AS num_artifacts
FROM Artifacts
GROUP BY condition_id;

3. Récupérez la liste de tous les événements, triés du plus récent au plus ancien, puis par type d’événement dans l’ordre alphabétique.

Résultat attendu : tous les événements de la table Events, triés d’abord par la colonne date (les plus récents en premier). Si plusieurs événements ont la même date, ils doivent être triés par type d’événement dans l’ordre alphabétique.

💡Solution

Cette requête SQL utilise la clause ORDER BY pour ordonner le résultat. ORDER BY date DESC trie les événements par date dans l’ordre décroissant et place les plus récents en haut. Le second critère, event_type ASC, trie les événements par type dans l’ordre alphabétique lorsque les dates sont identiques.

SELECT id, name, date, event_type
FROM Events
ORDER BY date DESC, event_type ASC;

4. Récupérez la liste de tous les artefacts trouvés lors d’une expédition, avec les informations de l’expédition correspondante.

Résultat attendu : un tableau dont chaque ligne contient le nom de l’artefact, le nom de l’expédition et la date de début de l’expédition.

💡Solution

Vous devez effectuer une jointure (JOIN) entre les tables Artifacts et Expeditions via le champ 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. Obtenez la liste de tous les artefacts avec leur état actuel (par exemple Excellent, Good, etc.). Affichez le nom de l’artefact et son état.

Résultat attendu : un tableau dont chaque ligne contient le nom de l’artefact et son état.

💡Solution

Vous devez effectuer une jointure (JOIN) entre les tables Artifacts et Conditions sur les champs condition_id et id.

SELECT a.name, c.name AS condition
FROM Artifacts a
JOIN Conditions c ON a.condition_id = c.id;

6. Affichez la liste de tous les événements associés à une expédition.

Résultat attendu : un tableau avec le nom de l’événement et le nom de l’expédition. N’incluez que les événements dont le champ expedition_id n’est pas NULL.

💡Solution

Effectuez une jointure (JOIN) entre Events et Expeditions via expedition_id et id, et filtrez avec 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. Récupérez la liste de tous les événements associés à la fois à une région et à une expédition.

Résultat attendu : pour chaque événement qui fait référence à la fois à une région et à une expédition, la liste doit contenir des informations sur l’événement, la région et l’expédition associée.

💡Solution

Vous devez joindre la table Events à la table Regions sur region_id, et à la table Expeditions sur 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. Récupérez la liste de tous les artefacts pour lesquels l’explorateur qui les a trouvés et l’état actuel de l’artefact sont renseignés.

Résultat attendu : pour chaque artefact dont l’explorateur est renseigné, la liste doit contenir le nom de l’artefact, le nom de l’explorateur et l’état actuel de l’artefact.

💡Solution

Joignez la table Artifacts à la table Explorers sur founded_by_id, et à la table Conditions sur 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. Récupérez la liste de tous les rôles d’expédition, avec le nom de l’explorateur et le nom de l’expédition à laquelle il a participé.

Résultat attendu : pour chaque rôle d’expédition, la liste doit indiquer le rôle, le nom de l’explorateur et le nom de l’expédition.

💡Solution

Joignez la table ExpeditionRoles à la table Explorers sur explorer_id, et à la table Expeditions sur 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. Récupérez la liste de tous les artefacts trouvés par des explorateurs lors d’expéditions, avec le nom de l’explorateur, le nom de l’expédition et le pays de la région de l’expédition.

Résultat attendu : pour chaque artefact, affichez son nom, le nom de l’explorateur qui l’a trouvé, le nom de l’expédition et le pays de la région de l’expédition.

💡Solution

Vous devez joindre la table Artifacts à Explorers (sur founded_by_id), à Expeditions (sur expedition_id), puis Expeditions à Regions (sur 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. Récupérez la liste de tous les événements liés à des expéditions, avec le nom de l’événement, le nom de l’expédition, le nom du chef d’expédition et le pays de la région où l’expédition a eu lieu.

Résultat attendu : pour chaque événement, affichez son nom, le nom de l’expédition, le nom du chef d’expédition et le pays de la région de l’expédition.

💡Solution

Joignez la table Events à Expeditions (sur expedition_id), Expeditions à Explorers (sur leader_id) et Expeditions à Regions (sur 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. Récupérez la liste de tous les participants aux expéditions, avec leur rôle, le nom de l’explorateur, le nom de l’expédition et le pays de la région de l’expédition.

Résultat attendu : pour chaque participant, affichez son rôle, le nom de l’explorateur, le nom de l’expédition et le pays de la région de l’expédition.

💡Solution

Joignez la table ExpeditionRoles à Explorers (sur explorer_id), ExpeditionRoles à Expeditions (sur expedition_id) et Expeditions à Regions (sur 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. Ajoutez un nouvel explorateur à la base de données en remplissant toutes les colonnes de la table explorers.

Résultat attendu : une nouvelle ligne contenant les données complètes de l’explorateur doit apparaître dans la table explorers, avec toutes les colonnes remplies (id, full_name, date_of_birth, country_of_born, speciality).

💡Solution

Vous devez utiliser une instruction INSERT INTO en listant toutes les colonnes de la table explorers et en fournissant une valeur pour chacune d’elles.

INSERT INTO explorers (id, full_name, date_of_birth, country_of_born, speciality)
VALUES (138, 'Slobodan Androvic', '1988-10-08', 'Montenegro', 'Botanist');

Vous pouvez vérifier la ligne créée en exécutant la requête suivante :

SELECT * FROM explorers WHERE id = 138;

14. Modifiez les données de l’explorateur créé : changez sa date de naissance, son pays de naissance et sa spécialité en leur attribuant de nouvelles valeurs de votre choix.

Résultat attendu : dans la table explorers, la ligne de l’explorateur créé doit contenir les valeurs mises à jour dans les colonnes date_of_birth, country_of_born et speciality, conformément aux nouvelles valeurs que vous avez indiquées.

💡Solution

Utilisez l’instruction UPDATE pour modifier les colonnes indiquées dans la ligne portant l’id que vous avez attribué à votre nouvel explorateur.

UPDATE explorers
SET date_of_birth = '1991-05-22', country_of_born = 'Serbia', speciality = 'Сhemist'
WHERE id = 138;

Vous pouvez vérifier la ligne mise à jour en exécutant la requête suivante :

SELECT * FROM explorers WHERE id = 138;

15. Supprimez de la table explorers l’explorateur que vous avez créé.

Résultat attendu : la ligne portant l’id que vous avez défini sera supprimée de la table explorers. Après l’exécution de la requête, l’explorateur avec cet id n’apparaîtra plus dans la table.

💡Solution

Utilisez l’instruction DELETE avec une clause WHERE pour supprimer uniquement la ligne indiquée.

DELETE FROM explorers
WHERE id = 138;

Vous pouvez vérifier la suppression en exécutant la requête suivante :

SELECT * FROM explorers WHERE id = 138;