Les deux énoncés ci-dessous sont-ils équivalents?
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
Y a-t-il une sorte de table de vérité que je pourrais utiliser pour vérifier cela?
Réponses:
And
a préséance surOr
, donc, même sia <=> a1 Or a2
n'est pas la même chose que
parce que ce serait exécuté comme
et ce que vous voulez, pour les rendre identiques, est le suivant (en utilisant des parenthèses pour remplacer les règles de priorité):
Voici un exemple pour illustrer:
Pour ceux qui aiment consulter les références (par ordre alphabétique):
la source
AND
alors laOR
priorité fait partie de la norme SQL?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
J'ajouterai 2 points:
Ainsi, les 2 expressions ne sont tout simplement pas égales.
Ainsi, lorsque vous rompez la clause IN, vous divisez les OR série et changez la priorité.
la source
Vous pouvez utiliser des parenthèses pour remplacer les règles de priorité.
la source
Requête pour afficher une table de vérité d'expression booléenne à 3 variables:
Résultats pour
(A=1) OR (B=1) AND (C=1)
:Les 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)
:la source