Oracle SQL Tutorial: Mengenoperationen

Erläuterungen zu Oracle Mengenoperationen (union, intersect, minus)


Oracle Schulung   



Inhalt Oracle SQL

SQL Datentypen

Constraints

Insert-Befehl

Update-Befehl

delete-Befehl

Select-Befehl

NULL-Werte

Skalare SQL-Funktionen

NLS

Joins

Subqueries

Baumstrukturen

Mengenoperationen

Temporäre Tabellen

Oracle SQL-Bücher



Impressum

Mengenoperationen dienen dazu, die Ergebnismengen zweier Abfragen zu einer zusammenzufassen. Die Mengen können vereinigt (UNION / UNION ALL), geschnitten (INTERSECT) oder von einander subtrahiert (MINUS) werden. Damit diese Operatoren angewendet werden können, müssen die selektierten Spalten in gleicher Anzahl und vom gleichen Typ ein. Die Zuordnung erfolgt über die Spaltenreihenfolge.

Es ist nahezu beliebig möglich diese Operatoren zu verketten oder zu verschachteln.

Operator UNION / UNION ALL 

Die Ergebnismenge einer UNION-Operation enthält alle Zeilen aus beiden Abfragen. Bei "UNION ALL" werden vollständig identische Zeilen nicht entfernt.

Beispiel: Saisonale Verteilung der Aufträge:  

select to_char(datum,'Q') Quartal, sum(anzahl*preis) Umsatz
from auftrag a, auftrag_pos p
where a.auftrag_nr= p.auftrag_nr
group by to_char(datum,'Q')

UNION

select '1' Quartal, 0 Umsatz
from dual
where not exists
(select auftrag_nr from auftrag where to_char(datum, 'Q')='1')

UNION

select '2' Quartal, 0 Umsatz
from dual
where not exists
(select auftrag_nr from auftrag where to_char(datum, 'Q')='2'

UNION

select '3' Quartal, 0 Umsatz
from dual
where not exists
(select auftrag_nr from auftrag where to_char(datum, 'Q')='3'

UNION

select '4' Quartal, 0 Umsatz
from dual
where not exists
(select auftrag_nr from auftrag where to_char(datum, 'Q')='4':

Weil die Hauptabfrage evtl. nicht alle möglichen Quartale liefert, werden über den "UNION"-Operator die fehlenden Quartale mit Umsatz 0 hinzugefügt. Damit diese Quartale nicht doppelt vorkommen, muss jeweils geprüft werden, ob das Quartal nicht schon in der Hauptabfrage existiert.

Operator INTERSECT 

Die Ergebnismenge enthält die Schnittmenge der Teilmengen, d.h. die Datensätze müssen in beiden Abfragen enthalten sein. Oft ist dieser Operator auch durch "EXISTS" oder "IN" realisierbar.

Beispiel: Artikel, die sowohl eingekauft als auch verkauft wurden:

select distinct artikel_nr
from bestell_pos p

INTERSECT

select distinct artikel_nr
from auftrag_pos;

Operator MINUS 

Die Ergebnismenge enthält die Differenz der Teilmengen, d.h. die Datensätze müssen in der ersten, dürfen aber nicht in der zweiten Abfragen enthalten sein. Oft ist dieser Operator auch durch "NOT EXISTS" oder "NOT IN" realisierbar

Beispiel: Artikel, die zwar eingekauft, nicht aber verkauft wurden:  

select distinct artikel_nr
from bestell_pos p

MINUS

select distinct artikel_nr
from auftrag_pos;

 

    Oracle Schulung



Stichwörter

Schnittmenge Mengenoperationen union all intersect minus Beispiel Beispiele



Werbung:

Fußballtor

Die preiswerte Oracle Schulung