Leçon 24 : Requêtes/l'étoile *, le point d'interrogation ?, et <,> avec du texte

Temps nécessaire pour suivre cette leçon : Environ trois quarts d'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 voir comment extraire des parties de champs : Comment extraire l'ensemble des gens dont le nom commence par D ou F, comment extraire l'ensemble des prénoms qui se terminent par "ine", ou encore les gens dont le nom contiennent telle ou telle lettre, ou encore récupérer les gens dont le prénom comporte un certain nombre de lettres.
Nous verrons également comment utiliser les signes < et > également avec du texte.

Sommaire

  1. Critères de requête : L'étoile *, Comme
  2. Critère de requête : L'étoile * et le mot clé OU
  3. Critère de requête Le point d'interrogation ? permet d'avoir un certain nombre de caractères
  4. Le signe plus grand que > appliqué à du texte
  5. Utilisation de Entre ... Et ... avec du texte

Critères de requête : L'étoile *, Comme

Puis-je obtenir les gens dont le nom de famille commence par la lettre D ?

Oui. Essayons cela. Créez une nouvelle requête basée sur T_Celebrite, avec le Prénom et le NomClient. Comme critère de NomClient écrivez d* : . Lorsque vous appuyez sur ENTER ou que vous cliquez dans une autre case, ça se transforme en Comme "d*". C'est normal.

Lancez la requête. Vous avez bien 10 enregistrements, tout le monde ayant le nom qui commence par D ?

Oui. Une fois de plus, la majuscule n'est pas utile. l'étoile * sert donc à dire "n'importe quoi" ?

C'est ça. Du moment que le nom commence par D, il peut y avoir un nombre quelconque de caractères après, ça prendra.

Enregistrez cette requête sous R_CelebriteNomCommenceParD, et fermez-là. Donnez lui la description NomClient : Comme"d*"

Par exemple, si vous vouliez la liste de tous les gens dont le prénom se termine par la lettre e, comment feriez-vous ?

*e ?

Oui. Essayez. Créez une nouvelle requête comme d'habitude, demandez le Prénom et le Nom, et mettez *e comme critère de Prenom. Vous avez bien 22 enregistrement, tous les prénoms se terminant par e ?

Oui.

Enregistrez cette nouvelle requête sous R_CelebritePrenomTermineParE, et description : Prenom : Comme"*e"

Dans le même ordre d'idées, si je veux les gens dont le nom CONTIENT la lettre F quelque part dans leur nom, j'écrirais *f* ?

Oui. Faites-le : Créez une nouvelle requête qui va effectivement renvoyer ce résultat : : Tous les gens dont le nom de famille contient la lettre F, au début, au milieu ou à la fin. Enregistrez cette requête sous R_CelebriteNomContientF, et Description : NomClient : Comme "*f*"

Cette petite étoile * est très intéressante, car comme vous vous en souvenez certainement, nous avons été ennuyé lors de précédentes leçons (Notamment les filtres sur les tables à la leçon 19) à cause de quelques erreurs de saisie.

Si nous voulions extraire les gens mariés, nous mettrions "Marié(e)" comme critère d'EtatCivil, Access va omettre les gens dont l'état civil est très exactement : "Marié"... Avec la petite étoile, nous allons demander les gens mar*.

Essayez : Créez une nouvelle requête comme d'habitude, avec comme critère d'état civil : mar*

Lancez la requête : Vous devez obtenir 55 enregistrements, et vers le bas de la liste, vous allez trouver... Vincent Lagaf qui est... Marié !. Nous pourrions ici très facilement corriger son état civil pour le mettre à Marié(e), mais laissons cette erreur exprès pour faire d'autres expériences de même type plus tard.

Enregistrez cette requête sous R_CelebriteVraimentMarie, avec la description EtatCivl : Comme "mar*"

Il y a d'autres applications : Par exemple, on pourrait avoir la liste des gens dont le nom est composé (Catherine Zeta-Jones, Louis De Funès, Patrick Poivre d'Arvord), comment feriez-vous ?

Je mettrais comme critère * * à NomClient ?

N'oubliez pas ceux qui ont un trait d'union !


Critère de requête : L'étoile * et le mot clé OU

Ah oui ! * * Ou *-* alors ?

Exactement. Bon, eh bien je crois que vous êtes assez averti pour appliquer cet exemple tout seul : Créez une nouvelle requête qui extrait les noms composés, et Enregistrez-là sous R_CelebriteNomCompose, avec la description NomClient : Comme "* *" Ou Comme "*-*". Vérifiez bien que vous avez ce résultat :


