Vous êtes sur la page 1sur 5

TP SQL Dragons

1 Connexion au serveur et applications disponibles


Nous allons utiliser le serveur Oracle qui est accessible depuis toutes les salles de l’école :
— se connecter à distance sur la machine oracle ( par ex. : ssh oracle ),
— Vérifiez que votre script de démarrage de bash (~/.bashrc) comporte bien les lignes sui-
vantes :
ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_1
PATH=$PATH:$ORACLE_HOME/bin
ORACLE_SID=oracle
ORACLE_HOME_LISTNER=$ORACLE_HOME
export ORACLE_HOME PATH ORACLE_SID ORACLE_HOME_LISTNER
— Si vous avez modifé le fichier précédent, il faut le faire relire au système : source ~/.bashrc
— puis sqlplus <identifiant>.
Il est aussi possible d’utiliser l’application sqldeveloper depuis une machine Unix en utilisant la
commande : /home/oracle/app/oracle/product/11.2.0/dbhome_1/sqldeveloper/sqldeveloper.sh. Cette
même application est téléchargeable pour d’autres systèmes d’exploitation.

2 SQLPLUS en 5 minutes
SQLPLUS est une application fournit avec la base de données ORACLE. Elle permet d’obtenir
une ligne de commande interactive pour envoyer des requêtes à la base de données. SQLPLUS
est la commande de base qui est toujours présente et fonctionne (presque) tout le temps. Si vous
utilisez une machine dont vous ne connaissez pas la configuration, vous êtes certain que l’applica-
tion SQLPLUS est installée (comme vim ou vi). Pour bien utiliser SQLPLUS, il est nécessaire de
connaître quelques commandes :
— Toutes les requêtes SQL doivent terminer par un point-virgule ( ;). Ceci est inutile pour les
commandes spécifiques à SQLPLUS.
— Il est vivement conseillé de mettre les requêtes dans (au moins) un fichier qui porte l’ex-
tension sql. Ce fichier peut ensuite être exécuté par SQLPLUS avec la commande @. ex :
@requetes (il n’est pas utile de préciser l’extension .sql. Le fichier doit donc s’appeler re-
quetes.sql).
— Pour connaître l’ensemble de ses tables, il est possible d’utiliser : select * from user_catalog ;
— r : permet d’exécuter à nouveau la dernière commande en l’affichant à l’écran.
— / : permet de simplement exécuter à nouveau la dernière commande.
— l : permet de revoir la dernière commande.
— c/old_str/new_str : permet de corriger la dernière requête en changeant old_str par new_str.
— help cmd : permet d’obtenir de l’aide sur la commande dont le nom est passée en paramètre
(ici cmd).

1
F IGURE 1 – Schéma de la base de données. Les noms des relations sont en gras et les clés primaires
sont en italique.

— desc[ribe] <table> : permet d’afficher la structure de la table dont le nom est passé en para-
mètre.
— edit : permet d’éditer le tampon de SQLPLUS dans l’éditeur (préalablement désigné avec la
variable d’environnement Unix EDITOR).
Avec quelques commandes pratiques, SQLPLUS permet de faire un compte rendu très facilement :
— dans vos fichiers SQL, vous pouvez utiliser un double tirets (- -) pour faire des commentaires
sur une ligne ou /*. . .*/ pour des commentaires multi-lignes (attention, bien souvent les
symboles /* et */ doivent être seuls sur une ligne).
— La commande set echo on permet lors de l’exécution d’un fichier d’en avoir aussi le contenu à
l’écran. Les réponses aux requêtes contenues dans le fichier sont affichés dès leur validation.
On peut ainsi avoir une requête suivie de sa réponse et ainsi de suite.
— La commande spool <nom_de_fichier> permet de sauvegarder dans un fichier nom_de_fichier.lst
tout ce qui s’affiche dans SQLPLUS jusqu’à l’utilisation de la commande spool off.
— Au lieu d’un rendu (assez moche) en texte, SQLPLUS peut aussi afficher directement du
code HTML avec la commande set markup html on (ou off pour arrêter).
— Si les réponses sont un peu longues, SQLPLUS a tendance à répéter trop souvent les en-
têtes de colonnes. Pour éviter cela, il suffit d’agrandir la taille des pages : set pagesize 1024.
— Si la taille d’un attribut est importante, il pourrait ne pas s’afficher correctement à l’écran.
La commande set linesize 1024 permet d’améliorer cela.
Bien entendu, de nombreuses autres commandes sont disponibles. Une petite recherche sur la toile
devrait vous permettre de les trouver facilement.

3 Travail demandé
3.1 Requêtes SQL

Il est demandé de faire un compte rendu détaillé. Pour chaque requête, il est nécessaire de faire
apparaître son résultat. Le résultat d’une commande spool suffit si tous les détails sont présents.

