SQL Erste Schritte

Kombinieren von Abfragen durch Gruppenoperatoren

Die Gruppenoperatoren UNION, EXCEPT und INTERSECT ermöglichen die Kombination von zwei oder mehr übergeordneten Abfragen in einer einzigen Abfrage. Jede durch diese Gruppenoperatoren verbundene Abfrage wird ausgeführt, und die einzelnen Ergebnisse werden kombiniert. Jeder Operator erzeugt ein anderes Ergebnis.

Operator UNION

Der Operator UNION leitet eine Ergebnistabelle ab, indem zwei andere Ergebnistabellen (z. B. TABLE1 und TABLE2) kombiniert und alle in den Tabellen doppelt vorhandenen Zeilen eliminiert werden. Wird UNION zusammen mit ALL (d. h. UNION ALL) verwendet, werden doppelt vorhandene Zeilen nicht eliminiert. In beiden Fälle stammt jede Zeile der abgeleiteten Tabelle entweder aus der Tabelle TABLE1 oder aus der Tabelle TABLE2.

Im folgenden Beispiel für den Operator UNION gibt die Abfrage die Namen aller Personen zurück, deren Gehalt größer als $ 21.000 ist oder die eine Führungsposition innehaben und vor weniger als 8 Jahren eingestellt wurden:

(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
     

Die Ergebnisse der einzelnen Abfragen lauten:

(1)

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

(2)

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

Der Datenbankmanager kombiniert die Ergebnisse beider Abfragen, eliminiert gleiche Werte und gibt das Endergebnis aufsteigend sortiert zurück.

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

Wenn Sie die Klausel ORDER BY in einer Abfrage mit einem Gruppenoperator verwenden, muß die Klausel nach der letzten Abfrage eingegeben werden. Das System wendet die Sortierung auf die kombinierte Antwortgruppe an.

Wenn sich die Spaltennamen in den beiden Tabellen unterscheiden, enthält die kombinierte Ergebnistabelle keine Namen für die entsprechenden Spalten. Die Spalten werden statt dessen in der Reihenfolge ihres Auftretens numeriert. Wenn Sie daher die Ergebnistabelle sortieren wollen, müssen Sie in der Klausel ORDER BY die Spaltennummer angeben.

Operator EXCEPT

Der Operator EXCEPT leitet eine Ergebnistabelle ab, indem alle Zeilen aufgenommen werden, die in der Tabelle TABLE 1, aber nicht in der Tabelle TABLE2 enthalten sind, und alle doppelt vorhandenen Zeilen eliminiert werden. Wird EXCEPT zusammen mit ALL verwendet (EXCEPT ALL), werden die doppelt vorhandenen Zeilen nicht eliminiert.

Im folgenden Beispiel für den Operator EXCEPT gibt die Abfrage die Namen aller Personen zurück, die mehr als $ 21.000 verdienen, aber keine Führungsposition innehaben und vor 8 oder mehr Jahren eingestellt wurden.

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

Die Ergebnisse der einzelnen Abfragen sind im Abschnitt über den Operator UNION aufgeführt. Die vorstehende Anweisung erzeugt das folgende Ergebnis:

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

Operator INTERSECT

Der Operator INTERSECT leitet eine Ergebnistabelle ab, indem nur Zeilen aufgenommen werden, die sowohl in der Tabelle TABLE1 als auch in der Tabelle TABLE2 enthalten sind, und alle doppelt vorhandenen Zeilen eliminiert werden. Wird INTERSECT zusammen mit ALL verwendet (INTERSECT ALL), werden die doppelt vorhandenen Zeilen nicht eliminiert.

Im folgenden Beispiel für den Operator INTERSECT gibt die Abfrage den Namen und die ID aller Mitarbeiter zurück, deren Gehalt mehr als $ 21.000 beträgt, die eine Führungsposition innehaben und die vor weniger als 8 Jahren eingestellt wurden.

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

Die Ergebnisse der einzelnen Abfragen sind im Abschnitt über den Operator UNION aufgeführt. Werden die beiden Abfragen durch den Operator INTERSECT kombiniert, lautet die Ausgabe:

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

Bei der Verwendung der Operatoren UNION, EXCEPT und INTERSECT sollte folgendes beachtet werden:


[ Seitenanfang | Vorherige Seite | Nächste Seite | Inhaltsverzeichnis | Index ]