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

Temps nécessaire pour suivre cette leçon : Une petite 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 continuer notre étude sur 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 : <>)

Sommaire

  1. Critères de requête : Ou
  2. Critères de requête : PAS, <>
  3. Critères de requête : Pas avec Et
  4. Citères dans plusieurs champs
  5. Critères dans plusieurs champs et dans plusieurs lignes de critères

Critères de requête : Ou

Puis-je avoir la liste de tous les gens qui appartiennent au 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 ne placez pas l'accent, Access ne vous renverra rien du tout... Contrairement aux majuscules, qui, elles, ne sont pas importantes.

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 simplement cinema, et lancez la requête.

Effectivement : !

Bien. C'était juste une remarque, ne corrigez pas les accents sur ces 2 enregistrements.

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 la philosophie que je vous ai enseignée, 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 risquons d'avoir 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 visualiser également les deux personnes qu'il nous manquait, non ?

Oui, vous avez tout à fait raison. Ce que je voulais mettre en lumière, c'est que si vos données n'ont pas été entrées correctement, il 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 ???

Vous ne pouvez jamais être certain de votre coup, en fait !


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

Ok.. Evidemment. Changeons de sujet : Peut-on obtenir la liste de tous les gens qui ne sont PAS dans la 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 voyez 80 célébrités, 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).

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

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


Critères de requête : Pas avec Et

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 à part ceux qui font du cinema, mais 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, car personne ne faiut les deux à la fois), et dans le 2ème cas, il faut demander tous les gens qui ne font pas de cinéma ET PAS NON PLUS de la chanson. si vous mettez pas cinéma OU pas chanson, vous aurez tout le monde... Pas évident à comprendre du premier abord, mais c'est comme ça...

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 ?


Citères dans plusieurs champs

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 voir 17 enregistrements. 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 Enregistrez-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 ...


Critères dans plusieurs champs et dans plusieurs lignes de critères

Ah oui, je vous coupe : J'ai compris : Donc, c'est une liste de candidats désireux de participer (par exemple) à un jeu télévisé du style "Les aventuriers 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 !

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 36 enregistrements, 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 saisie 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 gens, exceptés ceux qui n'ont pas de domaine d'activité du tout*** (il fallait écrire Pas "sport" Et Pas "Cinéma" pour les exclure)
    b. J'obtiens tous les gens 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 qui gagne 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 apparaitra ?
    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 ProFormation, 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 (10000 et 15000 inclus)
    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 ceux 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
    Remarque : Je m'attend a ce que vous demandiez les gens différents de "Monsieur" : C'est juste... la table T_Celebrite n'étant pas parfaite, vous aurez un enregistrement étrange : Charlie Chaplin, mais c'est normal. Nous verrons plus tard comment nettoyer les tables.
    Nommez-là R_CelebriteAmericaineMariee
    Vous devriez obtenir 3 résultats

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