SQL Unterabfragen

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Wechseln zu:Navigation, Suche

1 Definition

Unterabfragen, die auch Sub-Selects oder Sub-Querys genannt werden, können verwendet werden, um andere SQL-Anweisungen mit einzubinden. Dadurch können Ergebnisse einer Abfrage sofort in einer neuen Abfrage verwendet werden.

	SELECT 	kundennr, bestelldatum, rechnungsbetrag
	FROM   	bestellung
	WHERE 	rechnungsbetrag =
			(
			SELECT max(rechnungsbetrag) 	FROM	 bestellung
			);


Hier wird in der WHERE-Bedingung eine SELECT-Abfrage formuliert, die sich komplett in runden Klammern befindet. Das Ergebnis dieser Abfrage gibt genau einen Wert zurück, der mit dem Rechnungsbetrag verglichen wird. Der Rückgabewert muss folglich zum Selektionskriterium passen.

Grundsätzlich gibt es zwei Varianten, die Unterabfragen liefern können. Entweder liefern sie einen Wert, also eine Zeile zurück oder mehrere Zeilen. Dabei können die Abfragen eigenständig ausgeführt werden, ohne Beeinflussung durch die Hauptabfrage oder umgekehrt. Sie lassen sich auch in DELETE-, UPDATE- und INSERT-Anweisungen verwenden.


2 Unterabfragen mit einem Rückgabewert

Hier gelten folgende Bedingungen: Die Unterabfrage gibt genau einen Wert zurück. Die Unterabfrage gibt genau eine Spalte zurück.

Bei dieser Art von Abfrage wird hauptsächlich mit Vergleichsoperatoren wie =, >, >=, < oder <= gearbeitet. Man kann diese Unterabfragen auch gut für Aggregatfunktionen wie MAX oder AVG verwenden.

	SELECT 	bestellnr
	FROM   	bestellung
	WHERE 	rechnungsbetrag >
			(
			SELECT AVG(rechnungsbetrag) 	FROM	 bestellung
			);	


Hier wird mit SELECT AVG(rechnungsbetrag) der durchschnittliche Rechnungsbetrag ermittelt.


3 Unterabfragen mit mehreren Rückgabewerten

Nun ist der Einsatz von Mengenoperatoren (vo ALL, vo ANY, IN, EXISTS) notwendig, da jetzt mit mehreren Werten verglichen wird.

	SELECT 	name, gehalt, abteilung
	FROM   	mitarbeiter
	WHERE 	gehalt < ALL
			(
			 SELECT gehalt 	FROM	 mitarbeiter	WHERE abteilung = 5
			);


Die Unterabfrage gibt nun alle Gehälter aus der Abteilung 5 aus. ALL vergleicht, ob die Bedingung auf alle Zeilen der Unterabfrage zutrifft. Ob es also ein Gehalt gibt, das kleiner ist als alle Gehälter aus der Abteilung 5.


4 Regeln für Unterabfragen

  1. die Unterabfrage wird in runden Klammer gesetzt
  2. wird als rechtsseitiger Ausdruck, Vergleich oder EXISTS-Bedingung eingesetzt
  3. ein einzelner Datensatz als Rückgabewert kann mit Vergleichsoperatoren verwendet werden
  4. bei mehreren Datensätzen verwendet man Mengenoperatoren
  5. ORDER BY und UNION ist in einer Unterabfrage unzulässig


5 Quellen