SQL Unterabfragen: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Kowa (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(5 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
=Definition= | =Definition= | ||
Unterabfragen, die auch Sub-Selects oder Sub-Querys genannt werden, können verwendet werden um andere SQL-Anweisungen | 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 | 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 | 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 | 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 | #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 | ||
=Quellen= | =Quellen= | ||
*[[Throll, M.; Bartosch, O. ( | *[[Throll, M.; Bartosch, O. (2007): Einstieg in SQL]] | ||
[[Kategorie:Glossar]] | [[Kategorie:Glossar]] | ||
[[Kategorie: | [[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
- die Unterabfrage wird in runden Klammer gesetzt
- wird als rechtsseitiger Ausdruck, Vergleich oder EXISTS-Bedingung eingesetzt
- ein einzelner Datensatz als Rückgabewert kann mit Vergleichsoperatoren verwendet werden
- bei mehreren Datensätzen verwendet man Mengenoperatoren
- ORDER BY und UNION ist in einer Unterabfrage unzulässig