Initiation à SQL

Association de requêtes à l'aide d'opérateurs ensemblistes

Les opérateurs ensemblistes UNION, EXCEPT et INTERSECT permettent de fusionner dans une même requête plusieurs requêtes externes. Toutes les requêtes réunies par ces opérateurs ensemblistes sont exécutées et leurs résultats respectifs sont associés. Le résultat dépend de l'opérateur utilisé.

Opérateur UNION

Pour dériver une table résultat, l'opérateur UNION associe deux autres tables résultat (par exemple, TABLE1 et TABLE2) et élimine de ces tables les lignes en double. Lorsque ALL est utilisé avec UNION (UNION ALL), les lignes en double ne sont pas éliminées. Dans un cas comme dans l'autre, toutes les lignes de la table dérivée proviennent soit de TABLE1, soit de TABLE2.

Dans l'exemple suivant, la requête utilise l'opérateur UNION pour renvoyer les noms de toutes les personnes ayant un salaire supérieur à 21 000 F, ou qui ont des responsabilités de directeur et moins de 8 ans de présence dans la société :

(1)

     SELECT ID, NAME FROM STAFF WHERE SALARY > 21000
     UNION

(2)

          SELECT ID, NAME FROM STAFF WHERE JOB='Mgr' AND YEARS < 8
     ORDER BY ID
     

Voici les résultats des différentes requêtes :

(1)

                                                                          
     ID     NAME                                                             
     ------ ---------                                                        
        140 Fraye                                                            
        160 Molinare                                                         
        260 Jones                                                            
                                                                               

(2)

     ID     NAME      
     ------ --------- 
         10 Sanders   
         30 Marenghi  
        100 Plotz
        140 Fraye     
        160 Molinare  
        240 Daniels   

Le gestionnaire de bases de données associe les résultats des deux requêtes, élimine les doublons et renvoie le résultat final trié par ordre croissant.

                                            
     ID     NAME     
     ------ ---------
         10 Sanders  
         30 Marenghi 
        100 Plotz    
        140 Fraye    
        160 Molinare 
        240 Daniels  
        260 Jones    

Si, dans une requête, vous devez utiliser la clause ORDER BY avec un opérateur ensembliste, écrivez-la après la dernière requête. Le système effectue le classement de l'ensemble des réponses obtenues.

Si le nom d'une colonne diffère entre les deux tables, la table associant tous les résultats ne trouve pas la correspondance. Les colonnes sont alors numérotées dans l'ordre où elles apparaissent. Dans ce cas, pour que les résultats soient classés, il faut préciser les numéros de colonne dans une clause ORDER BY.

Opérateur EXCEPT

Pour dériver une table résultat, l'opérateur EXCEPT inclut toutes les lignes se trouvant dans TABLE1 mais non dans TABLE2 et il élimine les lignes en double. Si ALL est utilisé avec EXCEPT (EXCEPT ALL), les lignes en double ne sont pas éliminées.

Dans l'exemple suivant, la requête utilise l'opérateur EXCEPT pour renvoyer les noms de toutes les personnes gagnant plus de 21000 F, mais n'ayant pas le titre de directeur et justifiant de 8 ans de présence, ou plus, dans la société :

     SELECT ID, NAME FROM STAFF WHERE SALARY > 21000
     EXCEPT
     SELECT ID, NAME FROM STAFF WHERE JOB='Mgr' AND YEARS < 8
     

Les résultats des différentes requêtes se trouvent dans la section réservée à l'opérateur UNION. L'instruction ci-dessus donne le résultat suivant :

     ID     NAME     
     ------ ---------
        260 Jones    
 

Opérateur INTERSECT

Pour dériver une table résultat, l'opérateur INTERSECT n'inclut que les lignes existant à la fois dans TABLE1 et TABLE2 et élimine les lignes en double. Si ALL est utilisé avec INTERSECT (INTERSECT ALL), les lignes en double ne sont pas éliminées.

Dans l'exemple suivant, la requête utilise l'opérateur INTERSECT pour renvoyer les noms et les ID de toutes les personnes ayant un salaire supérieur à 21000 F, des responsabilités de directeur et moins de 8 ans de présence dans la société :

     SELECT ID, NAME FROM STAFF WHERE SALARY > 21000
     INTERSECT
     SELECT ID, NAME FROM STAFF WHERE JOB='Mgr' AND YEARS < 8

Les résultats des différentes requêtes se trouvent dans la section réservée à l'opérateur UNION. Voici le résultat de deux requêtes sur lesquelles l'opérateur INTERSECT a été appliqué :

     ID     NAME     
     ------ ---------
        140 Fraye    
        160 Molinare 
     

Lorsque vous utilisez les opérateurs UNION, EXCEPT et INTERSECT, gardez à l'esprit que :


[ Début de page | Page précédente | Page suivante | Table des matières | Index ]