Le Langage SQL – Exploiter une base Access 2007

Nous avons étudié dans le tutoriel suivant : Création d’une base de données Access 2007 comment créer une base de données sous Microsoft Access 2007. Nous allons maintenant voir comment exploiter la base de données à l’aide de requêtes SQL.

SQL (Structured Query Language) est un langage de programmation informatique destiné à stocker, à manipuler et à retrouver des données enregistrées dans des bases de données relationnelles.

  • Téléchargez la base de données Videotheque.accdb. Décompressez ensuite le fichier et lancer l’ouverture de la base par un double clic gauche.
  • Dans la barre de menus en haut cliquez sur Créer :

  • Ensuite allez tout à droite dans la barre d’outils dans la section Autre et cliquez sur Création de requête :

  • La fenêtre suivante s’ouvre avec les différentes tables de votre base de données, vous allez passer directement en mode SQL pour cela cliquez sur le bouton Fermer :

  • Cliquez maintenant tout en bas à droite sur le bouton SQL :

  • La page principale affiche le résultat suivant :

  • Modifiez le résultat affiché comme ci-dessous :

  • Cliquez ensuite sur le bouton Exécuter situé dans la barre d’outil en haut à gauche dans la section Résultats:

  • Félicitations vous venez d’exécuter votre première requête SQL dont le résultat est le suivant :

  • Vous pouvez enregistrer la requête. Pour cela faites un clic droit sur l’onglet « Requête1 » puis un clic gauche sur Enregistrer :

  • Une fenêtre apparait vous demandant d’enregistrer sous le nom que vous souhaitez la requête. Tapez « Liste des Amis » puis cliquez sur le bouton OK :

  • On constate que la requête « Liste des Amis » apparait dans la liste des tables à gauche et se distingue des tables par un symbole qui précède son nom représentant des tables liées :

Étudions à présent les commandes SQL de base en prenant des exemples concrets grâce à notre petite base de données :

  • SELECT & FROM : SELECT « nom du champ » FROM « nom de table »

Exemple : SELECT * FROM Amis; = Sélectionner tous les champs (=colonnes) provenant de la table « Amis »

  • DISTINCT : SELECT DISTINCT « nom du champ » FROM « nom de table »

Exemple : SELECT DISTINCT Ville FROM Amis; = Sélectionner le champ « Ville » provenant de la table « Amis » mais exclure les doublons ce qui permet d’obtenir uniquement la liste des villes ou vous avez des amis :

  • WHERE : SELECT « nom du champ » FROM « nom de table » WHERE « condition »

Exemple : SELECT Prénom FROM Amis WHERE Ville = ‘Clermont-Ferrand’; = Sélectionner le champ « Prénom » provenant de la table « Amis » dont le champ « Ville » = « Clermont-Ferrand » ce qui permet d’obtenir la liste des amis qui vivent à Clermont-Ferrand :

  • AND & OR : SELECT « nom du champ » FROM « nom de table » WHERE « condition simples » {[AND|OR] « condition simples »}+

Exemple : SELECT Nom FROM Films WHERE Durée > 190 OR (Durée < 130 AND Durée > 120); = Sélectionner le champ « Nom » de la table « Films » dont le champ « Durée » est supérieure à 190 ou inférieure à 130 et supérieure à 120 :

  • IN : SELECT « nom du champ » FROM « nom de table » WHERE « nom de colonne » IN (‘valeur1’, ‘valeur2’, …)

Exemple : SELECT * FROM Films WHERE Genre IN (‘Policier’, ‘Drame’); = Sélectionner tous les champs provenant de la table « Films » dont le champ « Genre » contient « Policier » et « Drame ». On obtient donc toutes les informations concernant les films du genre Policier ou Drame :

  • BETWEEN : SELECT « nom du champ » FROM « nom de table » WHERE « nom de colonne » BETWEEN ‘valeur1’ AND ‘valeur2’

Exemple : SELECT * FROM Films WHERE [Date de sortie] BETWEEN #1/1/1990# AND #1/1/2000#; (les dates doivent toujours être encadrées par des # sous Microsoft Access) = Sélectionner tous les champs provenant de la table « Films » dont le champ « Date de sortie » est compris entre le 01/01/1990 et le 01/01/2000 :

  • LIKE : SELECT « nom du champ » FROM « nom de table » WHERE « nom de colonne » LIKE {modèle}

Exemple : SELECT Réalisateur FROM Films WHERE Réalisateur LIKE « Fra* »; (les caractères manquants sont exprimés par des * sous Microsoft Access) = Sélectionner les enregistrements du champ « Réalisateur » de la table « Films » dont les enregistrements du champ « Réalisateur » contiennent le début des caractères « Fra » :

  • ORDER BY : SELECT « nom du champ » FROM « nom de table » [WHERE « condition »] ORDER BY « nom de colonne » [ASC, DESC]

Exemple : SELECT Réalisateur FROM Films WHERE Réalisateur LIKE « Fra* » ORDER BY Réalisateur DESC; = Comme précédemment avec la commande SQL LIKE sauf que cette fois ci on a ajouté un tri du champ « Réalisateur » dans un ordre descendant. On constate que l’ordre de la liste est inversé en effet par défaut si on utilise pas la commande SQL ORDER BY les enregistrements du champ sont classés dans un ordre ascendant :

  • Fonctions SUM, AVG, MAX, MIN, COUNT : SELECT « nom de fonction »(« nom du champ ») FROM « nom de table »

Exemple : SELECT SUM(Durée) FROM Films; = Calcul de la somme de tous les enregistrements du champ « Durée » de la table « Films » :

