Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
ANDORrequêtes qui contiennent les deux.Relation logique entre les conditions et
ANDORles clauses.Comment le Concepteur de requêtes et de vues représente dans les requêtes du volet Critères qui contiennent à la fois
ANDetOR.
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
ANDdans la colonne de grille de filtre ou dans la même colonne Or... .Toutes les conditions liées
ORapparaissent dans des colonnes Or... distinctes.Si le résultat logique d’une combinaison de
ANDORclauses est que celui-ciANDest distribué en plusieursORclauses, le volet Critères représente cela explicitement en répétant laANDclause 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 :
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 :
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 :
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.