Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :
Access - Les requêtes sur les tables
Les requêtes de synthèse
Les
requêtes de synthèse permettent d'effectuer des regroupements de données issues de plusieurs
tables . Elles affichent sous une même vue toutes les informations demandées. Dans le cas d'une
table Clients et d'une
table Commandes , la
requête de synthèse regroupe les données pour afficher les commandes du client avec les informations du client. Elle permet de plus de faire des
opérations de synthèse comme la
somme des commandes en les regroupant par client. La vue qu'elle fournit permet donc une lecture de synthèse rapide et efficace. Le résultat d'une
requête n'est ni plus ni moins qu'une
table . Si bien qu'une
requête peut être utilisée au même titre qu'une
table pour construire les autres objets
Access tels que les
formulaires et les
états .
Télécharger la base de données facturation-requetes.accdb en cliquant sur ce lien ,
L'ouvrir dans Access ,
Il s'agit d'une petite
base de données de
facturation avec la
table des clients et celles des
commandes du client . Elles sont donc
reliées entre elles par le jeu des
relations . Certains clients ont passé plusieurs commandes. Donc pour un client recensé dans la
table Clients , il peut y avoir plusieurs lignes de commandes lui appartenant dans la
table Commandes .
Cliquer sur l'onglet Créer en haut de la fenêtre Access ,
Cliquer sur le bouton Assistant requête dans la zone Requêtes ,
Dans la boîte de dialogue qui apparaît, choisir Assistant requête simple et cliquer sur Ok,
Dans l'étape qui suit, nous souhaitons afficher les informations des
tables Clients et
Commandes pour les regrouper.
Choisir Table :Clients dans la liste déroulante Tables/Reqêtes ,
Cliquer sur le bouton à double flèche de la zone centrale afin de sélectionner tous ses champs ,
Choisir ensuite Table : Commandes dans la liste déroulante Tables/Reqêtes ,
Double-cliquer sur le champ Commandes_num pour le basculer à droite,
De la même façon, double cliquer sur Commandes_total et Commandes_date ,
Ainsi nous n'ajoutons pas le champ
Commandes_client . Il sagit en effet de la
clé externe reliée à la
clé primaire de la table
Clients . Nous avons déjà ajouté le
champ Clients_num , donc nous ne souhaitons pas répéter cette information.
Cliquer sur le bouton Suivant pour continuer la construction de la requête ,
Cocher la case Synthèse et cliquer sur le bouton Options de synthèse ,
Nous souhaitons afficher le nombre de commandes par client ainsi que la somme des commandes par client. Pour ce faire, dans la boîte de dialogue qui est apparue :
Cocher la case Somme pour le champ Commandes_total ,
Cocher la case Compter les enregistrements dans Commandes ,
Cliquer sur Ok pour valider ces choix,
Cliquer ensuite sur le bouton Suivant pour poursuivre,
Dans cette étape, conserver le choix de groupement Date/heure unique ,
Puis cliquer sur Suivant,
Enfin donner un titre à la requête comme : Commandes_du_client ,
Et cliquer sur Terminer pour valider la création de la requête.
Les résultats de la
requête s'affichent dans la partie centrale de l'écran sous une vue semblable à celles des
tables . Vous notez de même que ce nouvel objet,
Commandes_du_client , s'affiche dans la liste des
objets Access sur la gauche, dans la partie
Requêtes . De plus vous constatez que les informations des clients et de leurs commandes sont bien affichées ensemble. A l'origine, elles appartiennent pourtant à deux tables distinctes reliées entre elles. En plus de cela, les commandes d'un même client sont regroupées. D'une part les informations du client ne sont ainsi pas répétées sur plusieurs lignes, d'autre part la somme des montants des commandes d'un client est synthétisée dans un nouveau champ et enfin un dernier champ récapitule le nombre de commandes du client. Cette requête pourtant simple à la construction offre déjà beaucoup de précieux renseignements synthétisés.
Cliquer sur l'onglet Accueil ,
Dans le ruban, cliquer sur la flèche du bouton Affichage ,
Dans la liste, cliquer sur Mode création ,
Cette vue permet de voir tous les champs inclus dans la requête et d'agir dessus. Il est ainsi possible de visualiser les opérations, comme celle de la somme. Nous pouvons la modifier ou effectuer d'autres opérations et aussi ajouter des critères. Nous allons commencer par masquer les champs dont les renseignements sont moins importants.
Décocher la case Afficher du champ Clients_prenom ,
Décocher la case Afficher du champ Premier de Commandes_num ,
Décocher la case Afficher du champ Premier de Commandes_date ,
Dans le ruban, cliquer sur le bouton Exécuter pour afficher la requête en Feuille de données,
La vue est plus épurée, plus simple à lire.
Revenir en mode Création ,
Vous remarquez la présence d'une ligne
Opération . Tous les champs qui peuvent l'être sont regroupés (Regroupement) lorsqu'ils correspondent comme
Clients_num . Pour ces regroupements, l'opération
Somme est réalisée sur le champ
Somme de Commandes_total . Nous souhaitons maintenant afficher les commandes des montants les plus importants vers les plus petits.
Régler la valeur du Tri sur Décroissant pour le champ Somme De Commandes_total ,
Cliquer sur le bouton Exécuter du ruban,
Vous remarquez que les commandes s'affichent bien triées de la plus grande somme vers la plus petite. Nous souhaitons maintenant n'afficher que les clients qui ont passé plusieurs commandes.
Revenir en mode création de la requête ,
Taper >1 dans la zone Critères du champ Compte De Commandes ,
Cliquer sur le bouton Exécuter du ruban,
Seuls les clients ayant passé plusieurs commandes apparaissent triés selon la somme totale de leurs commandes. Ainsi, à une
requête de synthèse qui réalise déjà de précieuses opérations automatiquement, nous sommes capables d'ajouter très simplement des restrictions, critères et tris grâce au
mode création . Nous obtenons facilement une
requête relativement complexe à l'usage pertinent et efficace.
Le code des requêtes - Le langage SQL
Chacune des
requêtes que vous réalisez à l'aide des assistants est bâtie sur un langage universel. Le
Sql est le langage de requêtage qui permet d'attaquer les données pour en extraire les informations selon
criètre . Pour présenter sommairement ce langage associé, nous allons créer une
requête très simple, sur une table seulement. Nous consulterons ensuite son code et tenterons d'y appliquer quelques ajustements.
Dans le ruban Créer , cliquer sur le bouton Assistant requête ,
Dans la boîte de dialogue, choisirAssistant requête simple et cliquer sur Ok,
Dans l'étape qui suit, sélectionner Table : Clients dans la liste Tables/Requêtes ,
Vous remarquez à ce stade que la requête que nous avons précédemment construite est proposée dans la liste. Cela signifie qu'une requête peut être utilisée pour créer une autre requête plus complexe.
Sélectionner tous les champs de la table Clients en cliquant sur le bouton double flèche au centre de la boîte de dialogue,
Cliquer sur Suivant ,
Nommer cette requête Requete_clients et cliquer sur Terminer ,
Nous obtenons exactement la même vue que celle de la
table Clients . A ce stade, cette
requête fait donc office de doublons.
Dans le ruban Accueil , cliquer sur la flèche du bouton Affichage ,
Dans la liste, cliquer sur Mode SQL ,
Plutôt que d'afficher la
requête en mode création comme nous l'avons fait précédemment, nous décidons d'accéder directement au
code source de cette dernière.
Le code exact de la requête est le suivant :
SELECT Clients.[clients_num], Clients.[clients_civilite], Clients.[clients_nom], Clients.[clients_prenom], Clients.[clients_cp], Clients.[clients_ville], Clients.[clients_dateN] FROM Clients;
SELECT est le mot clé
SQL pour débuter une
requête sélection . Tous les champs qui suivent séparés d'une virgule seront sélectionnés et affichés dans le résultat de la requête. Un champ comme clients_num s'écrit entre crochets et est précédé du nom de la table dont il est issu :
Clients.[clients_num] . Ici, tous les champs de la
table Clients sont énumérés car nous les avons tous sélectionnés.
FROM est le mot clé
SQL qui permet de désigner sur quelle
table nous effectuons la
requête sélection . Donc
FROM Clients signifie que nous réalisons la
requête sur la
table Clients . Nous terminons toujours la syntaxe par un point-virgule. Commençons les modifications. Nous ne voulons plus voir apparaître les champs prenom et cp :
Dans le code, supprimer les fragments, Clients.[clients_prenom], et Clients.[clients_cp], ,
Pensez bien à ne pas oublier la virgule qui va avec, sinon vous obtiendrez une erreur de syntaxe.
Enregistrer (CTRL + S ),
Cliquer sur le bouton Exécuter du ruban,
Nous obtenons bien une vue restreinte de la
table Clients , avec deux champs en moins.
Cliquer sur Mode Sql dans le bouton Affichage pour revenir dans l'éditeur de code,
Il existe une méthode très simple pour désigner tous les champs d'une table dans une
requête sélection . Il suffit de remplacer l'
énumération des champs par le symbole
* qui signifie
Tous .
Modifier la requête comme suit : SELECT * FROM Clients; ,
Cliquer le bouton Exécuter ,
De nouveau nous retrouvons la vue de la
requête initiale mais nous avons considérablement simplifié la syntaxe. Nous souhaitons maintenant afficher les clients du plus ancien au plus jeune. Le mot clé
ORDER BY suivi du
nom du champ permet de réaliser un
tri dans une
requête . Son expression doit toujours être placée en dernier, avant le
point-virgule de clôture de la syntaxe.
Revenir dans l'éditeur SQL ,
Ajouter l'expression de tri avant le point virgule : ORDER BY Clients.[Clients_dateN] ,
Cliquer sur le bouton Exécuter ,
Nous obtenons bien un tri croissant des clients sur leur date de naissance :
SELECT * FROM Clients ORDER BY Clients.[Clients_dateN]; . Si nous avions souhaité un
tri décroissant , du plus jeune au plus ancien, nous aurions ajouté le mot clé
DESC :
ORDER BY Clients.[Clients_dateN] DESC . Nous souhaitons n'afficher maintenant que les clients de l'Ardèche, soit les clients dont le code postal commence par 07. Nous en avons deux. Pour ajouter un
critère dans une
requête , nous allons devoir insérer une
clause WHERE dans la
syntaxe . Nous ne pouvons pas utiliser le symbole égal pour la correspondance car aucun des codes postaux n'est égal 07. Nous allons utiliser l'opérateur
LIKE pour signifier que nous recherchons tous les
champs qui commence par
07 . La
clause WHERE intervient toujours après la
clause FROM suivi du nom de la table.
Revenir dans l'éditeur SQL ,
Ajouter la clause WHERE suivante : WHERE Clients.[Clients_cp] LIKE '07*' , après la clause FROM ,
Nous demandons désormais d'afficher les clients pour lesquels (
WHERE ) le code postal commence par 07. Comme le code postal est un
champ texte , nous écrivons l'expression entre
guillemets . Le
* placé juste derrière signifie, quels que soient les caractères qui suivent le 07 :
SELECT * FROM Clients WHERE Clients.[Clients_cp] LIKE '07*' ORDER BY Clients.[Clients_dateN]; .
Cliquer sur le bouton Exécuter ,
Il ne nous reste en effet plus que deux enregistrements, ceux de l'Ardèche,
triés croissants sur la date de naissance. Avec quelques petites retouches dans la
syntaxe SQL nous avons donc bien réussi à personnaliser notre
requête .
Fermer la requête en cliquant sur la croix de son onglet.
Requête de non correspondance
La
requête de
non correspondance est proposée dans la liste de l'
assistant requête . Comme son nom l'indique, elle permet d'isoler avec grande simplicité les
enregistrements orphelins . Dans notre cas, nous avons des clients dans la
table Clients qui passent des commandes dans la
table Commandes . Or certains de ces clients n'ont à ce jour encore passé aucune commande. Nous devons les extraire, pour les relancer commercialement par exemple. La requête est d'autant plus efficace que la base est volumineuse. Son code, si nous devions la concevoir nous même serait complexe.
Cliquer sur le bouton Assistant requête dans le ruban Créer ,
Dans la boîte de dialogue, sélectionner Assistant requête de non correspondance et cliquer sur Ok,
Dans l'étape qui suit, sélectionner la table Clients ,
Et cliquer sur Suivant,
C'est en effet elle qui contient les enregistrements Orphelins que nous souhaitons débusquer.
Dans cette nouvelle étape, sélectionner la table Commandes ,
Et cliquer sur Suivant,
C'est en effet elle la table liée, qui permettra de définir qui n'a pas passé de commande. Dans l'étape qui suit, nous devons confirmer à Access quel est le lien entre les clients et leurs commandes.
Sélectionner le champ Clients_num sur la partie gauche, il s'agit de la clé primaire ,
Sélectionner le champ Commandes_client sur la partie droite, il s'agit de la clé externe ,
Cliquer sur le bouton à deux flèches sur la partie centrale de la boîte de dialogue,
Nous réaffirmons ainsi le lien entre les deux tables.
Cliquer sur le bouton Suivant ,
Cette avant dernière étape demande quelles sont les informations à afficher concernant les clients qui n'ont pas passé de commande. Nous les voulons toutes.
Cliquer sur le bouton à deux flèches sur la partie centrale,
Cliquer sur Suivant,
Enfin, nommer la requête Clients_sans_commandes et cliquer sur Terminer .
Dans une vue
Feuille de données , nous obtenons effectivement les clients n'ayant jamais passé commande. Ce traitement est d'autant plus intéressant qu'à chaque exécution de la
requête , la liste est susceptible d'évoluer si les contenus des
tables Clients et
Commandes évoluent eux-mêmes. Si vous ouvrez la
table Commandes en mode
Feuille de données , vous constaterez bien que les clients concernés n'ont jamais passé commande (
Champ Commandes_client ).
Les requêtes paramétrées
Il s'agit de requêtes spécifiques pour lesquels nous entrons volontairement un argument erroné. Ainsi au moment de s'exécuter,
Access demande des précisions sur cet argument. Nous lui fournissons, et nous isolons ainsi la ligne en instantané. Imaginez que vous souhaitez, derrière votre caisse, retrouver rapidement les informations d'un client qui est en face de vous au moment de payer. Vous n'allez par parcourir toute la
table à sa recherche, ou refaire une
requête sous ses yeux. Non, vous allez exécuter une
requête toute prête qui demande simplement le nom du client à afficher. Le plus simple est de partir d'une
requête existante,
Commandes_du_client et de fournir un critère impécis sur son nom de manière à amener
Access à poser la question.
Cliquer avec le bouton droit de la souris sur la requête Commandes_du_client dans le volet de gauche,
Dans le menu contextuel, cliquer sur Mode création ,
Supprimer le critère >1 dans le champ Compte De Commandes ...,
Dans la zone Critères du champ Clients_nom , taper : [Nom du client ?] ,
Les
crochets sont impératifs. Ils signifient Ã
Access qu'il s'agit d'un paramètre à définir.
Cliquer sur le bouton Exécuter du ruban,
Comme vous le remarquez une boîte de dialogue se déclenche avec le message que vous avez personnalisé entre crochets.
Taper un nom de client ayant passé commande comme Decajou,
La casse n'est pas importante.
Valider en cliquant sur Ok,
Vous obtenez l'information isolée en instantané.
Fermer la requête en cliquant sur la croix de son onglet.
Les requêtes Action
Requête Mise à jour ou Update
Les
requêtes Action sont celles qui agissent sur les données des
tables . Elles ne se contentent plus de les sélectionner pour en offrir une vue personnalisée, elles les modifient. Nous allons d'abord réaliser une copie de la
table Clients sur laquelle nous allons faire les manipulations avec les
requêtes Action .
Sélectionner la table Clients dans le volet de gauche des objets Access ,
Réaliser les raccourcis CTRL + C puis CTRL + V au clavier,
Dans la boîte de dialogue qui apparaît, cliquer sur Ok.
La copie de la
table apparaît dans la
liste des tables du volet de gauche.
Faire de même avec la table Commandes pour obtenir une copie,
Cliquer sur l'onglet Créer ,
Cliquer sur le bouton Création de requête du ruban Accueil ,
Cette fois, nous ne passons pas par l'assistant.
Dans la boîte de dialogue qui apparaît, double cliquer sur la table Copie de Commandes pour l'ajouter,
Puis cliquer sur le bouton Fermer de la boîte de dialogue.
Nous sommes de retour dans le
mode création d'une
requête .
Dans le rectangle schématisant la table, cliquer sur le premier champ pour le sélectionner,
Puis, en maintenant la touche MAJ enfoncée, cliquer sur le dernier,
Ainsi vous sélectionnez tous les
champs de la
table .
Cliquer et glisser cette sélection sur la grille de requête en bas de fenêtre.
Ainsi vous ajoutez tous les champs de la table Commandes dans la zone de requête.
A ce stade, si vous cliquez sur le bouton
Exécuter , vous n'obtiendrez rien de plus qu'une vue de la table Commandes. Soit une basique requête sélection. Nous souhaitons appliquer une remise de 10% aux clients dont le montant de la commande dépasse 100 Euros.
Dans le ruban, cliquer sur le bouton Mise à jour ,
Vous transformez ainsi votre requête en
requête action , précisément
mise à jour ou
Update en langage
Sql . Vous remarquez que les lignes
Afficher et
Tri disparaissent au profit notamment de la ligne
Mise à jour .
Dans la zone Critères du champ Commandes_total , taper >100 ,
Dans la zone Mise à jour du même champ, taper l'expression [Commandes_total]*0,9 ,
Nous venons donc d'indiquer à Access de faire une remise de 10% (1-0,1=0,9) sur le champ Commandes_total lorsque le montant est >100.
Cliquer sur le bouton Exécuter ,
Un message d'avertissement Access apparaît. Il vous informe que quatre lignes de la table sont concernées et que vous allez les modifier.
Cliquer sur Oui pour continuer.
Vous remarquez que l'exécution s'arrête. En effet, une requête Action n'affiche pas de vue mais elle agit.
Afficher les tables Commandes et Copie de Commandes ,
Basculer de l'une à l'autre.
Vous remarquez effectivement que tous les montants supérieurs à 100 ont été remisés de 10%. Attention, à chaque fois que vous exécuterez cette requête, les montants supérieurs à 100% subiront une nouvelle remise de 10%. Dans certains cas, il est préférable de supprimer ces requêtes après action.
Fermer cette requête en cliquant sur la croix de son onglet.
Si vous choisissez d'enregistrer la requête, vous la voyez apparaître dans le volet de gauche avec son icône de
mise à jour pour bien la distinguer des autres.
Requête Suppression ou Delete
Nous souhaitons maintenant mettre en oeuvre une autre
requête action dans le but d'épurer la
table Clients en supprimant les
clients de l'Ardèche , pour cause de délocalisation par exemple.
Cliquer sur le bouton Création de requête du ruban Créer ,
Dans la boîte de dialogue, double cliquer sur la table Copie de Clients pour l'ajouter,
Fermer la boîte de dialogue,
Comme précédemment, ajouter tous les champs de la table dans la zone de requête ,
Cliquer sur le bouton Suppression du ruban,
Vous transformez votre requête en
requête Suppression . La ligne
Tri est remplacée au profit de la ligne
Supprimer . Si vous exécutez la requête en l'état, vous supprimerez tous les
enregistrements de la table dans la mesure où aucune restriction n'est posée.
Dans la zone Critères du champ Clients_cp , taper 07* et enfoncer la touche tabulation pour valider,
Vous remarquez qu'Access transforme instantanément l'expression en
Comme '07*' qui est l'équivalent du
LIKE '07*' que nous avons abordé plus haut avec le
langage SQL . Cette requête est donc censée supprimer tous les clients dont le code postal commence par 07.
Cliquer sur le bouton Exécuter ,
Dans le message, Access vous informe que vous allez supprimer des enregistrements, cliquer sur Oui ,
L'exécution s'arrête. Encore une fois, une requête action agit sur les données mais ne les affiche pas. Si vous cliquez de nouveau sur le bouton Exécuter, Access vous informe qu'il n'y a plus d'enregistrements à supprimer. Ceci semble indiquer que le requête a fonctionné.
Enregistrer la requête sous le nom Suppression_clients_07 ,
La fermer en cliquant sur la croix de son onglet.
Elle apparaît désormais dans le volet de gauche accompagnée de son icône de suppression pour bien la distinguer.
Afficher les tables Clients et Copie de Clients.
En basculant de l'une à l'autre, vous remarquez qu'il ne reste plus que les codes postaux en 26 dans la copie.