Exemple : SELECT AVG(Durée) FROM Films; = Calcul de la moyenne de tous les enregistrements du champ « Durée » de la table « Films » :

Exemple : SELECT MAX(Durée) FROM Films; = Sélectionner l’enregistrement du champ « Durée » de la table « Films » ayant la plus grande valeur :

Exemple : SELECT MIN(Durée) FROM Films; = Sélectionner l’enregistrement du champ « Durée » de la table « Films » ayant la plus petite valeur :

Exemple : SELECT COUNT(Nom) FROM Films; = Calcul du nombre d’enregistrements du champ « Nom » de la table « Films » :

  • GROUP BY : SELECT « nom du champ 1 », SUM(« nom du champ 2 ») FROM « nom de table » GROUP BY « nom du champ 1 »

Exemple : SELECT Réalisateur, SUM(Note) FROM Films GROUP BY Réalisateur; = Sélectionner les enregistrements du champ « Réalisateur » et la somme des enregistrements du champ « Note » de la table « Films » groupés à partir du champ « Réalisateur » :

  • HAVING : SELECT « nom du champ 1 », SUM(« nom du champ 2 ») FROM « nom de table » GROUP BY « nom du champ 1 » HAVING (condition fonction)

Exemple : SELECT Réalisateur, SUM(Note) FROM Films GROUP BY Réalisateur HAVING SUM(Note)>7; = Comme précédemment avec la commande SQL GROUP BY sauf que cette fois ci on a ajouté la condition que la somme des enregistrements du champ « Note » groupé par « Réalisateur » soit supérieur à la note de 7 :

  • Alias : SELECT « table alias ». »nom du champ 1″ « colonne alias » FROM « nom de table » « table alias »

Exemple : SELECT A1.Réalisateur AS [Nom Réalisateur], SUM(A1.Note) AS [Total Notes] FROM Films AS A1 GROUP BY A1.Réalisateur; (AS est spécifique à Microsoft Access) = Comme précédemment avec la commande SQL GROUP BY sauf que cette fois ci on a créé des alias afin que la colonne « Réalisateur » se nomme « Nom Réalisateur » et la colonne « Expr1001 » se nomme « Total Notes » :

  • Jointure Interne : Jointure entre 2 tables

Exemple : SELECT Prénom, Nom FROM Films INNER JOIN Amis ON Films.ID=Amis.[ID Film] WHERE Ville= »Clermont-Ferrand »; (Veillez à ce que le nom d’un champ contenant un espace soit encadré de crochets dans votre syntaxe SQL) = Sélectionner les champs « Prénom » et « Nom » des tables « Films » et « Amis » qui sont jointes dont les champs en relation sont « ID » de la table « Films » et « ID Film » de la table « Amis » et dont les enregistrements du champ « Ville » est « Clermont-Ferrand » :

  • Jointure Externe : Contrairement à la jointure interne qui respecte scrupuleusement la relation entre les tables jointes, la jointure externe permet d’aller plus loin en sélectionnant les données d’une des tables qui ne respectent pas le critère de jointure. Afin de vérifier cela ajoutez un enregistrement à la table « Amis ». Par exemple « Laetitia » qui habite à « Clermont-Ferrand » et dont l’ID Film est le « 4 » puis faites un clic droit sur le nom de l’onglet « Amis » puis un clic gauche sur Enregistrer :

Depuis la liste des tables et Requêtes ouvrez la requête « Amis et Films de Clermont-Ferrand » en faisant un clic droit sur la requête puis un clic gauche sur Ouvrir ou si vous ne l’avez pas enregistré créez de nouveau la requête précédente : SELECT Prénom, Nom FROM Films INNER JOIN Amis ON Films.ID=Amis.[ID Film] WHERE Ville= »Clermont-Ferrand »;

On constate que « Laetitia » a bien été ajoutée à la liste des Amis habitant à Clermont-Ferrand et qu’elle possède le Film « Les Evadés » :

Supprimez maintenant de la table « Amis » le champ « ID Film » de « Laetitia » qui est « 4 » et n’oubliez pas d’enregistrer la table avant de la refermer puis exécuter de nouveau la requête « Amis et Films de Clermont-Ferrand ». On constate qu’on a de nouveau juste « Moktar » et « Nicolas » car Laetitia n’a plus de critère de jointure :

Pour que Laetitia apparaisse dans la requête il faut exécuter une jointure externe :

Exemple : SELECT Prénom, Nom FROM Films RIGHT JOIN Amis ON Films.ID=Amis.[ID Film] WHERE Ville= »Clermont-Ferrand »; (dans les versions antérieures de Microsoft Access 2007 la syntaxe était RIGHT OUTER JOIN si vous l’ajoutez ça fonctionne aussi) = C’est la même requête que pour la jointure interne sauf qu’on a remplacé INNER par RIGHT :

Le RIGHT JOIN (ou RIGHT OUTER JOIN) implique que l’on sélectionne toutes les lignes respectant le critère de jointure, puis on ajoute toutes les lignes de la table « TableDroite » qui ont été rejetées car elles ne respectaient pas le critère de jointure.

Le LEFT JOIN (ou LEFT OUTER JOIN) implique que l’on sélectionne toutes les lignes respectant le critère de jointure, puis on ajoute toutes les lignes de la table « TableGauche » qui ont été rejetées car elles ne respectaient pas le critère de jointure.

Vous savez maintenant exploiter une base de données Microsoft Access 2007 avec le langage SQL !

Cliquez ici pour télécharger la base Access en fichier compressé.

Tutoriel réalisé avec Microsoft Access 2007 le 5 Février 2012