SQL Unterabfragen: Unterschied zwischen den Versionen

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(5 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{In Bearbeitung}}
=Definition=
=Definition=
Unterabfragen, die auch Sub-Selects oder Sub-Querys genannt werden, können verwendet werden um andere SQL-Anweisungen, mit einzubinden.
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.
Dadurch können Ergebnisse einer Abfrage sofort in einer neuen Abfrage verwendet werden.


Zeile 15: Zeile 13:




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.
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.
Grundsätzlich gibt es zwei Varianten, die Unterabfragen liefern können. Entweder liefern sie einen Wert, also eine Zeile zurück oder mehrere Zeilen.
Zeile 28: Zeile 26:


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


<pre>
<pre>
Zeile 56: Zeile 54:




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




=Regeln für Unterabfragen=
=Regeln für Unterabfragen=
#die Unterabfrage wir in runden Klammer gesetzt
#die Unterabfrage wird in runden Klammer gesetzt
#wird als rechtsseitiger Ausdruck, Vergleich oder EXISTS-Bedingung eingesetzt
#wird als rechtsseitiger Ausdruck, Vergleich oder EXISTS-Bedingung eingesetzt
#ein einzelner Datensatz als Rückgabewert kann mit Vergleichsoperatoren verwendet werden
#ein einzelner Datensatz als Rückgabewert kann mit Vergleichsoperatoren verwendet werden
#bei mehreren Datensätzen verwendet man Mengenoperatoren
#bei mehreren Datensätzen verwendet man Mengenoperatoren
#ORDER BY ist in einer Unterabfrage unzulässig
#ORDER BY und UNION ist in einer Unterabfrage unzulässig
#in der Unterabfrage ist UNION nicht zulässig




=Quellen=
=Quellen=
*[[Throll, M.; Bartosch, O. (2005): Einstieg in SQL]]
*[[Throll, M.; Bartosch, O. (2007): Einstieg in SQL]]


[[Kategorie:Glossar]]
[[Kategorie:Glossar]]
[[Kategorie:Informatik]]
[[Kategorie:SQL]]

Aktuelle Version vom 9. Juli 2012, 18:38 Uhr

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.


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.


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.


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


Quellen