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.
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.
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
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: