Rédigez le modèle relationnel à la source des tables de biblio.mdb. Support : Cas biblio Vous disposez du fichier biblio.mdb créé sous ACCESS. Téléchargez le à partir de la page précedente et renommez le en intégrant votre nom (ex : marcelbiblio.mdb). Il vous servira de support de test des requêtes exemples proposées dans ce cours. Voici un aperçu de la structure du fichier de base de données biblio à l’aide du modèle de relations ACCESS. Rédigez le modèle relationnel à la source des tables de biblio.mdb. Il servira de support à l’écriture des requêtes.
Support : Contenu tables biblio Voici les occurrences contenues dans les différentes tables de biblio.mdb EDITEUR LIVRE AUTEUR EMPRUNT (Extrait) ADHERENT GENRE
Cours : Opérateurs de requêtes Une requête ou interrogation de bases de données constitue un enchaînement d’opérations sur les tables et leurs occurrences afin d’en extraire le contenu souhaité pour chaque champ retenu. De nouveaux champs peuvent en outre être obtenus en combinant d’autres champs. Des calculs complexes peuvent être réalisés à l’aide de fonctions et des regroupements sont intégrés pour les cumuls, moyennes etc. de séries de valeurs. L’affichage par défaut dans Access est le QBE (Query by example) offrant la possibilité d’éviter toute programmation complexe et de permettre une approche simple des requêtes à l’aide de manipulations de la souris. En arrière plan toutefois s’écrit automatiquement un enchaînement d’opérateurs sous la forme SQL (Structured Query Language), langage couramment utilisé dans les contextes de requêtes actuels (SQL Server, PHP mySQL, Access, Oracle etc.). Access possède quelques spécificités dans son aspect SQL. Nous nous intéresserons à l’écriture SQL courante. 3 opérations constituent l’essentiel de l’écriture SQL : PROJECTION SELECT FROM SELECTION (RESTRICTION) JOINTURE (COMPOSITION) WHERE, AND, OR
Cours : Projection 1°) PROJECTION : Affichage d’une liste de champs d’une ou plusieurs tables associées (les lignes identiques ne sont présentes qu’une seule fois selon …) : Elle s’écrit : SELECT champ1, champ2, … champN FROM Table1, Table2, …TableN Exemple1 : Quelle est la liste des adhérents (Nom, Prénom, Adresse) SELECT ADHERENT.NomAdh, ADHERENT.PrenAdh, ADHERENT.RueAdh, ADHERENT.VilleAdh FROM ADHERENT Se lit : Affichez les noms, prénoms, adrue et ville des adhérents A partir de la table ADHERENT On peut tolérer d’alléger notre écriture en écrivant simplement la syntaxe champ et non plus TABLE.Champ, surtout si une confusion des appellations de champs est impossible. Ce qui donne : SELECT NomAdh, PrenAdh, RueAdh, VilleAdh On peut y intégrer une création d’un champ calculé simplement ou à l’aide d’une fonction de calcul grâce et l’opérateur AS permettra de nommer ce nouveau champ. Exemple2 : Quelles sont les durées en jours des emprunts ? (N° Adh, N°Livre, DateEmprunt, Durée) SELECT N°Adh, N°Livre, DateEmprunt, (DateRetour – DateEmprunt) AS Durée FROM EMPRUNT Exemple3 : Quelles sont les durées en semaines entières des emprunts ? (N° Adh, N°Livre, DateEmprunt, DuréeSem). SELECT N°Adh, N°Livre, DateEmprunt, INT((DateRetour – DateEmprunt)/7) AS DuréeSem INT(nombre) est la fonction « entier d’un nombre » équivalent à ENT dans ACCESS ou EXCEL. ARROND(nombre;nb décimales) aurait engendré un arrondi au plus proche. Ces fonctions sont disponibles dans le générateur d’expression ACCESS. Question : Combien d’occurrences et quels champs contiendra la requête exécutée à partir de l’instruction SQL : SELECT DISTINCT NomAdh FROM ADHERENT ORDER BY NomAdh. Pourquoi ? Réponse : 15 occurrences car les NomAdh identiques ne sont présents qu’une seule fois. L’opérateur DISTINCT équivaut à activer l’option Valeurs distinctes : Oui dans les propriétés de la requête sous ACCESS. ORDER BY permet un tri croissant (ASC) ou décroissant (DESC)
Cours : Sélection 2°) SELECTION : RESTRICTION Affichage d’une liste restreinte des occurrences d’une table en fonction des champs projetés. La sélection implique obligatoirement la prise en compte d’un ou plusieurs critères. Elle s’écrit : WHERE Critère1 AND Critère2 … OR CritèreN Pour les comparaisons de valeurs numériques on utilise le signe =, <, >, <=, >=, <> Pour les chaînes de texte on peut utiliser l’opérateur LIKE, NOT LIKE (Comme, Pas Comme) Pour les encadrements on peut utiliser BETWEEN … AND Elle s’écrit derrière la PROJECTION Exemple1 : Quels adhérents (NomAdh et PrenAdh) résident à Aubigny ? SELECT NomAdh, PrenAdh FROM ADHERENT WHERE VilleAdh = « Aubigny » Exemple2 : Quels adhérents d’Aubigny sont des adultes (parents ou non) ? WHERE VilleAdh LIKE Aubigny AND N°AdhParent = Null Exemple3 : Quels numéros de livres sont en cours d’emprunt actuellement ? SELECT N°Livre FROM EMPRUNT WHERE DateEmprunt <= Now() AND DateRetour >= Now() On peut aussi écrire : WHERE Now() BETWEEN DateEmprunt AND DateRetour Now() correspond à la fonction Maintenant() de ACCESS
Cours : Jointure 3°) JOINTURE : Permet l’assemblage des tables au fur et à mesure en fonction des clés (primaires ou secondaires) qu’elles ont en commun. Une jointure se fait en fonction des clés pour être cohérente. Elle n’utilisera que très exceptionnelement tout autre champ. Elle s’écrit : WHERE Table1.cléX=Table2.cléX AND Table2 .CléY=Table3.CléY Dans ACCESS la jointure est écrite par INNER JOIN ON Table1.cléX=Table2.cléX Exemple1 : Quelle est la liste des livres (Titre) uniquement empruntés jusqu’ici ? SELECT TitreLivre FROM LIVRE, EMPRUNT WHERE LIVRE.N°Livre = EMPRUNT.N°Livre Exemple2 : Donnez le nom de l’auteur et le genre du livre intitulé La maison des Atreides SELECT NomAut, LibelléGenre FROM AUTEUR, GENRE, LIVRE WHERE TitreLivre LIKE « La maison des Atreides » AND AUTEUR.N°Aut = LIVRE.N°Aut AND LIVRE.Codegenre = GENRE.CodeGenre Exemple3 : Quels sont les prénoms des enfants de Alexandre KILOURIEN ? SELECT PrenAdh FROM ADHERENT WHERE NomAdh LIKE « KILOURIEN » AND PrenAdh LIKE « Alexandre » AND ADHERENT.N°Adh = ADHERENT.N°AdhParent Remarque importante : On peut substituer à la jointure une opération d’intersection avec l’opérateur IN pour obtenir un effet identique parfois. Le IN (Intersection) ou NOT IN (Différence) sera revu lors d’approfondissements ultérieurs. Exemple : Donnez la liste des parents : SELECT PrenAdh, NomAdh, N°Adh WHERE N°Adh IN (SELECT N°AdhParent from ADHERENT) Exemple : Quels livres (N°livre) n’ont jamais été empruntés SELECT N°livre FROM LIVRES NOT IN (SELECT N°Livre FROM EMPRUNT)
Remarque importante : On peut substituer à la jointure une opération d’intersection avec l’opérateur IN pour obtenir un effet identique parfois. Le IN (Intersection) ou NOT IN (Différence) sera revu lors d’approfondissements ultérieurs. Exemple : Donnez la liste des parents : SELECT PrenAdh, NomAdh, N°Adh FROM ADHERENT WHERE N°Adh IN (SELECT N°AdhParent from ADHERENT) Exemple : Quels livres (N°livre) n’ont jamais été empruntés SELECT N°livre FROM LIVRES NOT IN (SELECT N°Livre FROM EMPRUNT)