Série d exercices Modèle relationnel, clés et contraintes Exercice 1 : Utilisation d une base de données, la base «ski» 1 Combien y a-t-il de tables dans la base? donner leur nom. 2 Quels sont les attributs décrivant une station? un skieur? 3 Combien y a-t-il de skieurs connus? de compétitions? 4 Donner le classement de la compétition «comp2», en indiquant la station d'origine de chaque coureur. 5 Indiquer l'altitude de la station où se déroulent les compétitions 3 et 4. Exercice 2 : Contraintes d intégrité 1 Que suffit-il de connaître pour retrouver toutes les informations existantes à propos d'une compétition? Même question pour un skieur et une station. Placer les clés primaires de ces trois tables. 2 Dans notre base, un skieur peut-il avoir plusieurs spécialités? 3 Dans la table «classement», combien y a-t-il de lignes correspondant aux compétitions «compl», «comp3» et «comp6»? Est-ce que «refcomp» peut être utilisé comme clé? Quelle est la clé de cette table? 4 Parmi les dépendances fonctionnelles suivantes, indiquer celles qui sont fausses : (a) nomski nomstat (b) nomski, nomstat altstat (c) refcomp nomski (d) refcomp nomstat (e) nomstat refcomp (f) refcomp, nomski rang (g) refcomp, rang nomski 5 Indiquer quelles sont les clés étrangères présentes dans les différentes tables 6 Ecrire le schéma relationnel de la base SKI 7 Peut-on insérer les lignes suivantes dans la base (pour chaque réponse «non», déterminer ce qu'il faut éventuellement faire pour rendre l'insertion possible)? (a) comp3 11/03/2006 chamonix dans «competition» (b) comp10 11/03/2006 chamonix dans «competition» (c) dupont descente meribel dans «skieur» (d) compl0 27/02/2006 aussois dans «competition» (e) comp9 pascal 3 dans «classement» (f) comp9 dupont 4 dans «classement» (i) comp12 10/03/2006 val d isere dans «competition» (j) clark descente garmisch dans «skieur» (k) comp35 pascal 43 dans «classement» 1
8 Peut-on insérer les lignes suivantes dans la base? Quelles contraintes sur les valeurs faut-il ajouter pour éviter les cas absurdes? (a) pralognan -250 france 0 dans «station». (b) pralognan 1250 france NULL dans «station». (c) pralognan 1250 NULL -6000 dans «station» (d) comp12 32/01/2006 wengen dans «compétition». (e) comp6 suchet 0 dans «classement» Algèbre relationnelle Exercice 3 : écrire les requêtes suivantes en utilisant l'algèbre relationnelle 1 Donner la liste des stations connues. 2 Donner la liste des stations où une compétition a été organisée. 3 Donner la liste des spécialistes de descente originaires de val d isère. 4 Donner la liste des stations françaises avec toutes leurs caractéristiques. 5 Donner la liste des stations d'altitude > 1800 mètres. 6 Donner le classement de la compétition «comp2». 7 Donner la liste des compétitions se déroulant à «val d isère». 8 Donner la liste des compétitions où «kostelic» a été classée dans les 3 premières places. 9 Donner la liste des skieurs qui ont été au moins une fois classé au delà de la cinquième place. 10 Donner la liste des compétitions auxquelles a participé «jacquemod». Exercice 4 : écrire les requêtes suivantes en algèbre relationnelle 1 Liste des skieurs spécialistes de slalom, stations d'origine, pays et altitude. 2 Référence, date et pays de toutes les compétitions. 3 Liste des stations dont est originaire au moins un skieur et où a été organisée au moins une compétition. 4 Pays où kostelic a remporté une ou des victoires. 5 Liste des victoires (date, nom de la station et nom de la skieuse) des skieuses françaises 6 Liste des stations françaises qui n'ont pas organisé de compétitions. 7 Skieurs ayant été classés dans les 5 premiers dans une compétition dans leur station d'origine. 8 Skieurs qui n'ont jamais été classés dans les trois premiers. 9 Skieurs qui ont été classés dans les trois premiers à la fois à «compl» et «comp2». 10 Skieurs toujours classés dans les trois premiers. SQL Requêtes de base Connexion à Oracle : Utiliser SQL*Plus ou SQL Tools SQL*Plus : Nom utilisateur : [login windows] Mot de passe : [mdp initial] Chaîne hôte : infodb Changement du mot de passe : Alter user [login] identified by [nouveau mot de passe] Variables d environnement : Set pagesize 40 : formate la sortie par blocs de 40 lignes Set linesize 100 : formate la sortie par ligne de 100 caractères 2
Exercice 5 : écrire en SQL les requêtes suivantes. 1 Donner la liste des stations connues. 2 Donner la liste des stations où une compétition a été organisée. 3 Donner la liste des skieurs dont le nom commence par la lettre s. 4 Donner la liste des stations françaises avec toutes leurs caractéristiques. 5 Donner la liste des stations d'altitude > 1800 mètres. 6 Donner le classement de la compétition «comp2». 7 Donner la liste des compétitions se déroulant à «val d isère». 8 Liste des compétitions où «kostelic» a été classée dans les 3 premières places. 9 Donner l'altitude (arrondie à la centaine de mètres) et la capacité (en centaine de lits) de toutes les stations 10 Donner la liste triée par rang des compétitions auxquelles a participé «jacquemod». Exercice 6 : écrire en SQL les requêtes suivantes (jointures). 1 Calendrier des compétitions (date, station et pays) 2 Palmarès de kostelic (date, lieu et rang) 3 Liste des skieurs spécialistes de slalom (stations d'origine, pays et altitude). 4 Liste de tous les skieurs avec éventuellement leur station et pays d origine 5 Liste des stations françaises ayant organisé au moins une compétition 6 Pays où kostelic a remporté une ou des victoires. 7 Liste des victoires (date, nom de la station et nom de la skieuse) des skieuses françaises 8 Liste des skieuses qui ont la même spécialité que «clark». 9 Skieurs ayant gagné une compétition dans leur pays d'origine. 10 Altitude des stations où ont lieu des épreuves en janvier 2006 Exercice 7 : écrire à l aide d opérateurs ensemblistes les requêtes suivantes. 1 Liste des stations dont est originaire au moins un skieur et où a été organisée au moins une compétition. 2 Liste des stations françaises qui n'ont pas organisé de compétitions. 3 Skieurs qui n'ont jamais été classés dans les trois premiers. 4 Skieurs qui ont toujours été classés dans les 3 premiers 5 Skieurs qui ont été classés dans les trois premiers à la fois à 'comp3' et 'comp4'. 6 Liste des stations dont aucun skieur n est originaire. 7 Liste des compétitions où il y a moins de 10 skieurs classés 8 Liste des compétitions auxquelles n a pas participé «kostelic» 9 Liste des stations où jacquemot est arrivée à la première place ou bien suchet est arrivées dans les 3 premières places Exercice 8 : écrire en SQL les requêtes suivantes (fonctions d agrégation, group by, having) 1 compter le nombre de compétitions organisées à val d isere. 2 donner la capacité moyenne des stations françaises. 3 Donner le classement moyen, mini et maxi de la skieuse kostelic. 4 Pour chaque pays, indiquer le nombre de skieuses qui en sont originaires. Trier la liste par nombre de skieuses décroissant. 5 Liste des pays qui ont accueilli au moins 2 compétitions. 6 Liste des skieurs figurant au moins 2 fois dans les 3 premiers classés d une compétition. 7 Pour chaque pays d origine des skieuses, le meilleur et le moins bon résultat 8 donner le nombre de skieurs pour chaque station d'altitude >=1800. 3
9 donner le nombre de victoires pour chaque skieur. 10 donner le nombre de stations où ont lieu les compétitions Exercice 9 : écrire en SQL les requêtes suivantes (sous-requêtes) 1 Donner le nom du pays qui a remporté le plus de compétitions 2 donner la liste des pays pour lesquels il y a au moins une compétition où plus de 3 skieuses de ce pays ont été classées 3 Liste des stations dont l altitude correspond à l altitude moyenne de l ensemble des stations + ou 200 mètres. 4 Donner la liste des skieuses qui sont toujours derrière «kostelic» dans les classements Exercice 10 : écrire en SQL les requêtes suivantes 1 liste des compétitions ayant eu lieu en 2006. 2 Quel est l intervalle de temps (nombre de jours) entre comp1 et comp9? 3 Liste des compétitions qui ont lieu après celle de «chamonix» 4 Afficher les dates de compétition au format : «mercredi 28 juin 2006» 5 Afficher les heures : minutes de la date système (Select From dual ; 6 Afficher le jour de votre naissance (lundi, ) 7 Afficher les compétitions qui ont lieu un lundi, un mardi. 8 Afficher les noms des skieurs, la longueur en caractères et les 5 premiers caractères des noms 9 Afficher la liste des skieurs et leurs spécialités où l on remplace la souschaîne os par i 10 Créer une vue qui donne pour chaque compétition la date, la station et le jour de la semaine où elle se déroule 11 Utiliser la vue précédente pour afficher les compétitions qui ont lieu en France un dimanche 12 Construire une vue avec toutes les skieuses, leur station d origine et leur meilleure performance 13 En utilisant la vue créée précédemment donner la liste des stations françaises d où est originaire une skieuse classée au moins une fois dans les 5 premières places. Exercice 11 : Approche des tables «système» 1 Donner le nombre exact de tables «système». 2 Donner le nombre de colonnes de la table USER_TABLES 3 Décrire en français les principales colonnes de la table USER_TABLES 4 Rechercher toutes les tables portant le nom SKIEUR auxquelles vous avez accès, donner le nom de leur propriétaire 5 A quoi sert la table ALL_CONSTRAINTS? 6 Lister toutes les contraintes liées à la table BELLALEM.SKIEUR, indiquer de quel type de contraintes il s agit 7 Donner le nom des contraintes qui indiquent que la colonne nomstat de la table skieur est une clé étrangère SQL création et mise à jour Exercice 12 : Création d une base 1 Créer la table skieur(nomski,specialite,nomstat) avec comme contrainte : la specialité doit appartenir à la liste (descente, slalom, superg, slalom geant). Les types seront les mêmes que ceux de la table bellalem.skieur. 4
Attention à penser à détruire le synonyme (drop synonym skieur) s il existe 2 Remplir la table skieur avec les données de la table bellalem.skieur 3 Créer les 3 tables classement, station et competition à partir des tables utilisées dans les exercices précédents 4 Ajouter les contraintes de clé primaire et étrangère aux tables créées précédemment classement, station et competition. Exercice 13 : mise à jour de données. Écrire les requêtes (ou suites de requêtes) correspondant aux mises à jour suivantes: 1 insérer une nouvelle compétition se déroulant à bormio. 2 insérer la skieuse paerson, originaire de Solden dans la base. 3 créer une table t_temp(refcomp, datcomp, nomski), puis la remplir avec la liste des compétitions s'étant déroulées à val d isere, avec leur vainqueur. 4 supprimer dans cette dernière table les compétions dont le vainqueur n'est pas originaire d une station française. 5 supprimer toutes les lignes de cette table. 6 pour la compétition comp1, insérer la skieuse paerson en lère position et décaler les autres. 7 Ajouter une colonne points (number(4)) à la table classement. Vous définissez une CI qui limite les valeurs possibles entre 0 et 5. 8 Pour chaque ligne de la table classement, vous valorisez la colonne points selon la règle suivante: rang points 1 5 2 3 3 1 9 Créer une table qui contiendra le nom du skieur et le cumul des points obtenus aux différentes compétitions (à partir de la table classement). 10 Afficher le classement des skieurs à partir de la table précédente. 11 Créer un nouveau skieur + 2 lignes dans table classement pour ce skieur a) essayer de supprimer le skieur précédemment créé (qu est-ce qui se passe?) b) faire en sorte qu'on puisse supprimer un skieur et que les lignes correspondantes dans la table classement soient automatiquement supprimées. 5
Base SKI SQL> select * from skieur order by nomski; NOMSKI SPECIALITE NOMSTAT clark descente NULL ertl superg garmisch jacquemod descente val d'isere kostelic slalom maribor montillet descente villard de lans nef descente wengen pascal slalom praloup pequegnot NULL alpe d'huez schneider slalom solden suchet superg les menuires 10 ligne(s) sélectionnée(s). SQL> select * from station order by nomstat; NOMSTAT ALTSTAT PAYSTAT CAPSTAT alpe d'huez 1860 france 32000 bormio 1225 italie 15000 chamonix 1035 france 35000 garmisch 750 Allemagne 10000 kitzbuhel 700 autriche 15000 les menuires 1850 france 26800 maribor 270 slovenie 20000 meribel 1450 france 36300 park city 2200 usa 20000 praloup 1500 france 15000 sestriere 2035 italie 25000 solden 1377 autriche 15000 tignes 1800 france 27000 val d'isere 1850 france 29567 villard de lans 1050 france 3500 wengen 1300 suisse 5500 16 ligne(s) sélectionnée(s). SQL> select * from competition; REFCOMP DATCOMP NOMSTAT comp1 26/10/05 solden comp2 22/11/05 park city comp3 13/12/05 val d'isere comp4 14/12/05 val d'isere comp5 28/12/05 bormio comp6 10/01/06 chamonix comp7 17/01/06 wengen comp8 31/01/06 garmisch comp9 11/03/06 sestriere 9 ligne(s) sélectionnée(s). 6
SQL> select * from classement order by refcomp,rang; REFCOMP NOMSKI RANG comp1 suchet 1 comp1 clark 2 comp1 pascal 3 comp1 ertl 4 comp1 kostelic 5 comp1 schneider 6 comp1 montillet 7 comp1 pequegnot 8 comp1 jacquemod 9 comp2 jacquemod 1 comp2 kostelic 2 comp2 pascal 3 comp2 nef 4 comp2 clark 5 comp2 schneider 6 comp3 montillet 1 comp3 ertl 2 comp3 pascal 3 comp3 kostelic 4 comp3 pequegnot 5 comp3 jacquemod 6 comp4 kostelic 1 comp4 clark 2 comp4 pascal 3 comp4 ertl 4 comp4 nef 5 comp4 schneider 6 comp4 suchet 7 comp4 jacquemod 8 comp4 pequegnot 9 comp4 montillet 10 comp5 ertl 1 comp5 kostelic 2 comp5 clark 3 comp5 jacquemod 4 comp6 pascal 1 comp6 ertl 2 comp6 clark 3 comp6 kostelic 4 comp6 nef 5 comp6 schneider 6 comp6 jacquemod 7 comp7 jacquemod 1 comp7 suchet 2 comp7 pascal 3 comp8 jacquemod 1 comp8 nef 2 comp8 kostelic 3 comp9 kostelic 1 comp9 nef 2 comp9 jacquemod 3 51 ligne(s) sélectionnée(s). 7