http://www.info-3000.com/access/supportdecours/lecon23/lecon23.htm

Leçon 23 : Requêtes - Pas, <>, Et, Ou, Ou sur plusieurs colonnes

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 procd.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

Résumé de la leçon précédente

La dernière fois, nous avons vu certains paramètres des requêtes : Nous avons notamment vu comment extraire des salaires plus élevés ou moins élevés qu'un tel cou tel chiffre. Nous avons également constaté que lorsqu'il s'agit d'extraire du texte, Access met automatiquement des guillemets.

Aperçu de cette leçon

Dans cette leçon, nous allons continuer les critères de sélections dans les requêtes. Nous allons apprendre à demander plusieurs critères sur plusieurs champs, et utiliser les mots clés Et et Ou. Nous allons également voir comment exclure des enregistrements avec le mot-clé "Pas" (différent de : <>)

Puis-je avoir la liste de tous les gens qui sont dans le domaine Chanson ou Cinéma ?

Oui. Essayons : Créez une nouvelle requête basée sur T_Celebrite, dans laquelle vous insérez le Prénom et le NomClient, ainsi que le Domaine, et comme critère de domaine, vous écrivez chanson ou cinéma : . Dès que vous cliquez dans une autre case, Access installe des guillemets ("chanson" Ou "cinéma").

On met un accent sur cinéma ?

Evidemment !!! C'est une DONNEE, dans les tables, vous avez bien écrit Cinéma, pas Cinema. Si vous oubliez l'accent, par contre, Access ne vous renverra rien du tout comme Cinéma... Contrairement aux majuscules, qui, elles, ne sont pas importantes. Attention donc !

Testez la requête : Vous avez bien 52 enregistrements ?

Oui, c'est juste : Les Chanson et les Cinéma sont mélangés

Et, encore une fois, attention à la sasie des données... Parce qu'il nous manque Bruce Willis et Tommy Lee Jones !

Comment pouvez-vous dire ça comme ça ???

Parce que eux, ont été classés sous Cinema, et pas Cinéma... Essayez : Remplacez "chanson" Ou "cinéma" par cinema, et lancez la requête.

Effectivement : !

Bien. C'était juste une remarque. Remettez "chanson" Ou "cinéma"et enregistrez cette requête sous R_CelebriteChansonCinema, et quittez-là. Donnez-lui comme description : Domaine = "chanson" ou "cinéma"

On ne l'appellerait pas plutôt R_CelebriteChansonOuCinéma justement ?

Non : Nous allons rester cohérent avec nous-mêmes, même si parfois ça parait un peu contre-nature : Nous avons dit PAS d'ACCENT dans les noms des objets, et cette requête ne doit pas déroger à la règle, sinon, nous allons avoir plein d'incohérences et d'amiguités dans notre travail.

Et, j'y pense maintenant : on n'avait qu'à mettre "chanson" Ou "cinéma" Ou "cinema" pour avoir les deux qu'il nous maquait...

Oui, vous avez tout à fait raison. Bon, ce que je voulais soulever, c'est que si vos données n'ont pas été entrées correctement, c'est très difficile ensuite de les extraire. Par exemple, qui vous dit qu'il n'y a pas ENCORE une autre célébrité dont le domaine est Sinéma par exemple... Ou cinnema, Ou cynéma ??? elle va nous échapper celle-là... Vous ne pouvez jamais être certain de votre coup, en fait !

Ok.. Evidemment. Changeons de sujet : On peut avoir la liste de tous les gens qui ne font PAS de chanson par exemple ?

Oui. Créez une nouvelle requête, comme d'habitude, toujours basée sur T_Celebrite, avec le prénom, le nom et le domaine. Critère de domaine : pas chanson . Appuyez sur Enter, ou cliquez dans une autre case, Access transforme votre critère en Pas "chanson". Lancez la requête : Vous avez 80 personnes, dont PERSONNE ne fait de chanson. (par déduction, nous pouvons déterminer qu'il y a 20 personnes qui font de la chanson, puisque nous savons qu'il y a 100 personnes dans cette table).

