Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Exercice Access sur les requêtes sélection
Les
requêtes constituent un outil précieux et fondamental d'
Access. Elles permettent de manipuler l'information. L'objectif peut consister à extraire des données spécifiques. Mais elles peuvent aussi être utilisées pour ajouter, modifier ou supprimer des informations. En outre, on les exploite pour articuler les différents
objets Access entre eux. Par exemple, en récoltant un
critère dynamique issu d'un
formulaire, elles livrent des résultats correspondant à la demande à l'instant T. Dans ce premier exercice, nous abordons les
requêtes les plus classiques. Il s'agit des
requêtes sélection. Nous allons y aborder les subtilités permettant de filtrer et extraire des données, sur des choix précis.
Base de données source
Pour manipuler les données et poursuivre la construction de l'application initiée lors des exercices précédents, nous devons commencer par récupérer notre
base de données.
Nous retrouvons les 6
tables que nous avons configurées et paramétrées lors des exercices précédents. Elles sont listées dans le
volet des objets Access, sur la gauche de l'écran.
- Double cliquer sur la table Clients pour afficher son contenu en mode feuille de données,
Les clients de l'entreprise y sont décrits sur plusieurs champs comme la civilité, le nom, le prénom ou encore le code postal et la ville. Les
requêtes seront précieuses pour isoler l'information et offrir des vues de synthèse correspondant aux besoins statistiques.
Les
tables Commandes et
Detail_commandes sont vides pour l'instant. Elles serviront à archiver toutes les commandes passées par ces clients. Souvenez-vous, dans le dernier exercice, nous avons établi les
relations entre ces tables. Bien sûr, elles préservent l'intégrité des données. Mais elles permettent aussi de les lier. C'est ainsi qu'à partir d'un client, nous pouvons réceptionner toutes ses commandes et pour chacune, accéder à son détail.
La
table Commmunes énumère toutes les villes pour les codes postaux de la région Paca, soit le secteur d'activité de la société.
- Dans le volet des objets Access, double cliquer sur la table Produits pour afficher son contenu,
Cette table archive tous les produits du magasin. Ces articles proposés à la vente sont décrits sur 7 champs.
Enfin la
table Remises sera exploitée comme relai lors d'opérations promotionnelles. C'est elle qui définit les taux de remise à accorder sur les produits qu'il s'agira de désigner.
Requêtes et sélections
Nous proposons de découvrir le mécanisme et l'intérêt des
requêtes en douceur. Dans un premier temps, nous souhaitons manipuler les informations de la
table Clients. Nous voulons une vue de tous les clients mais sur un niveau de détail restreint. Seuls la civilité, le nom et la ville de chaque client doivent être restitués.
- Fermer les tables précédemment ouvertes en cliquant sur la croix de leur onglet,
- En haut de la fenêtre Access, cliquer sur l'onglet Créer pour activer son ruban,
- Dans la section Requêtes du ruban, cliquer sur le bouton Assistant Requête,
La boîte de dialogue de l'
assistant requête se déclenche. Elle offre plusieurs propositions sur la nature de la
requête à construire. Certaines sont fort précieuses pour corriger des anomalies. Nous aurons l'occasion de les présenter au cours des différents exercices.
- Conserver le choix par défaut (Requête simple) et cliquer sur le bouton Ok,
Dans l'étape qui suit, nous devons commencer par définir à partir de quelle table nous souhaitons extraire l'information. Puis, nous devons spécifier le niveau de détail en mentionnant les champs.
- Avec la liste déroulante, choisir la table Clients,
- Dans la liste de gauche, sélectionner le champ Client_civilite,
- Au centre de l'interface, cliquer sur le bouton de la flèche orientée vers la droite,
Ainsi, nous basculons le champ désigné dans la liste de droite. Nous indiquons à Access que nous souhaitons restituer le détail de l'information sur ce champ.
- Faire de même avec les champs Client_nom et Client_ville,
Nous excluons donc de l'extraction les champs Client_id, Client_prenom et Client_dep.
- Cliquer sur le bouton Suivant pour poursuivre,
Nous atteignons déjà la dernière étape de l'
assistant requête. Il s'agit de lui attribuer un nom. Et ces noms doivent être explicites, tant que possible.
- La nommer R_Clients et cliquer sur le bouton Terminer,
Le
résultat de l'extraction apparaît aussitôt en mode feuille de données. Il s'agit d'une vue semblable à celle des
tables. D'ailleurs une
requête sélection n'est ni plus ni moins qu'une table spécifique. En guise d'extraction, nous proposons ici une
vue filtrée des enregistrements. Nous n'avons en effet posé aucun critère. Nous avons défini un niveau de restriction sur les champs afin d'offrir une vue simplifiée de l'ensemble des clients.
Vous notez l'apparition de la requête, repérée par son nom, dans le
volet des objets Access. Par défaut, ces objets sont regroupés par catégories. Cette organisation permet de simplifier la navigation au travers des différents objets de l'
application Access. Et ils seront nombreux à l'issue. Souvenez-vous, nous souhaitons bâtir une véritable
application de facturation, au fil de la progression au travers des exercices. Il est possible de replier ou de déployer une catégorie en cliquant directement sur son nom.
Comme nous l'avons dit, cette
requête se contente de restreindre le niveau de détail en colonnes. Elle ne réorganise pas les données et les filtre encore moins.
Trier les données
Une
requête peut être adaptée, ajustée ou améliorée après sa construction. Nous souhaitons conserver cette vue restrictive tout en restituant les enregistrements classés par ordre alphabétique sur le nom des clients.
- En haut de la fenêtre Access, cliquer sur l'onglet Accueil pour afficher son ruban,
- Tout à fait à gauche du ruban, cliquer sur la flèche du bouton Affichage,
- Dans la liste, choisir Mode création,
Nous basculons dans la vue de l'
éditeur de requête. A l'avenir, nous l'exploiterons pour créer manuellement nos
requêtes. Il offre beaucoup de souplesse et de puissance. La table et ses champs sont représentés dans une vue schématique. Les champs sélectionnés pour produire l'extraction sont placés sur la grille de requête, située juste en-dessous. Pour ajouter un niveau de détail, il suffit simplement de glisser l'un des champs manquants, depuis la vue schématisée vers la grille de requête.
Vous notez la présence de différentes zones permettant de manipuler les données à extraire, comme Tri, Afficher et Critères.
- Double cliquer dans la zone Tri pour le champ Client_nom,
Cette action (Cf. figure ci-dessus) a pour effet d'ordonner une organisation alphabétique croissante des données sélectionnées sur le nom. Si vous double cliquez de nouveau dans cette zone, vous ordonnez un tri décroissant.
- Enregistrer les modifications (CTRL + S),
- Puis, à gauche du ruban contextuel Créer, cliquer sur le bouton Exécuter,
Les mêmes données que précédemment sont restituées. Nous récupérons en effet les 34 enregistrements des 34 clients de cette table. Mais cette fois, elles sont en effet réorganisées.
Pour classer les éventuels homonymes, nous aurions pu ordonner un second niveau de tri sur la ville. Pour un même nom, nous aurions ainsi affiché en priorité le client habitant la ville commençant le plus tôt dans l'alphabet.
Critères de sélection
Il est temps d'entrer dans le vif du sujet. L'une des fonctions essentielles des
requêtes est de permettre l'
extraction sélective des données. Il s'agit de restituer seulement l'information correspondant à un ou plusieurs
critères. Nous souhaitons dans un premier temps isoler tous les clients femmes. En d'autres termes, nous voulons exclure les hommes. Ce type de
requête donne une idée sur la proportion des clients selon leur sexe. Les opérations commerciales ciblées en sont l'enjeu majeur.
- Cliquer sur la croix de l'onglet pour fermer la requête R_Clients,
- En haut de la fenêtre Access, cliquer sur l'onglet Créer pour activer son ruban,
- Dans la section Requêtes du ruban, cliquer cette fois sur le bouton Création de requête,
- Dans la boîte de dialogue qui apparaît, sélectionner la table Clients,
Toutes les
tables sont en effet listées. Il est donc possible d'extraire de l'information recoupée sur plusieurs tables. Mais il est aussi possible de bâtir des requêtes sur des requêtes, comme l'indiquent les onglets. Cette méthode permet de recouper des critères sur la base de conditions déjà émises, afin d'affiner les résultats de l'extraction.
- Puis, cliquer sur le bouton Ajouter et sur le bouton Fermer,
Nous sommes de retour dans l'éditeur de requête. Cette fois, nous allons la construire manuellement.
- Dans la vue schématisée de la table, sélectionner les champs Client_civilité, Client_nom et Client_ville à l'aide de la touche CTRL,
- Puis, glisser la sélection sur la grille de requête située juste en-dessous,
Nous retrouvons l'état auquel nous avons abouti précédemment à l'aide de l'assistant. Pour l'instant, nous restreignons simplement le niveau de détail sur les champs.
- Dans la zone Critères du champ Client_civilite, saisir : Madame ,
- Puis, double cliquer dans la zone Tri du champ Client_nom,
Comme précédemment, nous ordonnons une organisation alphabétique croissante sur le nom pour les données restituées. Mais cette fois, nous imposons en plus une restriction sur le champ Client_civilite.
- Enregistrer la requête (CTRL + S) sous le nom R_Clients_Femmes,
- Puis, cliquer sur le bouton Exécuter dans le ruban contextuel Créer,
Nous produisons bien l'
extraction sélective des données selon le critère imposé sur la civilité. De plus, les enregistrements résultants sont triés par ordre croissant sur le nom de famille. En consultant la barre de navigation en bas de la requête, nous remarquons que nous avons isolé 16 clients sur les 34 de départ. Les femmes sont donc légèrement minoritaires par rapport aux hommes.
Il est intéressant de comprendre que les résultats livrés par une
requête sont dynamiques. Si la table source venait à évoluer, par l'inscription de nouveaux clients, ils seraient considérés par la requête à sa prochaine exécution. Ainsi les résultats de l'extraction s'adaptent et évoluent.
Requête Multicritère
L'un des intérêts des
requêtes Access est de pouvoir recouper les conditions. L'objectif est de fournir des extractions affinées et précises, répondant aux besoins statistiques à l'instant T. Nous souhaitons par exemple connaître le nombre de femmes clientes issues du département du var, soit du 83.
- Dans le ruban Accueil, cliquer sur la flèche du bouton Affichage,
- Dans la liste, choisir Mode création,
Nous sommes de retour dans l'
éditeur de requête. Nous devons recouper le critère posé sur la civilité avec une condition sur le code postal.
- Dans la représentation schématique de la table, double cliquer sur le champ Client_dep,
Cette action a pour effet d'ajouter le
champ Client_dep à la suite, dans l'énumération de la grille de requête.
- Dans la zone Critères du champ Client_dep, taper le nombre 83,
- Enregistrer les modifications (CTRL + S) et cliquer sur le bouton Exécuter dans le ruban,
A notre grande surprise, la
requête ne produit aucune extraction de données. La raison est pourtant simple. Le
champ Client_dep, malgré son nom, archive des codes postaux. Et les codes postaux sont codés sur 5 chiffres. Aucun ne peut donc être strictement égal au nombre 83. Nous devons bâtir une condition capable d'extraire tous les enregistrements pour lesquels le code postal commence par ces deux chiffres.
- Dans le ruban Accueil, cliquer sur la flèche du bouton Affichage,
- Dans la liste, choisir Mode création,
- Dans la zone Critères du champ Client_dep, remplacer la condition par la suivante : Comme '83*',
Comme est un opérateur qui porte bien son nom. Le critère quant à lui est inscrit entre guillemets. Le champ sur lequel il agit est effectivement textuel. Dans le cas où il est suivi d'une étoile comme ici, il signifie littéralement :
Commençant par 83. Si nous l'avions inscrit en préfixe (*83), nous aurions demandé à extraire tous les enregistrements pour lesquels le code postal se termine par 83. Si nous l'avions inscrit de part et d'autre (*83*), nous aurions souhaité extraire tous les clients dont le code postal contient la suite de ces deux chiffres. Cet
opérateur Comme est l'équivalent de l'
opérateur SQL Like. Le
SQL est un langage de requêtage parfaitement structuré permettant d'extraire aisément les données d'une base de données. Nous l'effleurerons bientôt.
- Dans le ruban contextuel Créer, cliquer sur le bouton Exécuter,
Seuls 6 enregistrements résultent cette fois de cette extraction, fruit de critères recoupés. Et il s'agit bien uniquement des femmes pour le département du Var.
Opérateurs ET et OU
Les conditions peuvent donc être recoupées comme nous venons de le voir. Mais plusieurs critères peuvent être posés sur un même champ. Nous souhaiterions cette fois extraire toutes les femmes pour les départements du Var et des bouches du Rhône. Mais contrairement à la formulation de l'hypothèse, un même département ne peut pas à la fois débuter par le nombre 83 et par le nombre 13. Il peut débuter soit par l'un, soit par l'autre. La grille de requête prévoit précisément d'empiler les critères traduisant ces conditions non exclusives, tel que le ferait l'opérateur OU (Ou bien le 83, ou bien le 13).
- Revenir en mode création de la requête,
- Dans la zone Ou du champ Client_dep, juste en dessous de sa zone Critères, ajouter la condition suivante : Comme '13*',
Nous pourrions continuer d'empiler les conditions les unes en dessous des autres pour extraire d'autres enregistrements issus d'autres départements. Comme vous le constatez, l'éditeur de requête apporte beaucoup de souplesse pour fabriquer des sélections chirurgicales.
- Cliquer sur le bouton Exécuter dans le ruban contextuel Créer,
La liste des enregistrements s'allonge puisque nous obtenons une extraction de 14 clients cette fois. Mais elle est accompagnée d'une petite surprise. Tous les enregistrements correspondent bien aux clients pour les deux départements du 83 et du 13. Mais des hommes apparaissent.
La raison est simple en effet. Tous les critères énumérés sur une même ligne agissent de façon exclusive. Ils doivent être strictement recoupés, contrairement aux critères énumérés sur des lignes différentes qui empilent les résultats. Ainsi, pour la première ligne de conditions, nous cherchons bien à extraire tous les clients pour lesquels la civilité est Madame et pour lesquels le département commence par le nombre 83. Mais sur la seconde ligne de critère, nous ne précisons plus la civilité. En conséquence, nous additionnons à cette extraction, tous les enregistrements pour lesquels le département commence par 13 et ce, quelle que soit la civilité.
- Revenir en mode création de la requête,
- Dans la zone Ou du champ Client_civilite, ajouter de nouveau le critère : 'Madame',
Donc, si nous souhaitions additionner les femmes d'un autre département, sur la ligne du dessous, nous devrions ajouter les deux conditions dans les champs respectifs.
- Cliquer sur le bouton Exécuter dans le ruban contextuel Créer,
Cette fois, l'extraction est conforme. Elle ne livre plus que 11 enregistrements. Et il s'agit bien uniquement des femmes pour les départements 13 et 83.
Précédemment, nous avions choisi de restreindre le niveau de détail en sélectionnant les champs à afficher pour la restitution. Ce n'est pas parce qu'un champ est utilisé comme contrainte, qu'il doit nécessairement être affiché.
- Revenir en mode création de la requête,
- Décocher la case du champ Client_dep puis exécuter de nouveau la requête,
Vous le constatez, les 11 mêmes enregistrements sont restitués. Mais cette fois, l'information sur le code postal est masquée.
- Revenir en mode création de la requête,
- Cocher de nouveau la case du champ Client_dep,
Pour comprendre les subtilités sur la manipulation des données par les requêtes, nous souhaitons cette fois extraire toutes les femmes habitant dans les départements du 04 (Alpes de haute Provence), du 05 (Hautes Alpes) et du 06 (Alpes Maritimes). Nous pourrions, comme précédemment, recouper les conditions sur la civilité et le département sur une même ligne et enchaîner les suivantes sur les lignes du dessous. Mais comme ces départements se suivent et bien qu'ils soient considérés comme des textes, nous pouvons raisonner avec les opérateurs numériques d'inégalité. Vous allez le constater, cette méthode permet de simplifier la conception de la requête.
- Supprimer le critère 'Madame' dans la zone Ou du champ Client_civilite,
- Supprimer le critère Comme '13*' dans la zone Ou du champ Client_dep,
- Dans la zone Critères du champ Client_dep, remplacer la condition par la suivante : >='04000' Et <'07000',
Même si vous ne saisissez pas les guillemets,
Access les ajoute automatiquement en raison du typage textuel de ce champ. Mais une fois encore, dans l'ordre alphabétique, le 0 intervient devant le 1 qui intervient devant le 2 est ainsi de suite.
- Cliquer sur le bouton Exécuter dans le ruban contextuel Créer,
5 enregistrements sont extraits. Et il s'agit bien seulement des femmes pour les trois départements désirés.
- Revenir en mode création de la requête,
L'
opérateur Et remplace donc l'énumération des critères sur la même ligne, dans le cas d'un même champ comme ici. Mais maintenant que nous avons compris le mécanisme, nous savons que nous aurions pu nous en passer. Pour cela, il suffit de doubler le
champ Client_dep et sur la même ligne, de recouper le premier critère par une seconde condition.
Extraction de données sur des critères numériques
Bien sûr le principe est encore plus simple, mais les résultats de conditions posées sur des champs numériques sont précieux.
- Enregistrer la précédente requête et la fermer,
- En haut de la fenêtre Access, cliquer sur l'onglet Créer pour activer son ruban,
- Dans la section Requêtes, cliquer sur le bouton Création de requête,
- Dans la boîte de dialogue qui apparaît, sélectionner la table Produits,
- Puis, cliquer sur le bouton Ajouter et sur le bouton Fermer,
- Dans la représentation de la table, double cliquer sur le symbole de l'étoile,
Ce symbole, comme dans le
langage Sql, représente tous les champs de la table. Cette action a donc pour effet de les intégrer tous dans les résultats de l'extraction. En outre, cette méthode permet de gagner du temps et n'empêche pas de poser des conditions sur des champs choisis.
- Enregistrer la requête (CTRL + S) sous le nom R_Stocks_faibles,
A terme, nous souhaitons en effet l'exploiter pour mettre en évidence tous les articles qui doivent être approvisionnés rapidement.
- Cliquer sur le bouton Exécuter dans le ruban contextuel Créer,
Nous obtenons une vue strictement identique à celle de la
table Produits. D'ailleurs, ses 245 enregistrements sont extraits, avec le niveau d'information sur tous les champs, grâce au symbole de l'étoile. En effet, nous n'avons pour l'instant émis aucune restriction puisque nous n'avons posé aucun critère.
Nous souhaitons alerter les administrateurs sur tous les produits dont la quantité en stock est inférieure à sept unités. Et pour renforcer la pertinence, il paraît judicieux de trier le résultat de l'extraction sur le
champ produit_stock, dans l'ordre croissant, soit du plus petit au plus élevé.
- Revenir en mode création de la requête,
- Dans la vue schématisée de la table, double cliquer sur le champ produit_stock,
- Sur la grille de requête, décocher sa case,
- Puis, dans sa zone Critères, saisir la condition suivante : <7,
Ce critère est donc fort simple. Cette fois, les guillemets n'apparaissent pas fort logiquement. Ce champ est bien numérique. Et sur ce type de champ, les conditions peuvent naturellement s'empiler ou se recouper comme nous l'avons appris précédemment.
- Cliquer sur le bouton Exécuter dans le ruban contextuel Créer,
L'extraction produit 142 enregistrements sur les 245 d'origine. Malgré tout, les articles en faible quantité sont donc nombreux. Pour envisager un réassort intelligent, il est préférable d'orienter l'approvisionnement en priorité sur les produits les plus populaires. Le
champ produit_vues renseigne sur la fréquentation de la fiche de l'article.
- Revenir en mode création de la requête,
- Double cliquer sur le champ produit_vues pour l'intégrer dans la grille de requête,
- Décocher sa case puisqu'il est déjà considéré par le symbole de l'étoile,
- Dans sa zone Critères, saisir la condition : >2000,
- Enregistrer les modifications et exécuter de nouveau la requête,
Il ne reste désormais plus que 82 enregistrements soit 82 articles à traiter prioritairement. Vous l'avez compris, les conditions sont simples à combiner et recouper grâce à l'éditeur de requête. Si les critères sont pertinents et judicieusement croisés, ils permettent des extractions fines. Et ces extractions sont précieuses pour l'entreprise. Elles offrent des interprétations justes pour anticiper au mieux toutes les actions à entreprendre.
Requête Equijointure
Pour parachever la présentation des
requêtes sélection, nous proposons de démontrer l'intérêt et la puissance d'une
requête tout à fait particulière. On la nomme
requête équijointure. Il s'agit d'une
requête multitable. Et comme son nom l'indique, elle permet d'extraire tous les enregistrements pour lesquels la correspondance est établie, entre deux champs de deux tables respectives.
Vous l'avez sans doute constaté, la
table Produits propose un champ nommé
produit_code. Lorsqu'un chiffre est inscrit dans ce champ, il indique que l'article est en promotion. Ces codes sont issus de la
table Remises. Ils correspondent à des taux de remise différents.
- Enregistrer et fermer la précédente requête,
- Cliquer sur l'onglet Créer en haut de la fenêtre Access,
- Dans la section Requêtes du ruban, cliquer sur le bouton Création de requête,
- Dans la boîte de dialogue qui suit, sélectionner ensemble les tables Produits et Remises,
- Puis, cliquer sur le bouton Ajouter et sur le bouton Fermer,
Les deux tables schématisées apparaissent. Et vous notez le lien qui existe entre les
champs produit_code et
Remise_id. Il s'agit de la relation que nous avons établie entre ces deux tables, lors du dernier exercice
Access. La
jointure existe donc naturellement.
- Double cliquer sur le symbole de l'étoile de la table Produits pour intégrer tous ses champs dans la sélection,
- Enregistrer la requête sous le nom : R_produits_remises,
- Puis, cliquer sur le bouton Exécuter dans le ruban contextuel Créer,
Seuls les enregistrements pour lesquels la correspondance est effectivement établie, sont extraits. Et sans avoir posé le moindre critère, nous constatons que seuls 2 articles sont en promotion, sur les 245 que contient la
table Produits.
Si cette
jointure n'existe pas, nous pouvons la créer, dans le cadre d'une requête pour établir la correspondance. La table Communes recense 1003 villes de la région PACA. Nous souhaitons seulement extraire celles dans lesquelles résident les clients de l'entreprise. Il s'agit donc d'établir la correspondance entre les noms des villes, en guise de critère.
- Fermer la précédente requête en cliquant sur la croix de son onglet,
- Cliquer sur l'onglet Créer en haut de la fenêtre Access,
- Dans la section Requêtes, cliquer sur le bouton Création de requête,
- Dans la boîte de dialogue, sélectionner les tables Clients et Communes,
- Puis, cliquer sur le bouton Ajouter et sur le bouton Fermer,
- Dans les représentations schématisées, glisser le champ Commune_nom sur le champ Client_ville,
L'ordre est important. Il est imposé par la table à partir de laquelle nous souhaitons extraire l'information. Dès lors, la
jointure apparaît matérialisée par un segment reliant les deux champs. Si vous double cliquez sur ce lien, vous affichez une boîte de dialogue. Cette dernière permet de paramétrer la correspondance choisie. La proposition par défaut est bien celle que nous souhaitons pour établir une correspondance stricte.
- Enregistrer la requête sous le nom R_communes_clients,
- Puis, l'exécuter,
L'extraction produit 57 enregistrements. Ce score est donc naturellement très inférieur aux 1003 communes recensées dans la
table Communes. Néanmoins, il est supérieur aux 34 personnes de la
table Clients. Cette anomalie s'explique par la présence des doublons de communes que nous avions évoqués dans les exercices précédents. Et ce sont des requêtes, plus spécifiquement des requêtes action, qui vont nous permettre de les éliminer. Nous les aborderons à l'occasion d'un prochain exercice.