2
— Implémenter le schéma de la base de données relationnelles décrit par la figure 1 en res-
pectant au mieux les contraintes d’intégrité. Utilisez les données fournies dans le tableau 1
(voir aussi http://www.labri.fr/perso/bpinaud/?download=val.sql).
— Répondre aux requêtes suivantes avec le langage d’interrogation SQL :
1. Noms des dragons qui crachent du feu.
2. Noms des dragons mâles qui crachent du feu.
3. Liste des dragons femelles dans l’ordre décroissant de leur longueur.
4. Quel est le rapport moyen entre la longueur d’un dragon et son nombre d’écailles, pour
les mâles et les femelles ?
5. Noms des dragons amoureux.
6. Noms des dragons qui ne sont pas amoureux.
7. Qui aime qui passionnément ?
8. Qui aime qui au moins passionnément ?
9. Liste des couples qui s’aiment mutuellement.
10. Même question mais en supprimant les faux doublons.
11. Noms des dragonnes qui sont aimées par tous les dragons machos.
12. Noms des dragonnes qui ne sont aimées que par des dragons timides.
13. Quels sont les produits hypo-calories, ceux n’atteignant pas 10 calories ?
14. Noms des dragons qui mangent des œufs ?
15. Noms des dragons femelles qui mangent des œufs ?
16. Noms des dragons qui ne mangent pas.
17. Liste des produits de plus de 10 calories consommés par les dragons mâles crachant du
feu.
18. Noms des dragons qui mangent de tout.
19. Quel est le nombre de calories consommées par chaque dragon lors d’un repas ? Classer
dans l’ordre croissant du total des calories.
20. Quelles est la longueur de la flamme pour un dragon qui crache du feu, sachant que celle-
ci se calcule à partir de la formule donnée ci-dessous. Donner le résultat dans l’ordre
décroissant des longueurs de flammes.
X
Quantite consommée × Calories
n∈Nourriture consommée
Longueur du dragon

21. Noms des dragons qui ne mangent pas et qui n’aiment personne.
22. Liste des produits consommés par les dragons aimant à la folie.
23. Noms des dragonnes dont au moins l’un des prétendants fait la grève de la faim.
24. Noms des dragonnes dont tous les prétendants font la grève de la faim.
25. Une des légendes qui courent dans le monde des dragons dit qu’un couple de dragons sera
heureux si la somme de leurs nombres d’écailles est paire. Nous ajouterons, pour plus de
sûreté, qu’ils doivent avoir le même comportement amoureux. Quels couples pourraient
alors être des couples heureux ?

3
Dragon Sexe Longueur Ecailles CracheFeu EnAmour
Smeagol M 152 1857 O macho
Birdurh M 258 4787 N timide
Negueth F 128 1582 O sincere
MissToc F 183 2781 N volage
Bolong M 213 2754 O macho
Miloch M 83 718 O timide
Nessie M 168 1721 N macho
Tarak F 123 851 O timide
Solong M 173 1481 O timide
a. Table Dragon
Dragon Produit Quantite
Smeagol cacahuete 1000
Smeagol pomme 16
DragonAimant DragonAimé Force Bolong oeuf 4
Smeagol Tarak passionnement Negueth orange 6
Birdurh Negueth beaucoup Negueth oeuf 1
Negueth Miloch à la folie Miloch cacahuete 100
Miloch Negueth à la folie Tarak pomme 10
Tarak Bolong un peu Tarak orange 10
Bolong Tarak beaucoup Solong oeuf 6
Nessie Tarak un peu Solong orange 2
Miloch ver 53
Nessie poisson 20
Solong poisson 1
b. Table Amours d. Table Repas
Produit Calories
pomme 7
cacahuete 10
orange 25
oeuf 15
ver 3
poisson 35
c. Table nourriture

T ABLE 1 – Contenu des tables.

4
3.2 Manipulation de tables (commande update table)
Les dragons ont été particulièrement pourchassés par les chevaliers de la table ronde et de
nombreux combats ont eu lieu. Nous allons rajouter dans la base quelques informations afin de
créer des archives. Il ne faut pas supprimer les données existantes. Vous devez seulement mettre
à jour la base de données.
1. Un chevalier est décrit par un matricule, son nom, sa parenté (fils de), son rang (chevalier
2e classe, 1re classe, ...), sa solde ainsi que son état (mort, retraité, malade, vacances, . . .).
Ajoutez cette table ainsi que quelques enregistrements dans celle-ci.
2. La date du combat entre un chevalier et un dragon. Un chevalier ne pouvant combattre
plusieurs fois un même dragon. A vous de trouvez la meilleure modélisation possible.
3. Ajouter les informations suivantes sur les dragons sans détruire la table dragon existante :
un dragon est maintenant aussi décrit par une couleur et son état (malade, disparu, mort,
vivant, . . .). Selon sa couleur et sa taille on peut en déduire son caractère (violent, doux,
joueur, vicieux, . . .). Par défaut (voir l’ajout d’une valeur par défaut dans la documentation)
le caractère d’un dragon est “violent” (principe de précaution).
4. Définir une vue qui permet pour chaque chevalier de consulter tous les renseignements
concernant les dragons qu’il combat ou a combattu et leurs amours. Ajouter des informations
dans les tables et vérifier que la vue est bien mise à jours de façon transparente.
5. Tarak et Nessie s’aime maintenant à la folie et ont décidé de devenir végétarien. Tarak et
Bolong se haissent. Mettre à jour les tables concernées.