1. Sammansatta frågor
Med sammansatta frågor kan man kombinera resultaten av flera SELECT-satser. Dessa kombinationer kopplas matematiskt till mängdlära, med termer som union, snitt osv. Syntaxen för sammansatta frågor är följande:
SELECT ...
FROM ...
[WHERE (or other keyword) ...]
{UNION | UNION ALL | INTERSECT | MINUS}
SELECT ...
FROM ...
[WHERE (or other keyword) ...]
[ORDER BY ...]
|
ORDER BY ska stå sist och kommer att sortera resultatet av de två SELECT-satsernas sammanslagning, alltså det sista som görs innan resultatet når användaren. För att vi ska kunna ge exempel skapar vi en kopia av tabellen DEP som heter DEP_COPY. Vi har alltså följande innehåll i DEP:
SQL> SELECT * FROM dep;
DEP_PK DEP_NAME
---------- --------------------
1 Ledningsgruppen
2 Java-utveckling
3 Microsoft-utveckling
4 Arkitektgruppen
5 Handläggare
|
Vi skapar kopian DEP_COPY:
SQL> CREATE TABLE dep_copy AS
SELECT * FROM dep WHERE dep_pk<4;
Tabellen är skapad.
SQL> INSERT INTO dep_copy (dep_pk,dep_name) VALUES(6,'Gruvarbetare');
INSERT INTO dep_copy (dep_pk,dep_name) VALUES(7,'Läkare');
|
Vi har givit DEP_COPY ett annat innehåll, de två sista raderna skiljer sig från DEP:
SQL> SELECT * FROM dep_copy;
DEP_PK DEP_NAME
---------- --------------------
1 Ledningsgruppen
2 Java-utveckling
3 Microsoft-utveckling
6 Gruvarbetare
7 Läkare
|
2. UNION
UNION returnerar unika rader från två frågor. Om det finns några dubbletter kommer dessa att sorteras ut.
SQL> SELECT * FROM dep
UNION
SELECT * FROM dep_copy;
DEP_PK DEP_NAME
---------- --------------------
1 Ledningsgruppen
2 Java-utveckling
3 Microsoft-utveckling
4 Arkitektgruppen
5 Handläggare
6 Gruvarbetare
7 Läkare
7 rader.
|
Här ser man hur dubbletterna har tagits bort.
3. UNION ALL
UNION ALL fungerar som UNION med skillnaden att dubbletter inte tas bort:
SQL> SELECT * FROM dep
UNION ALL
SELECT * FROM dep_copy;
DEP_PK DEP_NAME
---------- --------------------
1 Ledningsgruppen
2 Java-utveckling
3 Microsoft-utveckling
4 Arkitektgruppen
5 Handläggare
1 Ledningsgruppen
2 Java-utveckling
3 Microsoft-utveckling
6 Gruvarbetare
7 Läkare
10 rader.
|
4. INTERSECT
Med INTERSECT kan man få ut alla rader som finns i båda tabellerna (snittet):
SQL> SELECT * FROM dep
INTERSECT
SELECT * FROM dep_copy;
DEP_PK DEP_NAME
---------- --------------------
1 Ledningsgruppen
2 Java-utveckling
3 Microsoft-utveckling
|
5. MINUS
Med MINUS returneras de rader som kommer från den första SELECT-satsen minus de som returneras av den andra SELECT-satsen.
SQL> SELECT * FROM dep
MINUS
SELECT * FROM dep_copy;
DEP_PK DEP_NAME
---------- --------------------
4 Arkitektgruppen
5 Handläggare
|