Sauvegardez cette requête sous R_CelebritePasChanson, fermez-là, et donnez-lui la description Domaine Pas "chanson"

Remarque : Pas est la même chose que <>. Vous pouvez indifféremment écrire Pas cinéma ou <> cinéma

Et si je voulais l'ensemble des gens qui ne font ni chanson ni cinéma, ce serait Pas Chanson Ou Cinéma ?

Non.

Pas chanson ou pas cinéma alors ?

Non plus. En fait, ce serait Pas chanson et pas cinéma. Essayez : Créez une nouvelle requête comme d'habitude, et demandez comme critère de Domaine Pas chanson et pas cinéma. Lancez la requête. Vous avez bien 45 enregistrements dont personne ne fait de cinéma ni de chanson ?

Oui. Bon a part ceux qui font du cinema, mais bon, maintenant je sais pourquoi. Donc si je voulais les gens qui font du cinéma ou de la chanson, je met cinéma OU chanson, tandis que si je veux les exclure, c'est pas cinéma ET pas chanson ?

Oui. Dans le premier cas, comme il n'y a personne qui fait du cinéma ET de la chanson en même temps, il faut mettre OU (si vous mettez cinéma ET chanson, vous n'aurez personne), et dans le 2ème cas, il faut demander tous les gens qui ne font pas de cinéma ET NON PLUS de la chanson. si vous mettez pas cinéma OU pas chanson, vous aurez tout le monde...

Enregistrez cette requête sous R_CelebriteNiCinemaNiChanson, fermez-là, et donnez-lui comme description Domaine Pas "cinéma" Et Pas "Chanson" .

Parfait. A part ça, puis-je avoir les français qui font du cinéma ?

Bien entendu. Créez une nouvelle requête comme d'habitude, avec les champs Prénom, Nom, Domains, et Pays. Voici les critères :

Lancez cette requête, et vérifiez son résultat. Vous devriez avoir 17 personnes. Bon, comme d'habitude, s'il y en a qui habitent la Frence, ou la Francce, ou qui font du Cinema sans accent, ils n'apparaîtront pas, mais c'est normal.

Fermez cette requête, et sauvegardez-là sous le nom R_CelebriteCinemaFrancais. Description : Domaine = "cinéma", PaysOrigine = "france"

Compris. Et maintenant une colle : Admettons que je veuille extraire les célibataires et les sportifs !

Facile : Comme critère d'EtatCivil, vous écrivez "célibataire", et comme domaine, vous écrivez "sport"

Non, ce n'est pas ça, parce que dans ce cas, il ne va me sortir que les célibataires sportifs !

Oui, c'est bien ce que vous avez demandé, non ?

Pas exactement. Par exemple, imaginons que T_Celebrite ne soit pas une simple liste de gens, mais que c'est la liste de candidats à un casting et que ...

Ah oui, je vous coupe : J'ai compris : Donc, c'est une liste de candidats pour participer par exemple à un jeu télévisé du style "Les aventiriers de Koh-Lanta", et vous avez besoin de personnes qui soient, comnent dire... "Bien physiquement", et vous voulez extraire tous les célibataires, mais aussi, dans la foulée tous les sportifs : C'est à dire qu'un célibataire non-sportif doit apparaître dans le résultat, ainsi que les sportifs qui ne sont pas célibataires, c'est ça ?

Exactement ! Les célibataires qui ne sont pas sportifs, les sportifs qui ne sont pas célibataires, et évidemment les célibataires sportifs !

Oui... Créez une nouvelle requête comme d'habitude, et mettez les critères suivants : . Vous aurez les célibataires sportifs, et rien d'autre... (8 personnes). Mais si vous mettez célibataire une ligne plus bas, comme ceci : , alors cette fois, vous aurez 45 enregistrements de résultats, et vous pourrez constater que chaque personne est soit sportive, soit célibataire, soit les deux : . Et voilà à quoi sert la ligne Ou :

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