Critère de requête Le point d'interrogation ? permet d'avoir un certain nombre de caractères

Et maintenant, peut-on compter le nombre de lettres. Par exemple, extraire les clients dont le prénom comporte 4 lettres ?

Oui, mais pas avec l'étoile * puisque celle-ci contient autant de lettres que possible. Il faut utiliser le point d'interrogation : ?

Créez une nouvelle requête comme d'habitude, et comme critère de Prenom, écrivez : Comme "????".

ATTENTION : Vous ne pouvez PAS simplement écrire ????. Access ne va pas accepter.
ATTENTION BIS : J'ai constaté que sous certaines version d'Access, pour des raisons que j'ignore, l'utilisation du point d'interrogation fait planter (tomber en panne) complètement Access. Aussi, il est nécessaire pour éviter celà d'encadrer les ? par des guillemets : "????"

Lancez la requête. Vous avez 14 personnes, dont le prénom comporte systématiquement 4 lettres. Enregistrez cette requête sous R_CelebritePrenom4Lettre (Eh oui : Pas de S à Lettre, même si c'est une faute d'orthographe manifeste.) Description : Prenom : Comme "????"

Et si je voulais les gens dont le prénom comporte 4 lettres, mais seulement ceux qui commencent par B ?

Comme "B???"

D'accord. Comme je sais qu'il y a quelques fautes de frappe dans les noms des pays, si je voulais les français, plutôt que d'écrire "France" comme critère de Pays, j'écrirais "Fr?nce", et il me sortirais tous les gens de France et de Frence alors ?

Exactement. Essayez : Créez cette requête que vous me proposez. Enregistrez-là sous R_CelebriteFrancaisComplet. Description : PaysOrigine : "Fr?nce"".

Oui mais... Il y a encore quelqu'un, je me souviens, qui habite "Francce". Il n'apparait pas celui-là

Non, parce qu'il y a DEUX lettres CC... Vous n'avez qu'à écrire Comme "Fr?nce" Ou Comme "Fran??e"...

Mouais... un peu compliqué...

Trop compliqué !

Ecrivez simplement dans ce cas Comme "Fr*ce", ça résume tout d'un seul coup : Vous aurez tous les pays qui commencent par "Fr - Quelque chose - ce". Faites-le : Créez cette requête qui extrait tous les français de cette façon, Enregistrez-là sous R_CelebriteTousLesFrancaisSansException, avec la description : PaysOrigine : Comme "Fr*ce". (vous devriez avoir tous les "France", + Julia Roberts qui vient de "Francce" et Bourvil qui vient de "Frence") dans vos 51 enregistrements.


Le signe plus grand que > appliqué à du texte

Et si maintenant je désirais les gens dont le nom commence au minimum par V (Donc tous ceux qui commencent par V, W, X, Y ou Z), j'écrirais V* Ou W* Ou X* Ou Y* Ou Z* ?

Vous pourriez, mais c'est trop compliqué. Comme critère pour le nom, essayez d'écrire simplement >V

Il accepte le signe plus grand que > même avec du texte ?

Exactement ! Essayez : Faites cette requête, exécutez-là, constatez que vous avez bien ces 5 enregistrements : , et Enregistrez-là sous R_CelebriteFinAlphabet, avec comme description NomClient : >V

Il n'y a personne qui commence par V... C'est parce qu'on a écrit >V. On aurait dû écrire >=V pour l'avoir ?

Non. Il n'y est pas parce qu'il n'existe pas dans la table.

En fait, par exemple, Van damme est plus grand que V. Il serait apparu s'il existait. En fait la toute petite différence qu'il y a entre >V et >=V, c'est que dans le cas de >V, s'il y avait quelqu'un dont le nom de famille est exactement V (ce qui est fortement improbable, vous en conviendrez...), il n'apparaitrait pas, tandis que dans le cas >=V, il apparaitrait.


Utilisation de Entre ... Et ... avec du texte

Mais alors on pourrait avoir la liste de tous les gens qui se trouvent alphabétiquement entre "Dupont" et "Smith" par exemple ?

Oui : Essayez : Créez une nouvelle requête, et dans le critère de NomClient, écrivez simplement : Entre Dupont et Smith. Ca marche. Bon, pour constater le résultat de manère probante, n'oubliez pas de trier les noms par ordre alphabétique une fois que vous avez lancé la requête.

Normalement, le premier client sera Fernandel, et le dernier Alfred Sirven, tous les noms se situant alphabétiquement entre Dupont et Smith. Enregistrez cette requête sous R_CelebriteEntreDupontEtSmith, avec la description NomClient : Entre "Dupont" et "Smith"

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

