Polytech Montpellier - IG3 - BD Relationnelles TP ORACLE n 1 SQL - Interrogation simple L objet de cette première séance de TP est de formuler, en utilisant sqlplus d Oracle, des requêtes d interrogation mettant en jeu les opérateurs algébriques suivants : Projection, Sélection, Jointure, Union, Intersection et Différence, ainsi que d exprimer des calculs verticaux et horizontaux. La base de données exemple, sur laquelle vous allez travailler, a déjà été partiellement créée. Elle permet d effectuer la gestion très simplifiée d une bibliothèque à partir du dictionnaire de données suivant : NOM LIBELLE DOMAINE CI NUM_AB Numéro d un abonné D_NUM_AB : Number(6,0) valeurs uniques NOM Nom d un abonné D_NOM : Varchar2(30) PRENOM Prénom d un abonné D_PRENOM : Varchar2(20) VILLE Ville d un abonné D_VILLE : Varchar2(30) AGE Age d un abonné D_AGE : Number(3,0) valeurs dans [0..100] TARIF Tarif d abonnement D_TARIF : Number(3,0) valeurs dans [0..500] REDUC % de réduction D_REDUC : Number(3,0) valeurs dans [0..100] NUMERO Numéro d un exemplaire D_NUMERO : Number(4,0) valeurs uniques DATE_ACHAT Date d achat d un exemplaire D_DATE : Date PRIX Prix d un exemplaire D_PRIX : Number(5,2) ETAT Etat d un exemplaire D_ETAT : Varchar2(15) valeurs parmi : {Bon, Perdu, Abimé, En réparation} CODE_PRET Code de prêt d un exemplaire D_CODE_PRET : Varchar2(20) valeurs parmi : {Exclu, Empruntable, Consultable} ISBN Numéro ISBN d un livre D_ISBN : Varchar2(20) valeurs uniques TITRE Titre d un livre D_TITRE : Varchar2(45) SIECLE Siècle d un livre D_SIECLE : Number(2,0) valeurs dans [0..21] CATEGORIE Catégorie d un livre D_CATEGORIE : Varchar2(20) valeurs parmi : {Roman, Médical, Sciences, Gestion, Cuisine,...} MOT Mot clef caractérisant un D_MOT : Varchar2(20) Liste de valeurs prédéfinies livre D_EMPRUNT Date d emprunt D_DATE D_RETOUR Date de retour prévue D_DATE calculée D_RET_REEL Date de retour effective D_DATE NB_RELANCE Nombre de relances d un B_NB_RELANCE : Number(1,0) valeurs dans [0..3] emprunt Les types syntaxiques, utilisés pour la description des domaines, sont disponibles dans Oracle. 1
A partir du dictionnaire de données, le schéma conceptuel, établi selon le modèle Entité/Association, est le suivant : 1,n DATE - Date_EMP ABONNE - NUM_AB - NOM - PRENOM - VILLE- AGE - TARIF - REDUC Emprunte / Est emprunté 0,n 0,n - D_RETOUR - D_RET_REEL - NB_RELANCE Reproduit / est reproduit EXEMPLAIRE 1,1 - NUMERO - DATE_ACHAT - PRIX - CODE_PRET - ETAT MOT_CLEF - MOT 0,n Caractérise / Est caractérisé 0,n 0,n LIVRE - ISBN - TITRE - SIECLE - CATEGORIE Le schéma relationnel normalisé de la base exemple, dérivé du schéma conceptuel précédent, est donné ci-après. Par convention les clefs primaires sont soulignées et les clefs étrangères sont indiquées en italique. ABONNE (NUM_AB, NOM, PRENOM, VILLE, AGE, TARIF, REDUC) EXEMPLAIRE (NUMERO, DATE_ACHAT, PRIX, CODE_PRET, ETAT, ISBN) LIVRE (ISBN, TITRE, SIECLE, CATEGORIE) MOT_CLEF (MOT) EMPRUNT (NUM_AB, NUM_EX, D_EMPRUNT, D_RETOUR, D_RET_REEL, NB_RELANCE) CARACTERISE (ISBN, MOT) Remarques : Les attributs NUM_EX dans EMPRUNT et NUMERO dans EXEMPLAIRE représentent le numéro identifiant un exemplaire de livre. Le domaine D_MOT est un sur-ensemble de D_CATEGORIE. Au niveau des valeurs saisies dans la BD, Oracle fait une distinction entre minuscules et majuscules. Par contre les mots clefs SQL, les noms d attributs ou de relations peuvent être indifféremment tapés en majuscules ou minuscules. Par convention, toutes les données déjà saisies dans la BD BIBLIO l ont été en majuscules!! Étape préliminaire : Connexion et mise en place de la base de données Vous disposez tous d un compte oracle avec login (prenom.nom) et mot de passe ( oracle, à changer à la première connexion). La connexion à Oracle se fait soit selon trois méthodes possibles décrites dans le fichier connexionoracle.pdf Une fois la connexion établie, vous devez mettre en place le schéma de la base et insérer les n- uplets dans les tables en exécutant les fichiers http ://www.lirmm.fr/ laurent/polytech/creation.sql et http ://www.lirmm.fr/ laurent/polytech/remplissage.sql N hésitez pas à étudier le contenu de ces deux fichiers! 2
Première étape : Expression des projections et sélections Q1 Quels sont les nom, prénom des abonnés domiciliés à Montpellier? Q2 Donnez toutes les informations sur les exemplaires dont le code de prêt est : EMPRUNTABLE Q3 Donnez la liste des ouvrages (leur numéro ISBN, titre et catégorie), dont le titre inclut le mot ROSE, triée par ordre décroissant de numéro. Q4 Donnez la liste des livres (leur titre et catégorie) de toutes les catégories sauf Médecine, Sciences et Loisirs. Cette liste sera donnée triée par ordre alphabétique selon la catégorie. Q5 Donnez toutes les informations sur les emprunts pour lesquels la date de retour effective (attribut D_RET_REEL) n est pas renseignée dans la BD. Deuxième étape : Expression des jointures Formulez les requètes suivantes en préférant la forme prédicative chaque fois que possible. Q6 Donnez, pour l abonné Jean Dupont, la liste des exemplaires empruntés (leur numéro et la date d emprunt), par ordre croissant de date d emprunt. Q7 Donnez la liste des exemplaires empruntés (leur numéro, code prêt et état) du livre de titre LE MUR. Q8 Donnez la liste des exemplaires (leur numéro, code prêt et le titre du livre associé) d un livre caractérisé par le mot clef INFORMATIQUE. Q9 Quels sont les exemplaires (numéro) reproduisant le même livre que l exemplaire de numéro 4112 et dont l état est : BON? Q10 Quels sont les abonnés (numéro et nom) ayant emprunté un exemplaire du livre LE MUR? Q11 Existe-t-il une catégorie pour laquelle aucun livre n a été emprunté? Troisième étape : Formulation de calculs horizontaux et verticaux Q12 Combien y a-t-il d abonnés actuellement saisis dans la base? Q13 Quel est le nombre d emprunt en cours de l abonné Renard Albert? Q14 Par combien d abonné le livre LE MIRACLE DE LA ROSE a-t-il été emprunté (tous exemplaires confondus)? Q15 Donnez le prix d achat moyen des exemplaires de roman. Q16 Pour tous les abonnés (numéro, nom) bénéficiant d une réduction, donnez le montant effectivement payé pour l abonnement, uniquement s il est inférieur à 200 F et en tenant compte de la possibilité d avoir des valeurs manquantes pour les différents attributs concernés. Q17 Quel est le tarif d abonnement le plus faible? Q18 Quels sont les abonnés (numéro et nom) bénéficiant du tarif le plus faible? Q19 Quelle est la catégorie de livres pour laquelle l exemplaire le plus cher a été acheté? Quatrième étape : Utilisation des opérateurs ensemblistes Formulez ces requêtes en utilisant au moins un des opérateurs ensemblistes. Q20 Quels sont les titres des livres indexés par un mot clef correspondant à leur catégorie? Q21 Existe-t-il des exemplaires dans l état Abimé et qui sont actuellement empruntés? Si oui, donnez leur numéro. Q22 Existe-t-il des mots clefs ne caractérisant aucun livre? Q23 Donnez le numéro et nom des abonnés relancés pour un emprunt en cours, ainsi que ceux des abonnés de moins de 16 ans. 3
Environnement de travail SQLplus Avant toute opération, veuillez exécuter le fichier suivant : source alaurent/env_oracle10g Appel de SQLplus sqlplus login/mdp Sortie de SQLplus exit Aide help Cette commande peut être utilisée suivie d un mot clef sql pour obtenir une aide spécifique sur cette instruction. Pour connaitre la structure d une relation : desc nom_relation Commentaires Ils doivent être encadrés de /* et */ (sur plusieurs lignes) ou et (pour une seule ligne). Editeur d Oracle Une commande SQL est mémorisée dans un buffer de travail. Il est possible de la modifier, de la stocker ou de l exécuter. l ln n c/ch1/ch2 i del Liste les lignes de la commande Affiche la ligne n la ligne courante devient la ligne n Changement de la chaîne ch1 par chaîne ch2 dans la ligne courante Insertion après la ligne courante Suppression de la ligne courante Exécution d une commande SQLplus Une commande SQLplus est exécutée par : ; à la fin de la dernière ligne de commande / seul sur la dernière ligne de commande Appel d une commande Unix host commande_unix ou! commande_unix Néanmoins, il vous est conseillé d utiliser l éditeur de votre choix, de sauvegarder vos requêtes terminées par ; et avec comme dernière ligne uniquement / (attention, ce n est pas toujours nécessaire selon l éditeur) dans des fichiers avec extension.sql Puis, vous pouvez au niveau de l éditeur SQLplus utiliser les commandes suivantes @ nom_fichier run Chargement et exécution sans affichage de la commande Exécute le contenu du buffer Vous pouvez utiliser emacs ou xemacs puis partager la fenêtre en deux (Ctrl X puis 2), exécuter un shell dans l une des deux fenêtres (Echap X puis shell), l autre étant dédiée à l écriture des requêtes, puis lancer sqlplus / L intérêt d utiliser cette fenêtre est l accès aux commandes précédentes en utilisant les touches Ctrl plus Flèche (haut et bas). 4
Contenu des tables La relation Abonne 901001, LEVEQUE, PIERRE, MONTPELLIER,40,500,NULL 902043, DUPONT, MARIE, MONTPELLIER,20,200,20 902075, RENARD, ALBERT, MONTPELLIER,18,200,NULL 911007, MARTIN, LOIC, BEZIER,35,500,20 911021, DUPONT, ANTOINE, MONTPELLIER,38,500,NULL 911022, DUPONT, SYLVIE, MONTPELLIER,35,500,NULL 911023, DUPONT, JEAN, MONTPELLIER,22,200,20 922016, MEUNIER, LUC, MONTPELLIER,14,100,NULL 921102, LUCAS, PAUL, MONTPELLIER,48,500,20 922143, REVEST, ANNIE, MONTPELLIER,12,100,NULL 932010, ANTON, JEANNE, MONTPELLIER,10,100,NULL La relation Livre 1_104_1050_2, LE MUR,20, NOUVELLE 0_15_270500_3, LE MIRACLE DE LA ROSE,20, ROMAN 0_85_4107_3, L ENFANT,19, ROMAN 0_112_3785_5, POESIES COMPLETES, 15, POEME 0_201_14439_5, AN INTRODUCTION TO DATABASE SYSTEMS,20, SCIENCES 0_12_27550_2, NEW APPLICATIONS OF DATABASES,20, SCIENCES 0_8_7707_2, BASES DE DONNEES RELATIONNELLES,20, SCIENCES 1_22_1721_3, LE NOM DE LA ROSE,20, ROMAN 3_505_13700_5, LE GRAND VESTIAIRE,20, ROMAN 0_18_47892_2, UNE ROSE POUR MORRISSON,20, ROMAN 9_782070_36, LA PERLE,20, ROMAN 2_7296_0040, GODEL ESCHER BACH : LES BRINS D UNE GUIRLANDE,20,NULL 0_26_28079_6, OBJET, DE MERISE A C++,20, SCIENCES La relation Mot_clef LITTERATURE, ROMAN, POESIE, SCIENCES, INFORMATIQUE, BASES DE DONNEES, HISTOIRE, ESSAI, NOUVELLE, MEDECINE La relation Caracterise 1_104_1050_2, LITTERATURE 0_15_270500_3, LITTERATURE 0_15_270500_3, ROMAN 0_85_4107_3, LITTERATURE 0_85_4107_3, ROMAN 0_112_3785_5, LITTERATURE 0_112_3785_5, POESIE 0_201_14439_5, SCIENCES 0_201_14439_5, INFORMATIQUE 0_201_14439_5, BASES DE DONNEES 0_12_27550_2, SCIENCES 0_12_27550_2, INFORMATIQUE 0_8_7707_2, SCIENCES 0_8_7707_2, INFORMATIQUE 0_8_7707_2, BASES DE DONNEES 1_22_1721_3, ROMAN 1_22_1721_3, HISTOIRE 3_505_13700_5, LITTERATURE 3_505_13700_5, ROMAN 0_26_28079_6, SCIENCES 0_26_28079_6, INFORMATIQUE 0_26_28079_6, BASES DE DONNEES 5
La relation Exemplaire 1010, 10-04-1995,55, EMPRUNTABLE, BON, 0_18_47892_2 1011, 10-04-1995,55, EMPRUNTABLE, BON, 0_18_47892_2 1012, 20-05-1995,112, EMPRUNTABLE, BON, 3_505_13700_5 2909, 30-03-1993,35, EMPRUNTABLE, BON, 3_505_13700_5 2673, 15-03-1992,42, EMPRUNTABLE, ABIME, 3_505_13700_5 2710, 20-06-1994,270, CONSULTABLE, BON, 0_8_7707_2 2711, 20-06-1994,270, EMPRUNTABLE, BON, 0_8_7707_2 3014, 15-09-1993,420, CONSULTABLE, BON, 0_201_14439_5 3016, 15-09-1993,420, EMPRUNTABLE, BON, 0_201_14439_5 3702, 20-02-1992,210, EMPRUNTABLE, BON, 1_22_1721_3 3703, 20-02-1992,210, CONSULTABLE, BON, 1_22_1721_3 4111, 03-01-2000,48, EMPRUNTABLE, BON, 1_22_1721_3 4112, 03-01-2000,48, EXCLU, BON, 1_22_1721_3 4203, 29-11-1992,35, EMPRUNTABLE, BON, 1_104_1050_2 4204, 29-11-1992,35, EMPRUNTABLE, ABIME, 1_104_1050_2 5003, 10-06-1993,39, EMPRUNTABLE, BON, 1_104_1050_2 5004, 10-06-1993,41, EMPRUNTABLE, BON, 0_15_270500_3 5005, 10-06-1993,41, EMPRUNTABLE, BON, 0_15_270500_3 5103, 20-12-1993,470, CONSULTABLE, BON, 0_12_27550_2 5104, 20-12-1993,470, EMPRUNTABLE, BON, 0_12_27550_2 6006, 15-12-2000,33, EMPRUNTABLE, BON, 0_85_4107_3 6007, 15-12-2000,33, EMPRUNTABLE, BON, 0_85_4107_3 5202, 18-10-1997,40, EMPRUNTABLE, BON, 0_18_47892_2 7000, 01-09-1987,420, CONSULTABLE, BON, 2_7296_0040 7001, 01-09-1987,420, EMPRUNTABLE, BON, 2_7296_0040 7002, 01-09-1987,420, EXCLU, BON, 2_7296_0040 1090, 23-11-1995,150, EXCLU, ABIME, 9_782070_36 1091, 23-11-1995,150, CONSULTABLE, EN_REPARATION, 9_782070_36 1109, 30-05-1999,170, EMPRUNTABLE, BON, 9_782070_36 La relation Emprunt 911023,5003, 10-03-2003, 30-03-2003, 30-03-2003,NULL 911023,5005, 30-03-2003, 15-04-2003, 10-04-2003,NULL 911023,1012, 30-03-2003, 15-04-2003, 10-04-2003,NULL 911023,5103, 17-06-2003, 30-06-2003, 20-07-2003,1 901001,4203, 03-01-2002, 18-01-2002, 18-01-2002,NULL 901001,5005, 03-01-2002, 18-01-2002, 18-01-2002,NULL 911007,4203, 25-02-2002, 08-03-2002, 25-03-2002,1 911007,1010, 13-05-2002, 31-05-2002, 31-05-2002,NULL 921102,4204, 08-08-2003, 22-08-2003, 30-08-2003,NULL 921102,5005, 08-08-2003, 22-08-2003, 30-08-2003,NULL 911021,5004, 10-12-2003, 30-12-2003, 28-12-2003,NULL 911007,5004, 20-07-2003, 10-08-2003, 10-08-2003,NULL 911007,4204, 19-01-2003, 10-02-2003,NULL,1 911007,2673, 10-12-2003, 30-12-2003, 28-12-2003,NULL 902075,2673, 15-02-2003, 28-02-2003,NULL,NULL 902075,1010, 05-01-2003, 25-01-2003,NULL,1 921102,6006, 20-12-2003, 10-01-2003,NULL,2 911023,6007, 22-12-2003, 12-01-2003, 13-01-2003,NULL 902043,7001, 15-09-2001, 09-10-2001, 10-10-2001,NULL 902043,3014, 01-10-2001, 21-10-2001, 20-11-2001,2 902043,3014, 01-12-2001, 20-12-2001, 20-12-2001,NULL 911023,1109, 15-09-2003, 05-10-2003, 05-11-2003,2 902043,7001, 20-11-2001, 10-12-2001, 10-12-2001, NULL 901001,7001, 30-01-2001, 20-02-2001, 18-02-2001,NULL 901001,7001, 22-05-2003, 12-06-2003, 15-06-2003,NULL 6