En complément de mon précédent article : "SQL Server - Comment exprimer dans une clause WHERE qu'un ensemble A est inclus dans un ensemble B ?", j'explique ici "Comment exprimer dans une clause WHERE que deux ensembles A et B sont égaux ?".
Soit E un ensemble et P(E) l’ensemble des parties de E.
La relation d’inclusion "Est un sous-ensemble de" ou "Est-contenu dans" est une relation d’ordre partielle dans P(E). P(E) étant l’ensemble des parties de E.
Selon la proposition de l’antisymétrie d’une relation d’ordre, nous pouvons annoncer ceci :
Proposition (antisymétrie) : Deux ensembles A et B sont égaux, si et seulement si, A est un sous-ensemble de B, et B est un sous-ensemble de A, c'est-à-dire :
A = B si et seulement si (A ⊂ B et B ⊂ A).
Donc pour exprimer, en SQL, dans une clause WHERE qu'un ensemble A est égal à un ensemble B, il suffit de procéder comme indiqué dans les exemples du paragraphe § II ci-dessous.
II – Mise en œuvre sous SQL Server
Ci-dessous 2 exemples de mise en œuvre :
Exemple 1 :
A = { 2, 3, 7 }
B = { 7, 2, 3 }
Pour exprimer, en SQL, dans une clause WHERE le fait que l’ensemble A doit être égal à l’ensemble B, il suffit de procéder comme indiqué dans l'exemple de la requête SQL ci-dessous :
SELECT 'A = B' AS Resultat WHERE NOT EXISTS ( SELECT * FROM ( -- Ensemble A Début... ( select 2 as col1 union all select 3 as col1 union all select 7 as col1 ) -- Ensemble A ...Fin EXCEPT -- Ensemble B Début... ( select 7 as col2 union all select 2 as col2 union all select 3 as col2 ) -- Ensemble B ...Fin ) Ensemble_A_Except_B ) AND NOT EXISTS ( SELECT * FROM ( -- Ensemble B Début... ( select 7 as col2 union all select 2 as col2 union all select 3 as col2 ) -- Ensemble B ...Fin EXCEPT -- Ensemble A Début... ( select 2 as col1 union all select 3 as col1 union all select 7 as col1 ) -- Ensemble A ...Fin ) Ensemble_B_Except_A )Résultat : (une ligne, c’est-à-dire, A est égal à B).
Resultat A = BExemple 2 :
A = { 2, 3, 7 }
B = { 7, 2, 11 }
Pour exprimer, en SQL, dans une clause WHERE le fait que l’ensemble A doit être égal à l’ensemble B, il suffit de procéder comme indiqué dans l'exemple de la requête SQL ci-dessous :
SELECT 'A = B' AS Resultat WHERE NOT EXISTS ( SELECT * FROM ( -- Ensemble A Début... ( select 2 as col1 union all select 3 as col1 union all select 7 as col1 ) -- Ensemble A ...Fin EXCEPT -- Ensemble B Début... ( select 7 as col2 union all select 2 as col2 union all select 11 as col2 ) -- Ensemble B ...Fin ) Ensemble_A_Except_B ) AND NOT EXISTS ( SELECT * FROM ( -- Ensemble B Début... ( select 7 as col2 union all select 2 as col2 union all select 11 as col2 ) -- Ensemble B ...Fin EXCEPT -- Ensemble A Début... ( select 2 as col1 union all select 3 as col1 union all select 7 as col1 ) -- Ensemble A ...Fin ) Ensemble_B_Except_A )Résultat : (aucune ligne, c’est-à-dire, A n'est pas égal à B).
Resultat
Aucun commentaire:
Enregistrer un commentaire
Remarque : Seul un membre de ce blog est autorisé à enregistrer un commentaire.