Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Verbindung von Abfrage-Ausdrücken mit UNION


abfrageausdruck ::= { select_ausdruck | TABLE tabelle | join_ausdruck | (abfrageausdruck) }

                  [UNION [ALL | DISTINCT] abfrageausdruck ]



select_ausdruck

SELECT-Ausdruck, siehe Abschnitt „SELECT-Ausdruck".


TABLE tabelle

Tabellenabfrage, siehe Abschnitt „TABLE - Tabellenabfrage".


join_ausdruck

Join-Ausdruck, siehe Abschnitt „Join-Ausdruck".


(abfrageausdruck)

Unterabfrage, siehe Abschnitt „Unterabfrage".


UNION

Die UNION-Klausel verbindet zwei Abfrage-Ausdrücke. Die Ergebnistabelle enthält alle Sätze, die in der ersten oder zweiten Ergebnistabelle vorkommen. Sie können mehr als zwei Ergebnistabellen verbinden, wenn Sie die UNION-Klausel mehrmals verwenden.

Für die Verknüpfung von Abfrage-Ausdrücken mittels UNION müssen folgende Bedingungen erfüllt sein:

    • Die Ergebnistabellen der beiden UNION-Operanden müssen dieselbe Anzahl von Spalten haben und die Datentypen entsprechender Spalten müssen verträglich sein (siehe Abschnitt „Verträglichkeit von Datentypen"). Der Datentyp einer Ergebnisspalte ergibt sich aus den Regeln, die im Abschnitt „Datentyp der Ergebnisspalten bei UNION" beschrieben sind.

    • Wenn die entsprechenden Spalten der beiden Ausgangstabellen den gleichen Namen haben, erhält die Ergebnisspalte diesen Namen. Ansonsten ist der Name der Ergebnisspalte undefiniert.

    • Es dürfen nur einfache Spalten ausgewählt werden.

Mit der UNION-Klausel gebildete Abfrage-Ausdrücke sind nicht änderbar.


ALL

Doppelte Sätze in der Ergebnistabelle bleiben erhalten.


DISTINCT

Doppelte Sätze werden entfernt. Erfolgt keine Angabe von ALL oder DISTINCT, ist DIS-TINCT voreingestellt.


Im Gegensatz zum SELECT-Ausdruck ist bei UNION die Voreinstellung DISTINCT. Da eine Entfernung von doppelten Sätzen aufwändig sein kann, wird bei UNION die Einstellung ALL empfohlen, wenn die Anwendung auf das Entfernen doppelter Sätze verzichten kann.

Datentyp der Ergebnisspalten bei UNION

Bei der Verknüpfung von zwei Abfrage-Ausdrücken mit UNION ist der Datentyp der Ergebnisspalten durch folgende Regeln festgelegt.

  • Beide Ausgangsspalten haben den Datentyp CHAR:
    Ergebnisspalte hat Datentyp CHAR mit der größeren Länge.

  • Eine Ausgangsspalte hat Datentyp VARCHAR und die andere Ausgangsspalte CHAR oder VARCHAR:
    Die Ergebnisspalte hat Datentyp VARCHAR mit der größeren bzw. größeren maximalen Länge.

  • Beide Ausgangsspalten haben den Datentyp NCHAR:
    Ergebnisspalte hat Datentyp NCHAR mit der größeren Länge.

  • Eine Ausgangsspalte hat Datentyp NVARCHAR und die andere Ausgangsspalte NCHAR oder NVARCHAR:
    Die Ergebnisspalte hat Datentyp NVARCHAR mit der größeren bzw. größeren maximalen Länge.

  • Beide Ausgangsspalten haben ganzzahligen Typ oder Festpunktzahl-Typ (INT, SMALLINT, NUMERIC, DEC):
    Die Ergebnisspalte hat den Datentyp Ganz- oder Festpunktzahl.

    • Die Nachkommastellenzahl ist die größere der beiden Nachkommastellenzahlen der Ausgangsspalten.

    • Die Gesamtstellenzahl ist die größere der beiden Vorkommastellenzahlen plus die größere der beiden Nachkommastellenzahlen der beiden Ausgangsspalten, höchstens jedoch 31.

  • Eine Ausgangsspalte hat Gleitpunktzahl-Typ (REAL, DOUBLE, FLOAT), die andere hat einen beliebigen numerischen Datentyp:
    Die Ergebnisspalte hat den Datentyp DOUBLE PRECISION.

  • Beide Ausgangsspalten haben Zeitdatentyp:
    Beide Spalten müssen denselben Zeitdatentyp haben und die Ergebnisspalte hat auch diesen Datentyp.


Beispiele


Alle Auftragsnummern ermitteln, deren zugehöriger Auftragswert wenigstens 10.000 Euro beträgt oder deren Solldatum vor dem angegebenen Datum liegt.

SELECT anr FROM leistung GROUP BY anr
   HAVING SUM(lanz * lsatz * (1 + mwsatz)) > = 10000.00
   UNION DISTINCT
   SELECT anr FROM auftrag WHERE fertigsoll <= DATE '<date>'


Die Namen der Firmen sollen ermittelt werden, für die die Auftragsunterlagen bereits in der Ablage sind oder bei denen Leistungen vor dem angegebenen Datum erbracht wurden.

SELECT k.firma FROM kunde k, auftrag a WHERE k.knr = a.knr
   AND a.anr IN 
   (SELECT a.anr FROM auftrag a WHERE a.astnr > 4
                 UNION
                 SELECT DISTINCT l.anr FROM leistung l 
                        WHERE l.ldatum < DATE'<date>')

Der UNION-Ausdruck in der Unterabfrage liefert als Ergebnistabelle die Auftragsnummern 200 und 211.

Als Ergebnistabelle ergibt sich damit

firma

JIKO GmbH

Foreign Ltd