SQL Unterabfragen: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
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. | ||
Zeile 35: | Zeile 37: | ||
SELECT AVG(rechnungsbetrag) FROM bestellung | SELECT AVG(rechnungsbetrag) FROM bestellung | ||
); | ); | ||
</pre | </pre> | ||
Zeile 49: | Zeile 51: | ||
WHERE gehalt < ALL | WHERE gehalt < ALL | ||
( | ( | ||
SELECT gehalt FROM mitarbeiter WHERE abteilung = 5 | |||
); | ); | ||
</pre> | </pre> | ||
Zeile 67: | Zeile 69: | ||
=Quellen= | =Quellen= | ||
*[[Throll, M.; Bartosch, O. (2005): Einstieg in SQL]] | |||
[[Kategorie:Glossar]] | |||
[[Kategorie:Informatik]] |
Version vom 16. Juli 2008, 16:15 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 verwenden für Aggregatfunktionen wie MAX oder AVG.
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 wir 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 ist in einer Unterabfrage unzulässig
- in der Unterabfrage ist UNION nicht zulässig