SQL Logique de Priorité des opérateurs: Et et Ou
Sont les deux énoncés ci-dessous équivalent?
SELECT [...]
FROM [...]
WHERE some_col in (1,2,3,4,5) AND some_other_expr
et
SELECT [...]
FROM [...]
WHERE some_col in (1,2,3) or some_col in (4,5) AND some_other_expr
Est-il une sorte de table de vérité que je pourrais utiliser pour vérifier cela?
- Essayez: T T F (T ou T) et f T (T et F). Le lecteur de code doivent être clairement en mesure de voir l'intention de l'auteur du code. Et l'écrivain doit s'assurer que la machine est en train de faire ce qu'il voulait. Entre parenthèses, l'alignement de tous les trois: lecteur, écrivain, et de la machine. 🙂
Vous devez vous connecter pour publier un commentaire.
And
a la préséance surOr
, donc, même sia <=> a1 Or a2
n'est pas le même que
parce que ce serait Exécuté comme
et ce que vous souhaitez, de leur faire la même, est la suivante (en utilisant des parenthèses pour redéfinir les règles de priorité):
Voici un exemple pour illustrer:
Pour ceux qui aiment à consulter les références (par ordre alphabétique):
AND
puisOR
priorité est la partie de la norme SQL?X or Y AND Z
et il a travaillé comme(X or Y) AND Z
declare @x tinyInt = 1
declare @y tinyInt = 0
declare @z tinyInt = 0
select case when @x=1 or @y=1 and @z=1 then'T' else 'F' end
select case when (@x=1 or @y=1) and @z=1 then'T' else 'F' end
Je vais ajouter 2 points:
Donc, les 2 expressions sont tout simplement pas d'égal.
Donc, quand vous vous cassez la clause en place, vous divisez la série Rup, et changé la priorité.
Vous pouvez utiliser des parenthèses pour redéfinir les règles de priorité.
Requête pour afficher un 3-variable booléenne expression de la table de vérité :
Résultats pour
(A=1) OR (B=1) AND (C=1)
:Résultats pour
(A=1) OR ( (B=1) AND (C=1) )
sont les mêmes.Résultats pour
( (A=1) OR (B=1) ) AND (C=1)
: