Partager via


Conventions pour combiner des conditions de recherche dans le volet Critères (Visual Database Tools)

S’applique à :SQL Server

Vous pouvez créer des requêtes qui incluent n’importe quel nombre de conditions de recherche, liées à n’importe quel nombre d’opérateursAND.OR Une requête avec une combinaison de AND clauses peut OR devenir complexe. Il est donc utile de comprendre comment une telle requête est interprétée lorsque vous l’exécutez et comment une telle requête est représentée dans le volet Critères (Visual Database Tools) et le volet SQL (Visual Database Tools).

Remarque

Pour plus d’informations sur les conditions de recherche qui contiennent un seul ou AND opérateurOR, consultez Spécifier plusieurs conditions de recherche pour une colonne (Visual Database Tools) et spécifier plusieurs conditions de recherche pour plusieurs colonnes (Visual Database Tools).

Dans cet article, vous trouverez des informations sur :

  • Priorité des ANDOR requêtes qui contiennent les deux.

  • Relation logique entre les conditions et ANDOR les clauses.

  • Comment le Concepteur de requêtes et de vues représente dans les requêtes du volet Critères qui contiennent à la fois AND et OR.

Pour vous aider à comprendre la discussion ci-dessous, imaginez que vous travaillez avec une employee table contenant les colonnes hire_date, job_lvlet status. Nous supposerons que vous désirez savoir depuis combien de temps un employé travaille dans la société (quelle est sa date d'embauche), quel type de fonction il exerce (quel est son niveau de travail) et quel est son statut (par exemple, retraité).

Ordre de priorité des opérateurs AND et OR

Lorsqu’une requête est exécutée, elle évalue d’abord les clauses liées ANDà , puis celles liées à OR.

Remarque

L’opérateur NOT est prioritaire sur les deux AND et OR.

Par exemple, pour trouver des employés qui ont été avec l’entreprise depuis plus de cinq ans dans des emplois de niveau inférieur ou des employés ayant des emplois de niveau intermédiaire sans tenir compte de leur date d’embauche, vous pouvez construire une WHERE clause comme suit :

WHERE
   hire_date < '01/01/95' AND
   job_lvl = 100 OR
   job_lvl = 200

Pour remplacer la priorité par défaut, ANDORvous pouvez placer des parenthèses autour de conditions spécifiques dans le volet SQL. Les conditions entre parenthèses sont toujours évaluées en premier. Par exemple, pour trouver tous les employés qui ont été avec l’entreprise plus de cinq ans dans des emplois de niveau inférieur ou intermédiaire, vous pouvez construire une WHERE clause comme suit :

WHERE
   hire_date < '01/01/95' AND
   (job_lvl = 100 OR job_lvl = 200)

Conseil / Astuce

Il est recommandé d’inclure toujours des parenthèses lorsque vous combinez AND et OR des clauses au lieu de vous appuyer sur la priorité par défaut.

Fonctionnement de AND avec plusieurs clauses OR

Comprendre comment AND et OR les clauses sont liées lorsqu’elles sont combinées peuvent vous aider à construire et à comprendre des requêtes complexes dans le Concepteur de requêtes et de vues.

Si vous liez plusieurs conditions à l’aide ANDde , le premier ensemble de conditions liés AND s’applique à toutes les conditions du deuxième ensemble. En d’autres termes, une condition liée AND à une autre condition est distribuée à toutes les conditions du deuxième jeu. Par exemple, la représentation schématique suivante montre une AND condition liée à un ensemble de OR conditions :

A AND (B OR C)

La représentation ci-dessus est logiquement équivalente à la représentation schématique suivante, qui montre comment la AND condition est distribuée au deuxième ensemble de conditions :

(A AND B) OR (A AND C)

Ce principe distributif influe sur la manière dont vous utilisez le Concepteur de requêtes et de vues. Par exemple, imaginez que vous recherchez tous les employés qui ont été avec l’entreprise plus de cinq ans dans des emplois de niveau inférieur ou intermédiaire. Vous entrez la clause suivante WHERE dans l’instruction dans le volet SQL :

WHERE (hire_date < '01/01/95') AND
   (job_lvl = 100 OR job_lvl = 200)

La clause liée AND s’applique aux deux clauses liées à OR. Une façon explicite d’exprimer cela consiste à répéter la AND condition une fois pour chaque condition dans la OR clause. L'instruction suivante équivaut à la précédente, mais elle est plus explicite (et plus longue) :

WHERE (hire_date < '01/01/95') AND
  (job_lvl = 100) OR
  (hire_date < '01/01/95') AND
  (job_lvl = 200)

Le principe de la distribution de AND clauses à des clauses liées OR s’applique peu importe le nombre de conditions individuelles impliquées. Par exemple, supposons que vous vouliez rechercher les employés avec un niveau de qualification supérieur ou moyen, qui travaillent dans la société depuis plus de cinq ans ou qui sont à la retraite. La WHERE clause peut ressembler à ceci :

WHERE
   (job_lvl = 200 OR job_lvl = 300) AND
   (hire_date < '01/01/95') OR (status = 'R')

Une fois que les conditions liées ont AND été distribuées, la WHERE clause ressemble à ceci :

WHERE
   (job_lvl = 200 AND hire_date < '01/01/95') OR
   (job_lvl = 200 AND status = 'R') OR
   (job_lvl = 300 AND hire_date < '01/01/95') OR
   (job_lvl = 300 AND status = 'R')

Représentation de plusieurs clauses AND et OR dans le volet Critères

Le Concepteur de requêtes et de vues représente vos conditions de recherche dans le volet Critères (Visual Database Tools). Toutefois, dans certains cas, qui impliquent plusieurs clauses liées AND et OR, la représentation dans le volet Critères peut ne pas être ce que vous attendez. En outre, si vous modifiez votre requête dans le volet Critères ou Le volet Diagramme (Visual Database Tools), vous pouvez constater que votre instruction SQL a été modifiée par rapport à ce que vous avez entré.

En général, ces règles déterminent comment AND et OR les clauses s’affichent dans le volet Critères :

  • Toutes les conditions liées apparaissent AND dans la colonne de grille de filtre ou dans la même colonne Or... .

  • Toutes les conditions liées OR apparaissent dans des colonnes Or... distinctes.

  • Si le résultat logique d’une combinaison de ANDOR clauses est que celui-ci AND est distribué en plusieurs OR clauses, le volet Critères représente cela explicitement en répétant la AND clause autant de fois que nécessaire.

Par exemple, dans le volet SQL, vous pouvez créer une condition de recherche telle que la suivante, dans laquelle deux clauses liées sont AND prioritaires sur un troisième lié avec OR:

WHERE (hire_date < '01/01/95') AND
  (job_lvl = 100) OR
  (status = 'R')

Le Concepteur de requêtes et de vues représente cette WHERE clause dans le volet Critères comme suit :

Capture d’écran de la priorité de clause OR dans le volet Critères.

Toutefois, si les clauses liées OR sont prioritaires sur une AND clause, la AND clause est répétée pour chaque OR clause. Cela entraîne la distribution de la AND clause à chaque OR clause. Par exemple, dans le volet SQL, vous pouvez créer une WHERE clause telle que :

WHERE (hire_date < '01/01/95') AND
  ( (job_lvl = 100) OR
  (status = 'R') )

Le Concepteur de requêtes et de vues représente cette WHERE clause dans le volet Critères comme suit :

Capture d’écran de plusieurs clauses AND et OR dans le volet Critères.

Si les clauses liées OR n’impliquent qu’une seule colonne de données, le Concepteur de requêtes et de vues peut placer la clause entière OR dans une seule cellule de la grille, ce qui évite de devoir répéter la AND clause. Par exemple, dans le volet SQL, vous pouvez créer une WHERE clause telle que :

WHERE (hire_date < '01/01/95') AND
  ((status = 'R') OR (status = 'A'))

Le Concepteur de requêtes et de vues représente cette WHERE clause dans le volet Critères comme suit :

Capture d’écran des clauses OR liées définies dans le volet Critères.

Si vous apportez une modification à la requête (par exemple, modification de l’une des valeurs dans le volet Critères), le Concepteur de requêtes et de vues recrée l’instruction SQL dans le volet SQL. L’instruction SQL recréée ressemble à l’affichage du volet Critères plutôt que votre instruction d’origine. Par exemple, si le volet Critères contient des clauses distribuées AND , l’instruction résultante dans le volet SQL est recréée avec des clauses distribuées AND explicites. Pour plus d’informations, consultez Comment AND fonctionne avec plusieurs clauses OR plus haut dans cet article.