Corrigé du TP SQL 2 Énoncé -Rappel Requête 1 : Lister les n° d'enclos, les noms des animaux, pour les animaux arrivés au zoo avant le 1er janvier 2005. Requête 2 : Lister les noms des animaux carnivores et leur espèce.
Corrigé du TP SQL 2 Requête 1 Lister les n° d'enclos, les noms des animaux, pour les animaux arrivés au zoo avant le 1er janvier 2005. Méthodologie : 1- repérer les champs et les tables concernées 3 champs sont demandés dans l'énoncé : les champs nom et date_arrivee de la table animal Le champ id de la table enclos 1ère déduction => Plusieurs tables Question induite : Ces tables ont-elles chacune un champ permettant de les relier entre elles ?
Corrigé du TP SQL 2 Requête 1 Lister les n° d'enclos, les noms des animaux, pour les animaux arrivés au zoo avant le 1er janvier 2005. Méthodologie : 2- Trouver le moyen de créer une jointure entre les tables Nous nous apercevons qu'aucun champ commun aux tables animal et enclos ne permet de réaliser une jointure directe entre ces deux tables, en revanche, la table occupe permet ce lien et fournit elle aussi le numéro d'enclos. En conséquence, nous remplaçons la table enclos par la table occupe, et nous pourrons faire la jointure sur les champs id/id_animal. Modification : Les champs nom et date_arrivee de la table animal Le champ id_enclos de la table occupe
Corrigé du TP SQL 2 Requête 1 Lister les n° d'enclos, les noms des animaux, pour les animaux arrivés au zoo avant le 1er janvier 2005. Méthodologie : 3- Écriture de la clause FROM et de la jointure (clause WHERE) SELECT FROM animal A, occupe O WHERE A.id = O.id_animal
Corrigé du TP SQL 2 Requête 1 Lister les n° d'enclos, les noms des animaux, pour les animaux arrivés au zoo avant le 1er janvier 2005. Méthodologie : 4- Une fois la clause FROM écrite et les tables renommées, nous pouvons écrire le SELECT SELECT O.id_enclos, A.nom FROM animal A, occupe O WHERE A.id = O.id_animal NB : le champ date_arrivee n'est pas demandé en affichage.
Corrigé du TP SQL 2 Requête 1 Lister les n° d'enclos, les noms des animaux, pour les animaux arrivés au zoo avant le 1er janvier 2005. Méthodologie : 5- Reste la condition de date d'arrivée => filtre à ajouter dans la clause WHERE Filtrer sur les dates d'arrivée strictement inférieures au 1er janvier 2005. En SQL : SELECT O.id_enclos, A.nom FROM animal A, occupe O WHERE A.id = O.id_animal AND A.date_arrivee < '2005-01-01' SELECT O.id_enclos, A.nom FROM animal A, occupe O WHERE A.id = O.id_animal AND A.date_arrivee < '2005-01-01'
Corrigé du TP SQL 2 Requête 1 Méthodologie : 6- Vérification utile Lister les n° d'enclos, les noms des animaux, pour les animaux arrivés au zoo avant le 1er janvier 2005. Méthodologie : 6- Vérification utile Ajouter le champ date_arrivée dans le SELECT afin de vérifier si les valeurs affichées sont cohérentes avec l'énoncé. Soumettre.
Corrigé du TP SQL 2 Requête 1 Méthodologie : 6- Vérification utile Lister les n° d'enclos, les noms des animaux, pour les animaux arrivés au zoo avant le 1er janvier 2005. Méthodologie : 6- Vérification utile Ajouter le champ date_arrivée dans le SELECT afin de vérifier si les valeurs affichées sont cohérentes avec l'énoncé. Soumettre. Nous nous apercevons que le champ date_arrivee contient des valeurs non renseignée (≈ NULL) que nous devons prendre en compte => des animaux « qui ne sont pas arrivés ».
Corrigé du TP SQL 2 Requête 1 Méthodologie : 7- Résultat final Lister les n° d'enclos, les noms des animaux, pour les animaux arrivés au zoo avant le 1er janvier 2005. Méthodologie : 7- Résultat final SELECT O.id_enclos, A.nom FROM animal A, occupe O WHERE A.id = O.id_animal AND A.date_arrivee < '2005-01-01' AND A.date_arrivee > '0000-00-00'
Corrigé du TP SQL 2 Requête 1 Lister les n° d'enclos, les noms des animaux, pour les animaux arrivés au zoo avant le 1er janvier 2005. Méthodologie : 7- Résultat final (variante) SELECT O.id_enclos, A.nom FROM animal A, occupe O WHERE A.id = O.id_animal AND A.date_arrivee BETWEEN '0000-00-01' AND '2004-12-31' NB : l'opérateur BETWEEN encadre de manière relative. Équivaut à : >= ET <=
Corrigé du TP SQL 2 Requête 1 Remarque : Il est bien entendu possible, pour gagner du temps, d'inclure les champs relatifs à la clause WHERE (filtres) aussi dans le SELECT dès le départ. Ne pas oublier de les enlever lors de la finalisation de la requête.
Corrigé du TP SQL 2 Requête 2 Résultat final Lister les noms des animaux carnivores et leur espèce. Résultat final SELECT DISTINCT A.nom, A.espece FROM animal A, mange M WHERE A.espece = M.espece AND (M.aliment = 'Viande' OR M.aliment = 'Poisson')
Corrigé du TP SQL 2 Requête 2 Remarque : Le filtre simple sur l'aliment 'Viande' est accepté. Notez la nécessité des parenthèses encadrant la condition OR. Le mot clef DISTINCT n'était pas demandé dans l'énoncé. Comment justifier ce choix ? À vous de jouer : reprenez la méthodologie exposée pour la requête 1 et appliquez-là à cette deuxième requête jusqu'à obtenir le bon résultat. N'hésitez pas à écrire votre cheminement.