Leçon 26 : Requêtes : Les tris et les premières valeurs

Temps nécessaire pour suivre cette leçon : Une grosse 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 voir comment faire pour trier plusieurs colonnes en même temps, ainsi que la manière d'extraire seulement les valeurs extrêmes d'une plages de valeurs, comme la liste des 5 personnes les plus agées, ou les 3 personnes les plus riches

Sommaire

  1. Tri croissant/décroissant sur une seule colonne
  2. Tri croissant sur plusieurs colonnes
  3. Tri décroissant
  4. Premières valeurs
  5. Premières valeurs : Doublons possibles
  6. Premières valeurs : Utilisation d'un pourcentage

Créez une nouvelle requête, comme d'habitude, et placez les champs suivants dans cet ordre : . Si vous lancez requête telle quelle, vous aurez la liste simple de tous les gens, dans l'ordre dans lequel elles ont été rentrées. Vous pouvez bien entendu toujours trier par n'importe quelle colonne avec le bouton droit de votre souris, et en choisissant Tri Croissant, mais ce tri ne sera pas mémorisé.

Nous allons voir dans cette leçon qu'il possible de mémoriser les tris avec la requête.


Tri croissant/décroissant sur une seule colonne

Revenez ou restez en mode création de cette requête. Cliquez dans la zone Tri de Domaine : . En cliquant dans cette zone, ça fait apparaître une petite flèche. Si vous cliquez sur cette petite flèche, vous pouvez choisisr entre

Choisissez Tri croissant pour le domaine : . Lancez la requête : Vous constatez que tout le monde est là, et que les domaines sont triés par ordre alphabétique : D'abord ceux qui n'ont pas de domaine, ensuite ceux qui ont le domaine ??, puis ???, puis Affaire, Chanson, etc...

Une fois de plus, nous constatons quelques erreurs de saisie : Pourquoi atrribuer ?? ou ??? à des gens dont le domaine est inconnu... Autant le laisser en blanc ! Ne changez rien : Laissons volontairement ces "erreurs de saisie" (Nous verrons à la leçon 45 comment bien nettoyer toutes ces erreurs)

Astuce : Plutôt que de cliquer sur la petite flèche pour choisir Croissant, vous pouvez double-cliquer directement dans la zone de tri : . Croissant apparait automatiquement. Si vous recliquez encore deux fois sur Croissant, il se transforme en Décroissant, et encore deux clics, le tri disparait.

Cette première colonne est bien triée, mais pas les autres...

Exactement.

C'est normal : Je comprend bien que si on trie par le pays d'origine, forcément, le domaine ne sera plus trié. On ne peut trier qu'une colonne à la fois !


Tri croissant sur plusieurs colonnes

Justement, non ! Nous allons pouvoir trier par plusieurs colonnes en même temps.

Démonstration : Demandez le tri alphabétique EGALEMENT sur PaysOrigine : .Lancez la requête, et regardez bien ce qui se passe : à première vue, rien n'a changé, la table est toujours triée par ordre alphabétique du Domaine. Mais regardons de plus près une partie des enregistrements : Les personnes qui font de la chanson :

Les pays sont triés alphabétiquement pour chaque domaine : D'abord ceux qui n'ont pas de pays (Jennifer Lopez), ensuite : Belgique, Canada, Etats-Unis, France, Pays-Bas et Royaume-Uni.

Et à chaque changement de domaine, le tri recommence de A à Z sur le pays !

Oui. Et nous allons continuer : Prenons les "Chanson" de France : . Ils ne sont pas du tout dans l'ordre de leur état civil : Célibataire, Rien, Célibataire, Marié(e), Divorcé(e), Marié(e), Marié(e), ... C'est n'importe quoi !

Compris ! Il suffit de définir le tri croissant dans l'EtatCivil !


Tri décroissant

C'est ça ! Tiens, on va même faire une petite variante puisque vous avez bien compris : Ne choisissez pas Croissant, mais Décroissant : . Lancez la requête, et regardez principalement ce qui se passe au niveau des "Chanson", "France" : Les états civils sont triés en ordre alphabétique inverse : Marié(e), Divorcé(e), Célibataire, et Rien.

Et maintenant, si je veux que tous les "Chanson", "France", "Marié(e)" soient triés par ordre alphabétique par le nom, je demande un tri croissant du prénom et du nom ?

Pas du prénom. Vous demandez juste l'ordre alphabétique du nom, autrement il va d'abord définir le prénom par ordre alphabétique, et ensuite les noms, ce qui est idiot.

Faites donc : , et lancez la requête. Regardez principalement la section des Chanson - France - Marié(e) :. Ils sont triés par ordre alphabétique du nom de famille : Brassens, Cabrel, Gainsbourg, Goya et Hallyday.

Enregistrez cette requête sous R_CelebriteMultiCleDeTri, avec la description Tri par Domaine, Pays, EtatCivil et NomClient

