Bonsoir,
mmbmm, considérez les tables de vérité fournie par Cinephil, en interprétant 1 et 0 respectivement comme VRAI et FAUX.
Complétons ces tables pour tenir compte de l’opérateur NOT :
1 2 3 4
| A | NOT A
--|------
1 | 0
0 | 1 |
Utilisons les symboles suivants pour les opérateurs :
+ pour OR
* pour AND
¬ pour NOT
Utilisons les symboles suivants :
A pour SAPSQ = SGPSQ
B pour SGNR1 LIKE 'COMM%'
C pour SGNR1 LIKE 'FRAIS%'
D pour SGNR1 LIKE 'FR %'
E pour SGNR1 LIKE 'DIVID%'
Dans votre 1re requête, la clause WHERE revient donc à ceci :
(1) A * ¬B * ¬C * ¬D * ¬E
Et pour la 2e requête :
(2) A (¬B + ¬C + ¬D + ¬E)
Selon les tables de vérité, si la valeur de vérité de A est FAUX, celle du résultat final est FAUX.
Si la valeur de vérité de A est VRAI, celle du résultat final dépend seulement des valeurs de vérité de B, C, D et E, auquel cas (1) et (2) peuvent être simplifiés :
(3) ¬B * ¬C * ¬D * ¬E
et
(4) ¬B + ¬C + ¬D + ¬E
Si par exemple la valeur de vérité est VRAI pour B et FAUX pour C, D et E, (3) prend la valeur de vérité :
(5) ¬VRAI * ¬FAUX * ¬FAUX * ¬FAUX
c'est-à-dire
(6) FAUX * VRAI * VRAI * VRAI
donc
(7) FAUX.
En revanche, (4) prend la valeur de vérité :
(8) ¬VRAI + ¬FAUX + ¬FAUX + ¬FAUX
c'est-à-dire
(9) FAUX + VRAI + VRAI + VRAI
donc
(10) VRAI
Il y a quand même une différence notoire entre (7) et (10)...
En y regardant de plus près, d'après votre requête, si la valeur de vérité de B est VRAI, celle de C, D et E est nécessairement FAUX puisque l'on ne peut pas vérifier simultanément SGNR1 LIKE 'COMM%' et SGNR1 LIKE 'FRAIS%', etc.
Autrement dit, les variables B, C, D et E ne sont pas indépendantes les unes des autres, mais au final, ceci n'a pas d'incidence sur la valeur de vérité du résultat.
Partager