TP SQL - Bibliothèque.


1
Présentation du
modèle logique.

La base sur laquelle vous allez travailler correspond au modèle logique suivant :

2
Requêtes à rédiger en SQL
et réponses renvoyées par ces requêtes.

Rappels sur... Les requêtes.

  • Lorsque le nom d'un champ ou d'une table comporte des caractères spéciaux, vous devez l'entourer de crochet. Par exemple : SELECT [N°] FROM Client ;

  • Posez-vous toujours la question : "est-ce que la requête que je suis en train de taper est susceptible de renvoyer plusieurs fois la même réponse", et déduisez-en si la clause DISTINCT est nécessaire. Par exemple, pour la requête 1, elle ne sera pas nécessaire, mais pour la 2 oui.

  • Les clauses SQL, les tables et les champs peuvent s'écrire indifféremment en minuscule ou en majuscule (du moins sous Access).

  • Vous pouvez trouver des rappels et des explications sur la commande SELECT ici : http://sql.developpez.com/sqlaz/select/, ou utilisez le Memento SQL.
  1. INSERT : Insérez dans la table Client le client Frank DUBOIS à Avignon. Rappel : la table client contient une clé primaire en numéro automatique. Pour laisser Access choisir une valeur pour cette clé, vous ne devez pas renseigner ce champs (contrairement à MySQL où vous pouvez le renseignez avec la valeur 'null').
    Notez ici cette requête :

    Lorsque la fenêtre suivante s'affiche, c'est que votre requête d'insertion est correcte :



  2. Regardez le contenu de la table Client, et notez quelle valeur a été mise en tant que clé primaire de ce nouveau client :

  3. Supprimez ce client grâce à une commande SQL DELETE, avec une condition WHERE basée sur la clé primaire.

  4. Recréez cet enregistrement en exécutant à nouveau la même requête INSERT. L'objectif est de voir quelle est la nouvelle valeur de la clé primaire :
  5. Ajoutez, grâce à une requête INSERT dans la table Emprunt, le fait que ce nouveau client a emprunté le livre n°14 aujourd'hui. Ce livre n'existe pas encore, mais c'est pas grave, on va le rajouter juste après.
  6. Ajoutez, grâce à une requête INSERT dans la table livre, le livre "Instants de vie, les marins du Vendée Globe", par "Jean-Yves Chauve", dans la nouvelle catégorie "Récit". Notez les requêtes qui vous ont été nécessaires pour réaliser ceci :
    Requête n°1 :
    Requête n°2 :
    Requête n°3 :

  7. Ajouter un livre grâce à la requête INSERT, pour lequel vous n'essayez de renseigner que le titre ("Test") et l'auteur (auteur n°1).
  8. Pour corriger ceci, ouvrez la structure de la table "Livre", et rajouter une valeur par défaut pour le champ "NumType", par exemple la valeur 2 (pour "Roman"). Vérifiez que la requête marche alors.

  9. DELETE : essayez de supprimer, grâce à la commande SQL DELETE, le livre qui a pour clé primaire 1.
  10. Supprimez, dans la table EMPRUNT, les emprunts qui concernent le livre n°1.

  11. Essayez ensuite de supprimer à nouveau, dans la table Livre, le livre numéro 1. Ca marche ? OUI NON.

  12. Dans la même logique, on ne peut pas supprimer un auteur s'il a écrit des livres. Par exemple, tapez la requête SQL qui supprime l'auteur n°1, vous vous heurtez à la même erreur, exactement pour la même raison qu'à la question 9. On va résoudre ce problème différemment.

  13. Grâce à la commande "Relations" du menu "Outils", éditez la relation entre les tables Livre et Auteur, et cochez-y la case "Effacer en cascade les enregistrements correspondants".


  14. Faites la même chose pour la relation entre les tables Livre et Emprunt.

  15. Essayez à nouveau la requête qui supprime l'auteur n°1. Vous constatez que cette fois-ci, ça marche. La "suppression en cascade" a automatiquement supprimé les livres de l'auteur n°1, et également les emprunts de ces livres, de façon à éviter les erreurs d'intégrité référentielle.

Sébastien PASTORE.