C'est toujours un tri de gauche à droite ?

Toujours, sans exception

Donc, si j'intervertis les 2 premières colonnes, que je place le pays en premier lieu tout à gauche, et juste à sa droite le domaine, il va trier d'abord les pays, et pour un même pays, il va trier les domaines ?

Oui. Faites le test : Restez dans cette requête, et déplacez le Pays de manière à ce que ce soit la première colonne (Revoyez la leçon 21 si vous avez oublié comment on déplace un champ). Une fois que vous avez cette disposition : , lancez votre requête.

Faites Fichiers/Enregistrer SOUS : R_CelebriteMultiCleDeTri2 avec la description "Tri par Pays, Domaine, EtatCivil et NomClient"

On aurait pu encore affiner notre tri, si on avait mis le nom avant le prénom, on aurait pu trier par vraiment toutes les colonnes : , comme ça, si par exemple, on avait eu plusieurs fois le même nom de famille, la requête les aurait trié par ordre alphabétique des prénoms (Dupont André, Dupont Charles, Dupont Ernest, ...)

Oui. Nous ne l'avons pas fait, parce que dans notre cas ç'aurait été un peu idiot, nous n'avons absolument pas assez de données pour que ce soit représentatif (A part Hallyday qui est représenté 2 fois (Johnny et David), il n'y a pas vraiment d'autres exemples dans notre table).


Premières valeurs

Nous allons maintenant nous pencher sur une intéressante fonction des requêtes, plus ou moins liée aus tris : C'est la fonction "Première valeurs". Créez une nouvelle requête, comme d'habitude, avec les champs Nom, Prénom et SalaireMensuel. Demandez le tri décroissant par salaireMensuel seulement : . Ce qui aura pour effet de donner la liste de tous les gens, les plus riches en premier lieu.

Admettons maintenant que vous désiriez afficher seulement les 5 personnes les plus riches de votre table : Cliquez sur cette petite déroulante, dans la barre d'outils, au dessus de votre écran, sous les menus : , et choisissez 5 : . Lancez la requête : . Vous obtenez effectivement les 5 premières personnes les plus riches.

Enregistrez cette requête sous R_Celebrite5LesPlusRiche (Ne quittez pas cette requête)

Je suppose qu'on est pas obligé de choisir ce qui existe dans la liste (5, 25, 100), on peut écrire un autre chiffre ?

Bien sûr, oui.

Donc, si je met 1, j'ai juste la personne la plus riche ?


Premières valeurs : Doublons possibles

Oui. Essayez : Ecrivez 1 dans cette liste et lancez la requête.

Faites Fichier/Enregistrer Sous : R_CelebriteLaPlusRiche

Ca ne marche pas : Il me renvoie 2 personnes : !

Mais ils gagnent tous les deux 30'000 francs ! S'il n'en avait choisi qu'un çaurait été qui ? Stallone ou Sirven ?

C'est juste ! Dans ce cas, qu'on demande 1 ou 2, le résultat est le même ?

Oui. Parce qu'Access ne veut pas vous renvoyer au hasard l'un des deux. PAR CONTRE... Si vous aviez : , alors, çaurait été différent : En effet, commne vous avez 2 clés de tris : Le salaire ET le Nom, dans ce cas, il n'y a plus d'ambiguïté : La requête trie donc d'abord par salaire, et, A SALAIRE EQUIVALENT, il trie par ordre alphabétique des noms... Ce qui fait que comme dans notre table, nous avons 2 personnes qui gagnent le même salaire : Stallone et Sirven, Access va les renvoyer par ordre alphabétique : D'abord Sirven, ensuite STallone. Et, dans ce cas, si vous demandez le résultat de la requête, il ne va plus renvoyer les deux personnes, mais effectivement SEULEMENT la première alphabétiquement : alfred Sirven : !

Faites Fichier/Enregistrer Sous : R_CelebriteLaPlusRicheAlphabetique. Fermez cette requête, et mettez les descriptions suivantes dans ces 3 nouvelles requêtes :


Premières valeurs : Utilisation d'un pourcentage

J'ai vu que dans la liste déroulante des premières valeurs, on pouvait également indiqur un pourcentage ?

C'est le même principe. Admettons que vous aimeriez voir les 10% des personnes les plus agées de votre liste, créez une nouvelle requête comme d'habitude, et demandez : , et écrivez 10% dans la zone des premières valeurs : . Lancez la requête.

Ca ne marche pas : Déjà, il devrait y avoir 10 personnes (10% de 100 personnes), là, il y en a 14... Et en plus, personne n'a de date de naissance !

Tout est normal : 14 personnes, c'est justement parce qu'il y a 14 personnes dont la date est inconnue, et comme c'est trié par ordre croissant de date de naissance, les dates vides sont placées en premier. En fait, il faudrait exclure les dates vides. Vous vous rappelez comment faire ?

Bien sûr ! je me rappelle de la leçon 25 : Il faut mettre Pas Null comme critère de DateNaissance !