Cette fois, nous avons vu que les critères des requêtes sont parfois un peu subtils : En effet, il faut savoir jongler avec les mots clés tels que ET, OU, PAS (<>), et parfois même utiliser 2 lignes de critères. Il n'est pas nécessaire d'écrire les guillemets autour des textes que l'on recherche, Access s'en charge. Et comme d'habitude, le fait qu'il y ait des erreurs de saisi dans notre table T_Celebrite nous empêche d'avoir des résultats parfait (par exemple à cause du fait que certaines célébrités font du Cinema à la place du cinéma).

Avez-vous bien compris ?

  1. Je crée une requête basée sur T_Celebrite, avec le prénom, le nom et l'état civil. Je met le critère suivant à EtatCivil : "mArie"
    a. Je n'ai aucun résultat, à cause du A majsucule
    b. J'obtiens tous les gens mariés
    c. Je n'obtiens aucun résultat parce qu'il fallait écrire "marié(e)" ***

  2. Je crée une requête basée sur T_Celebrite, avec le prénom, le nom et le domaine. Dans le critère de domaine je met : Pas "sport" Ou Pas "cinéma"
    a. J'obtiens tous les clients sans exception *** (il fallait écrire Pas "sport" Et Pas "Cinéma" pour les exclure)
    b. J'obtiens tous les clients qui ne font ni sport ni cinéma
    c. J'obtiens tous les gens qui font du sport
    d. Je n'obtiens aucun résultat

  3. Je crée une requête basée sur T_Celebrite, avec le prénom, le nom et l'état civil. Dans le critère de l'état civil je met : "marié(e)" Et "Célibataire"
    a. Je n'obtiens aucun résultat *** (il fallait écrire "marié(e)" Ou "Célibataire" pour obtenir les deux)
    b. J'obtiens la liste de tous les clients sans exception
    c. J'obtiens tous les gens Mariés
    d. J'obtiens la liste de tous les gens qui ne sont ni mariés ni célibataires

  4. Je crée cette requête . Quelle est l'éventuelle personne qui n'apparaitra pas :
    a. La personne qui gagne 10000 francs, et qui fait du sport***
    b. La personne quigagne 9999 francs et qui fait de la télévision
    c. La personne qui fait du sport et qui ne gagne rien du tout par mois
    d. La personne qui fait du sport et qui gagne 5000 francs par mois

  5. Je crée cette requête : . Quelle est l'éventuelle personne qui n'apparaitra pas ?
    a. Le sportif qui gagne 4000 francs
    b. Le chanteur qui ne gagne rien
    c. Celui qui fait du cinéma et qui gagne 20000 francs ***
    d. Le sportif qui gagne 30000 francs

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

L'exercice consiste à créer quelques requêtes au sein même de votre base de données ProCD, comme lors de la leçon précédente, chaque requête étant basée sur T_Celebrite, et devant comporter au moins le nom et le prénom:

  1. Créez une requête qui extraira les gens mariés ou célibataires, qui gagnent entre 10'000 et 15'000 francs par mois
    Nommez-là R_CelebriteMarieCelibataireSalaireMoyen
    Vous devriez obtenir 17 résultats

  2. Créez une requête qui extraira les célibataires français qui gagnent moins de 4000 francs, mais en excluant cux qui gagnent 0 francs
    Nommez-là R_CelebrireCelibataireFrancaisPauvre
    Vous devriez obtenir 2 résultats
  3. Créez une requête qui extraira les américaines mariées
    Nommez-là R_CelebriteAmericaineMariee
    Vous devriez obtenir 3 résultats

Téléchargez la solution de l'exercice ici (qui n'est autre que ProCD 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 procd.mdb exactement dans l'état ou elle devrait être à la fin de cette leçon.

Aperçu de la leçon suivante

Lors de la prochaine 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 terminenent par "ine", ou encore les gens dont le nom contientn 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.