SQL Server - Comment exprimer dans une clause WHERE que deux ensembles A et B sont égaux ?

I – Prolégomènes
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 = B
Exemple 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.