Kom godt i gang med SQL

Kombinér forespørgsler vha. sammenkædningsoperatorer

Med sammenkædningsoperatorerne UNION, EXCEPT og INTERSECT kan du kombinere to eller flere ydre forespørgsler til én forespørgsel. Hver forespørgsel, som sammenkædningsoperatorne forbinder, udføres, og resultaterne kombineres. Hver operator giver et forskelligt resultat.

Operatoren UNION

UNION-operatoren udleder en resultattabel ved at kombinere to andre resultattabeller, f.eks. TABEL1 og TABEL2, og eliminere eventuelle dubletter i tabellerne. Hvis du bruger ALL sammen med UNION, dvs. UNION ALL, elimineres dubletterne ikke. I begge tilfælde stammer hver række i den afledte tabel fra TABEL1 eller TABEL2.

I nedenstående eksempel på UNION-operatoren vises navnet på alle medarbejdere, hvis løn er højere end 21.000, eller som er ledere og har været ansat i under 8 år:

(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
     

Resultatet af de enkelte forespørgsler er:

(1)

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

(2)

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

Databasesystemet kombinerer resultaterne af de to forespørgsler, eliminerer dubletterne og viser det endelige resultat i stigende rækkefølge.

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

Hvis du bruger ORDER BY-udtrykket i en forespørgsel sammen med en sammenkædningsoperator, skal du skrive den efter den sidste forespørgsel. Systemet sorterer de kombinerede resultatrækker.

Hvis kolonnenavnene i de to tabeller ikke er ens, vises der i den kombinerede resultattabel ikke noget navn på de tilsvarende kolonner. I stedet nummereres kolonnerne i den rækkefølge, de vises i. Med andre ord, hvis resultattabellen skal sorteres, skal du angive kolonnenummeret i ORDER BY-udtrykket.

Operatoren EXCEPT

EXCEPT-operatoren udleder en resultattabel ved at medtage alle de rækker, som findes i TABEL1, men ikke i TABEL2, og eliminere alle dubletter. Hvis du bruger ALL sammen med EXCEPT, dvs. EXCEPT ALL, elimineres dubletterne ikke.

I nedenstående eksempel på EXCEPT-operatoren vises navnet på alle medarbejdere, som tjener mere end 21.000, men som ikke har en lederstilling, og som har været ansat i 8 år eller længere.

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

Resultatet af de enkelte forespørgsler vises i afsnittet om UNION. Ovenstående sætning giver følgende resultat:

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

Operatoren INTERSECT

INTERSECT-operatoren udleder en resultattabel ved kun at medtage de rækker, som findes i både TABLE1 og TABLE2 og eliminere alle dubletter. Hvis du bruger ALL sammen med INTERSECT, dvs. INTERSECT ALL, elimineres dubletterne ikke.

I nedenstående eksempel på INTERSECT-operatoren vises navn og id på medarbejdere, som tjener mere end 21.000, har en lederstilling og har været ansat i under 8 år.

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

Resultatet af de enkelte forespørgsler vises i afsnittet om UNION. Resultatet af de to forespørgsler med INTERSECT er:

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

Når du bruger operatorerne UNION, EXCEPT og INTERSECT, skal du huske følgende:


[ Øverst på siden | Forrige side | Næste side | Indholdsfortegnelse | Stikordsregister ]