Exactement. Essayez ! . Cette fois, ça marche nettement mieux !

Enregistrez cette requête sous R_Celebrite10PourCentLesPlusAgee. Donnez lui la desccription : DateNaissance : Ordre décroissant, Premières valeurs : 10%

C'est marrant : Il ne donne que 9 personnes... Comme nous avons 100 personnes, il devrait en donner au moins 10, non ?

Attention : Vous avez demandé la liste de toutes les personnes dont la date de naissance n'était pas nulle ! Il n'y a donc plus 100 personnes, mais 100 - 14 personnes sans dates = 86 personnes (on a vu un peu plus haut dans la leçon qu'il y avait 14 personnes sans date de naissance). 10% de 86 personnes, c'est 8.6 personnes. Comme il n'est pas possible évidemment d'afficher 8.6 personnes, Access en affiche 9.

Bon finalement, ces premières valeurs ne sont absolument pas utiles s'il n'y a pas de tri sur au moins une colonne !

Exactement.

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

Les requêtes servent à extraire une partie des données d'une table, mais également à trier. Il est possible de trier sur un, deux ou plus de champs... Les tris s'effectuent toujours de gauche à droite : C'est d'abord la colonne la plus à gauche qui est triée, ensuite, vers la droite. Si la première colonne est Pays, et la deuxième est NomClient, Access va trier tous les pays par ordre alphabétique, et pour tous les habitants d'un même pays, ils seront alors triés par ordre alphabétique du nom.
Le tri est étroitement lié avec la notion de Premières Valeurs. Il est possible d'extraire les 12 personnes les plus jeunes, ou les 27% des gens dont le salaire est le plus élevé, en utilisant la liste déroulante "Premièeres valeurs". En cas d'égalité, Access affiche les 2 ou plusieurs enregistrements comme s'il n'en s'agissait que d'un seul.

Avez-vous bien compris ?

  1. Je crée une requête basée sur T_Celebrite. Je place les champs Pays, EtatCivil et Prenom (dans cet ordre !). Je demande un tri croissant sur les 3 champs. Quel enregistrement apparaîtra en premier ?
    a. Céline, Marié(e), Canada
    b. Britney, Célibataire, Etats-Unis
    c. Johnny, Célibataire, pays inconnu (vide) ***
    d. Michael, célibataire, Allemagne

  2. Je crée une requête basée sur T_Celebrite. Je place les champs NomClient et Prénom (sans tri). Je demande les 3 premières personnes
    a. La requête ne renvoie aucun résultat
    b. La requête renvoie tous les enregistrements
    c. La requête renvoie les 3 premières personnes de la table dans l'ordre alphabétique
    d. La requête renvoie les 3 premières personnes telles qu'elles apparaissent dans la table ***

  3. Je crée une requête basée sur T_Celebrite. Je place les champs Decede, Pays, NomClient, et Prenom (dans cet ordre). Je demande le tri sur tous les champs
    (Il va vous falloir vous rappeler de ce que valent la case à cocher selon qu'elle est cochée ou non...)
    a. La requête va me renvoyer d'abord les gens vivants, et ensuite les gens morts ***
    b. La requête va me renvoyer tous les gens triés par ordre alphabétique de leur pays, et ensuite par pays, les gens vivants et les gens morts
    c. Cette requête n'est pas possible (pas de tris possibles sur les champs Oui/Non)
    d. Aucun tri ne se fera (3 clés de tri maximum : Ici, il y en a 4)

  4. Je crée une requête basée sur T_Celebrite. Je place les champs Decede et NomClient dans cet ordre, triés en ordre croissant par Decede, et NomClient. Je demande comme critère de Decede : Oui. Je demande la liste des 15% des premières valeurs
    a. J'obtiens les 15% des 100 personnes classées par ordre alphabétique (à peu près 15 personnes)
    b. J'obtiens les 15% des personnes décédées les plus proche de A alphabétiquement parlant (soit 15% des 22 personnes = env. 4 personnes) ***
    c. J'obtiens les 85% des personnes décédées les plus proche de A alphabétiquement parlant (soit 15% des 22 personnes = env. 4 personnes)

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 les 20% des américaines les plus riches
    Enregistrez-là sous R_Celebrite20PourcentAmericaineLesPlusRiche
    Vous devriez obtenir 2 enregistrements (variable selon les paramètres d'extraction - USA - Etats-Unis - Mme etc...)
  2. Créez une requête qui extraira l'ensemble de tous les gens décédés, dont la date de naissance est connue, du plus jeune au plus vieux
    Enregistrez-là sous R_CelebriteDecedeeJeuneVersVieux
    Vous devriez obtenir 22 enregistrements
  3. Créez une requête qui extraira les 50% des gens qui font de la politique les plus agés
    Enregistrez-là sous R_CelebritePolitique50PourcentLesPlusAge
    Vous devriez obtenir 5 enregistrements

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