SQL Unterabfragen: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 64: | Zeile 64: | ||
#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 | ||
Version vom 17. Juli 2008, 01:26 Uhr
Dieser Artikel wird derzeit von einem Autor gründlich bearbeitet. Die Inhalte sind daher evtl. noch inkonsistent.
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