Cette fois, nous avons vu la très importante étoile *. E lle permet de rechercher des parties de texte au début, au milieu ou a la fin des champs.
Nous avons également vu le point d'interrogation ? qui permet de représenter une seule lettre ou un seul chiffre, ou un seul caractère quelconque. Nous avons vu que leur utilisation est différente, et qu'il faut bien réfléchir avant d'utiliser l'un ou l'autre. Nous avons vu enfin qu'il est possible d'utiliser le signe >, <, >=, <= également avec du texte.

Avez-vous bien compris ?

  1. Je crée une requête sur T_Celebrite, avec le NomClient. Comme critère de ce nom, j'écris : D*A*E
    Lequel de ces noms ne sortira PAS ?

    a. Debarre
    b. Debaré ***
    c. dynamine
    d. DA MALAGATTE

  2. Je crée une requête sur T_Celebrite, avec le NomClient. Comme critère de ce nom, j'écris : d???e
    Lequel de ces noms ne sortira PAS ?
    a. Drame
    b. Dramie ***
    c. DOLLE
    d. De Me

  3. Je crée une requête sur T_Celebrite, avec le NomClient. Comme critère de ce nom, j'écris : Pas Comme "????"
    Qu'est-ce que ça veut dire ?

    a. J'aimerais l'ensemble des gens dont le nom contient soit plus soint moins de 4 caractères***
    b. J'aimerais l'ensemble des gens dont le nom CONTIENT 4 caractères
    c. J'aimerais l'ensemble des gens dont le nom contient 4 points d'interrogations
    d. J'aimerais l'ensemble des gens dont le nom contient à la fois moins de 4 lettres ET plus de 4 caractères

  4. J'aimerais une requête qui contient l'ensemble des gens qui contiennent à la fois la lettre A ET la lettre Z dans leur nom.
    Quel critère faut-il mettre dans le Nom ?

    a. Comme "*a*" Ou Comme "*z*"

    b. Comme "*a*z*"
    c. Comme "*az*"
    d.
    Comme "*a*" Et Comme "*z*" ***
  5. J'aimerais créer une requête qui contient l'ensemble des Remarques (toujours de T_Celebrite) qui contiennent un chiffre
    Quel critère faut-il mettre dans Remarque ?

    a. Comme *1* Et Comme *2* EtComme *3* Et Comme *4* Et Comme *5* Et Comme *6* Et Comme *7* Et Comme *8* Et Comme *9* Et Comme *0*
    b. Comme *1* Ou Comme *2* Ou Comme *3* Ou Comme *4* Ou Comme *5* Ou Comme *6* Ou Comme *7* Ou Comme *8* Ou Comme *9* Ou Comme *0* ***
    c. Entre *0* et *9*
    d.
    1 Ou 2 Ou 3 Ou 4 Ou 5 Ou 6 Ou 7 Ou 8 Ou 9 Ou 0

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

Encore une fois, il ne s'agit pas de créer une nouvelle base de données, mais vous allez devoir créer quelques requêtes dans votre base de données ProFormation. Toutes les requêtes seront basées sur T_Celebrite, et devront contenir au minimum le Prénom et le NomClient.

  1. Créez une requête qui extraira l'ensemble des gens dont le Prénom est situé alphabétiquement après Nathalie, qui sont mariés (mar*)
    Enregistrez sous R_CelebritePlusGrandNathalieMarie
    Vous devriez obtenir 12 résultats
  2. Créez une requête qui extraira l'ensemble des gens dont la remarque contient le mot acteur ou actrice
    Enregistrez sous R_CelebriteActeurActriceRemarque
    Vous devriez obtenir 5 résultats
  3. Créez une requête qui extraira l'ensemble des gens dont soit le Titre (Monsieur, Madame,...), OU la remarque contiennent un point (.) OU un point d'exclamation (!) - Soyons clair : Si un titre contient un point, ou un titre contient un point d'exclamation ou une remarque contient un point ou une remarque contient un point d'exclamation, le résultat DOIT apparaître
    Enregistrez sous R_CelebriteTitreRemarquePonctuation
    Vous devriez obtenir 8 résultats
  4. Créez une requête qui extraira l'ensemble des gens dont le nom contient entre 9 et 11 lettres (9 et 11 lettres incluses)
    Enregistrez sous R_CelebriteNomEntre9Et11Lettre
    Vous devriez obtenir 11 résultats

Téléchargez la solution de l'exercice ici, qui n'est autre que la version de 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