Leçon 22 : Les requêtes : Les critères "Texte", <, >, <=, >=, Entre X Et Y, Et, Enregistrer Sous

Temps nécessaire pour suivre cette leçon : Entre vingt minutes et une demie heure

Pour suivre cette leçon, vous devez avoir suivi les leçons précédentes. Ou plus précisément, vous devez être en possession de la base de données ProFormation.mdb telle qu'elle était à la fin de la leçon précédente. Si vous n'êtes pas certain de l'avoir, vous pouvez la télécharger ici

Aperçu de cette leçon

Dans cette leçon, nous allons commencer à élaborer des requêtes plus intéressantes. Bon, au début, vous aurez un peu l'impression que finalement, l'utilisation des filtres dans les tables avec le bouton droit de la souris (leçon 19) est plus simple, mais petit à petit, vous apprécierez les requêtes au fur et à mesure de votre avancement.

Sommaire

  1. Critères de requête : Le simple "texte"
  2. Description conviviale des requêtes
  3. Critères de requête : >, <, >=, <=
  4. Trier dynamiquement une requête, comme nous l'avons fait avec les tables
  5. Critères de requête : Entre ... Et ...
  6. Critères de requête : Et
  7. Enregistrement d'une requête sous un autre nom

Grâce à une requête, je pourrais lister tous les sportifs par exemple ?


Critères de requête : Le simple "texte"

C'est un premier exemple simple : Nous allons le mettre en oeuvre : Créez une nouvelle requête basée sur T_Celebrite, et placez-y les champs Prenom, NomClient, et Domaine (Je suppose que vous savez bien faire ça maintenant, sinon, revoyez la leçon précédente).

Dans cette requête, en mode création, vous allez écrire sport dans le critère de la colonne Domaine, comme ceci : . Lorsque vous appuyez sur ENTER, ou simplement si vous cliquez dans une autre case, sport se met automatiquement entre guillemets : (Vous auriez pu installer les guillemets vous-même, mais puisqu'Access a la gentillesse de le faire à notre place, laissons-le !)

Pour constater le résultat de notre première requête un tant soit peu utile, lancez-là en mode saisie de données : . Vous avez la liste de tous les prénoms et le nom des célébrités dont le domaine = Sport. Il y en a 17 (le chiffre en bas, comme dans les tables). Remarquez également la petite diférence avec les extractions dans les tables (vous vous rappelez : Bouton droit de la souris/Filtrer pour): Il y avait le mot (Filtré) à côté du nombre d'enregistrements. Ici, il n'y a pas ce petit mot, parce que la requête est complète en tant que telle.

C'est vrai que c'est un filtre quelque part, mais comme il s'agit du résultat d'une requête, il indique 17 enregistrements, point final. Bon, c'est un détail, ne vous focalisez pas trop la dessus.

C'est marrant : On a écrit sport, et il a trouvé tous les Sport avec une majuscule...

Oui : Encore une fois, Access ne fait pas la différence entre majuscules et minuscules. Vous auriez écrit SPORT, sport, sPoRt ou Sport, comme critère, vous auriez toujours eu 17 réponses.

Et il ajoute chaque fois automatiquement des guillemets autour du critère ?

Si c'est du texte, oui. Nous verrons plus tard que s'il s'agit de dates, il ajoute des dièses #, et s'il s'agit de données numériques, il ne met carrément rien autour.

Mais ne vous préoccupez pas trop de savoir s'il faut mettre des guillemets ou pas puisqu'Access le fait à votre place.

Il me semblait qu'il y avait Jean Alési, le coureur automobile - sportif donc - dans notre liste de célébrités... Pourquoi n'apparait-il pas ?

Il est classé sous Chanson par erreur... Eh oui, encore une fois, voyez comme les erreurs de saisie sont dérangeantes... Vous pouvez vérifier que Jean Alési est bien classé sous chanson (laissez-le mal classé, ça nous permettra de constater d'autres erreurs tout au long du cours).

Maintenant, Enregistrez cette requête : appelez-là R_CelebriteSportive (R pour requête, Celebrite pour rappeler le nom de la table, et sportive pour préciser que c'est ce que la requête recherche. Pas de S a sportive pour garder la règle absolue : JAMAIS de pluriels dans les noms de tables ou de champs).

Si j'ai bien compris, si je quitte la requête, que je vais dans la table T_Celebrite, et que je modifie Chanson en Sport pour Jean Alési, et que je quitte la table pour revenir dans ma requête R_CelebriteSportive, il apparaîtra automatiquement et immédiatement ?

C'est excatement ça !


Description conviviale des requêtes

Bon... Pour reparler du nom de la requête R_CelebriteSportive, Ce n'est pas très convivial...
Avec les tables, ça ne me dérangeait pas vraiment parce qu'il n'y en a pas des tonnes, mais je suppose que des requêtes, il y en aura beaucoup plus que des tables, non ?

Oui. C'est vrai. Comme je vous l'ai déjà dit, nous allons garder des noms stricts pour nos requêtes, mais nous avons la possibilité de les décrire, de leur donner un petit nom sympathique pour mieux nous y retrouver : Quittez cette requête. Nous allons lui donner un meilleur nom : "Liste des célébrités sportives", mais vous n'aller pas renommer la requête, vous allez cliquer avec le bouton droit de votre souris sur R_CelebriteSportive, et choisir Propriétés . Vous arrivez dans cette boîte de dialogue : . Elle contient plusieurs renseignements : La date de création de la requête, son éventuelle date de modification, et, ce qui nous intéresse, une zone Description.

Ecrivez dedans : "Liste des célébrités sportives", et cliquez sur OK. Normalement, cette manipulation devrait vous rappeler des souvenirs : Nous avons déjà vu ça lors de la leçon 12.

Ici, justement, nous allons bien exploiter cette manière de faire pour non pas inscrire une description conviviale de chaque requête, mais plutôt la manière que nous avons utilisé pour obtenir tel ou tel résultat.

Justement, pour cette requête, donnez comme description Domaine = "sport" : , et cliquez sur OK. Demandez l'affichage complet (revoyez la leçon 12 si vous avez besoin de vous rafraîchir la mémoire). L'icone à cliquer est celui-ci : . Comme ça, vous visualiserez la liste des requêtes comme ceci : , ce qui fait que quand nous aurons fait un grand nombre de requêtes, vous verrez comme description une sorte de petit résumé des critères que nous aurons utilisé, et ça vous servira comme une sorte de "dictionnaire syntaxique" : Vous n'aurez plus qu'à consulter votre liste de requêtes et leur description pour vous donner des idées pour la création d'autres requêtes, ou comme aide-mémoire.


Critères de requête : >, <, >=, <=

C'est une bonne idée ! Maintenant, j'aimerais créer une requête qui me sort tous les gens qui gagnent plus de 25'000 francs par mois

D'accord. Créez une nouvelle requête, toujours basée sur T_Celebrite, placez-y les champs Prenom, NomClient, et SalaireMensuel.

Comme critère de SalaireMensuel, Ecrivez >25000 : . Si vous cliquez dans une autre case, vous verrez que cette fois, Access n'ajoute pas de guillemets, c'est normal : il s'agit d'un champ numérique (Monétaire très exactement). Lancez la requête en mode saisie de données : Vous devriez voir 22 enregistrements : Tous les gens qui gagnent plus de 25000 francs par mois.

Et ceux qui gagnent exactement 25000 francs, ils apparaissent ?

Non, parce que nous avons demandé >25000. Mettez plutôt >=25000, ça les inclura. Combien en trouvez-vous ?

23 maintenant..

Qui est apparu en plus ?


Trier dynamiquement une requête, comme nous l'avons fait avec les tables

Il faut que je lise tout pour le trouver ! Ils ne sont pas classés en ordre !

Oui, mais vous pouvez très bien, comme dans les tables, cliquer avec le bouton droit de votre souris et choisir "Ordre croissant" , ce sera plus facile : Les montant les plus bas seront ainsi en tête de liste

C'est Al Pacino qui a été ajouté ! Et a partir de maintenant, ma requête va toujours afficher les données par ordre de grandeur des salaires ?

Pas du tout, c'est un simple tri dynamique, comme dans les tables : Dans les tables, lorsque vous demandiez des tris alphabétiques, ils n'étaient pas mémorisés non plus.

C'est juste. On peut demander à la requête de mémoriser le fait qu'elle doive toujours afficher les données par ordre croissant de salaire ?

Oui, mais nous verrons cela un peu plus tard.

Tout ce que je voulais vous montrer ici, c'est que les requêtes, tout comme les tables, peuvent se trier dynamiquement en utilisant le bouton droit de la souris.

Et si je voulais juste les gens qui gagnent exactement 25'000 francs par mois, j'écrirais =25000 ?

Là, il n'y aurait même pas besoin d'écrire le signe =. Le seul chiffre 25000 suffirait. Ne le faites pas. C'était juste une petite précision

Vous allez maintenant enregistrer cette requête sous R_CelebriteRiche, et comme commentaire pour cette requête, vous allez préciser : Salaire>=25000 (Donc bouton droit de la souris sur la requête, et propriétés)


Critères de requête : Entre ... Et ...

Et si maintenant je voulais extraire les gens qui gagnent entre 10'000 et 15'000 francs par mois ?

Essayons : Créez une nouvelle requête, toujours basée sur T_Celebrite, contenant les champs Prenom, NomClient et SalaireMensuel. Comme critère de salaire mensuel, écrivez littéralement : entre 10000 et 15000

Access comprend ça ?

Oui. Ca ne veut pas dire qu'il comprendra n'importe quoi, mais le mot "Entre" et "Et", il comprend. D'ailleurs, si vous cliquez dans une autre case, ou que vous appuyez sur Enter, vous allez constater qu'il met une majsuscule à "entre" et à "et" : Entre 10000 Et 15000

Est-ce qu'il prend également en compte les gens qui gagnent exactement 10'000 et 15'000 francs ?

Oui. Lancez la requête. Vous avez bien 24 personnes ?

Triez-les par ordre alphabétique (Bouton droit de la souris, Ordre croissant)

Ah oui. Il y a Liane Foly, Bruce Willis et Alberto Tomba qui sont aux limites. J'aurais pu exlure justement ceux qui sont aux limites ?

Oui. Avant ça, vous allez enregistrer cette requête sous R_CelebriteSalaireMoyen. Maintenant, nous allons faire une nouvelle requête pour justement voir comment faire pour exclure les gens qui gagnent exactement 10'000 et ceux qui gagnent exactement 15'000 francs.

On doit ENCORE créer une nouvelle requête... On ne peut pas simplement modifier celle-ci ?


Critères de requête : Et

Si vous voulez. Dans ce cas, restez dans cette requête que vous venez d'enregistrer, et remplacez votre critère Entre 10000 et 15000 par >10000 Et <15000

On demande tous ceux qui gagnent PLUS (>) que 10'000 ET MOINS (<) de 15'000 francs. Ce qui exclut les gens à la limite !

Oui. Lancez la requête. Vous avez bien 21 personnes au lieu de 24 ?

Absolument ! Ca joue parfaitement. On enregistre ?


Enregistrement d'une requête sous un autre nom

Oui, MAIS attention : Si vous cliquez sur la petite disquette , ou que vous faites Fichier/Enregistrer, vous allez écraser votre précédente requête R_CelebriteSalaireMoyen ! Ce n'est pas ce qu'on veut !

Bien sûr. "Fichier/Enregistrer Sous" alors ?

Exactement. Allez-y, et donnez-lui le nom R_CelebriteSalaireMoyen2: , et cliquez sur OK.

Quittez la requête, et donnez une description pour chacune de de ces deux nouvelles requêtes :

Bon... Hem... On peut résumer ?

Dans cette leçon, nous venons d'apprendre à utiliser quelques critères tels que < (inférieur à), <= (inférieur ou égal à), "sport" (recherche d'une chaîne de caractère précise), Entre 10000 Et 15000 (Recherche d'une fourchette de valeurs, les limites étant incluses), nous avons appris comment utiliser le mot Et accompagné des signes > et < pour exclure les valeurs limites, Et, et Enregistrer Sous un autre nom de requête.

Avez-vous bien compris ?

  1. Je crée une requête basée sur T_Celebrite, composée des champs Prenom, NomClient, et SalaireMensuel. Comme critère de SalaireMensuel, j'écris : >=20000
    a. J'obtiens tous les salaires égaux à 20000 francs
    b. J'obtiens tous les salaires supérieurs à 20000 francs
    c. J'obtiens tous les salaires différents de 20000 francs
    d. J'obtiens tous les salaires supérieurs ou égaux à 20000 francs ***

  2. Je crée une requête basée sur T_Celebrite, composée des champs Prenom, NomClient, et SalaireMensuel. Comme critère de SalaireMensuel, j'écris : >10000 Et <9000
    a. J'obtiens tous les salaires compris entre 9000 et 10000 francs, 9000 et 10000 étant exclus
    b. J'obtiens tous les salaires compris entre 9000 et 10000 francs, 9000 et 10000 étant inclus
    c. Je n'obtiens aucun résultat *** (la bonne formule étant >9000 Et <10000)

  3. Je crée une requête basée sur T_Celebrite, composée des champs Prenom, NomClient, et SalaireMensuel. Comme critère de SalaireMensuel, j'écris : 10000 Ou 9000
    a. J'obtiendrais tous les salaires égaux à 9000 et à 10000 exactement, s'il y en avait***
    b. J'obtiens tous les salaires compris entre 9000 et 10000 francs
    c. Je n'obtiendrais de toute façon aucun résultat

  4. Je crée une requête basée sur T_Celebrite, composée des champs Prenom, NomClient, et SalaireMensuel. Comme critère de Prenom, j'écris >10000
    a. J'obtiens tous les salaires supérieurs à 10000 francs
    b. J'obtiens tous les salaires supérieurs ou égaux à 10000 francs
    c. Je n'obtiens aucun résultat *** (Eh oui... ce n'est pas dans Prenom qu'on doit écrire >10000 !)

Pour voir les solutions, il vous suffit de sélectionner le questionnaire ci-dessus : 3 petites étoiles *** apparaîtront en face des bonnes réponses.

Exercice

Vous ferez l'exercice proposé directement dans votre base de données habituelle ProFormation. Il s'agit simplement de création de requêtes selon des critères bien définis. Chacune de vos requêtes devra obligatoirement contenir le "Prénom" et le "NomClient" de la table T_Celebrite, ainsi que d'autres champs en fonction de la demande :

  1. Créez une requête, basée sur T_Celebrite qui contiendra l'ensemble des gens qui ne gagnent rien du tout par mois
    Enregistrez cette requête sous R_CelebritePauvre
    Vous devriez obtenir 12 résultats
    Donnez-lui une description appropriée
  2. Créez une requête, basée sur T_Celebrite qui contiendra l'ensemble des gens gagnent exactement 9999 francs par mois
    Enregistrez cette requête sous R_CelebriteSalaire9999
    Vous devriez obtenir 0 résultat
    Donnez-lui une description appropriée
  3. Créez une requête, basée sur T_Celebrite qui contiendra l'ensemble des gens dont le domaine d'activité est Chanson
    Enregistrez cette requête sous R_CelebriteChanson
    Vous devriez obtenir 17 résultats
  4. Restez dans cette requête, et transformez-là en requête qui affiche l'ensemble des gens dont le domaine d'activité est Chanteuse
    Enregistrez cette requête sous R_CelebriteChanteuse
    Vous devriez obtenir 0 résultat
  5. Donnez des descriptions appropriées à R_CelebriteChanson et R_CelebriteChanteuse

Téléchargez la solution de l'exercice ici (qui n'est autre que ProFormation.MDB telle qu'elle devrait être à la fin de cette leçon)

Si vous n'êtes pas tout à fait certain d'avoir suivi correctement toutes les étapes de cette leçon, vous avez la possibilité de télécharger ici la version de ProFormation.mdb exactement dans l'état ou elle devrait être à la fin de cette leçon.

Avez-vous une question technique concernant cette leçon ? Cliquez ici !
Une remarque sur cette leçon ? Un problème ? Une erreur ? une ambiguité ? Soyez gentil de m'en informer