DQL - Komplexere Abfragen
Last updated
Was this helpful?
Last updated
Was this helpful?
Öffne diese Beispiel-Datenbank in einem neuen Fenster:
Hier kannst du direkt im Browser SQL Statements ausprobieren. Probiere die Beispiele hier mit einem ⚡️-Symbol aus.
Mit Aggregatfunktionen werden Werte über mehrere Datenzeilen hinweg zusammengefasst (Multiple-Row-Funktionen). NULL
-Werte werden dabei ignoriert.
Ohne Gruppierung: Alle Ergebniszeilen werden zu einem Wert zusammengefasst.
Mit Gruppierung: Ein Ergebniswert pro Gruppe.
Funktion
Beschreibung
SUM()
Summe
MIN()
Kleinster Wert
MAX()
Grösster Wert
COUNT()
Anzahl (die nicht NULL
sind)
AVG()
Durchschnittswert
STDEV()
Standardabweichung
VAR()
Varianz
Schreibe ein SQL-Statement, welches den Durchschnittspreis, den kleinsten und grössten Preis aller Produkte anzeigt.
Schreibe ein SQL-Statement, welches die Anzahl der Produkte zurück gibt, die teurer als 40$ sind.
Gruppenbildung nach einer oder mehreren Spalten
Für jede Ausprägung wird eine Gruppe und damit eine Ergebniszeile gebildet
Jede Spalte ohne Aggregatfunktion in der SELECT
-Klausel muss in der GROUP BY-
Klausel enthalten sein
Um Gruppierte Werte einzuschränken, gibt es die HAVING
Klausel. Dabei gilt zu merken:
Die WHERE
-Klausel kommt vor der Gruppierung
HAVING
schränkt nach der Gruppierung ein (Selektionskriterium auf Aggregate)
Schreibe ein SQL-Statement, welches den Durchschnittspreis, den kleinsten und grössten Preis aller Produkte anzeigt, gruppiert nach Kategorie.
Ergänze das Statement, sodass nur noch die Gruppen angezeigt werden, bei welchen der Durchschnittspreis über 25$ liegt.
Unterabfragen kommen immer dann zum Einsatz, wenn das Ergebnis einer Abfrage als Kriterium für eine andere Abfrage verwendet werden muss. Unterabfragen werden immer in runde Klammern gesetzt und stehen immer auf der rechten Seite des Vergleichsausdrucks.
Unterabfragen dürfen bei single-row-Vergleichsoperatoren nur eine Spalte und eine Ergebniszeile liefern (sonst kommt es zu einem Fehler)
Bei Verwendung von IN
, ANY
und ALL
können mehrere Ergebniszeilen geliefert werden
Unterabfragen können auf mehreren Ebenen geschachtelt werden
Die innere Abfrage wird immer einmal vor der äusseren Abfrage gestartet
Ein Unterabfrage kann sich auf dieselbe Tabelle wie die Hauptabfrage oder auch auf beliebige andere Tabellen beziehen
Bei der korrelierten Unterabfrage wird in der Unterabfrage auf eine Spalte aus der Hauptabfrage verwiesen. Aus Performancegründen nicht immer sinnvoll (JOIN unter Umständen geeigneter).
Schreibe ein SQL-Statement, welches alle Produkte ausgibt, die teurer als der Durchschnittspreis sind.
Alle Produkte, deren Supplier aus den USA kommt.
Produkte, welche total schon mehr als 350 mal bestellt wurden
JOIN
mit einer Unterabfrage. Die gejointe Unterabfrage kann als virtuelle Tabelle betrachtet werden und wird auch als Inline-View bezeichnet. Wichtig ist, dass die Inline-View einen Alias-Namen erhält.
UNION [ALL]
Verbindet mehrere SELECT
-Anweisungen zu einem Gesamtergebnis ALL
: Duplikate aus den verschiedenen Anweisungen werden nicht unterdrückt.
INTERSECT
Bringt alle Zeilen, die jede der SELECT-Anweisungen zurückliefert. Dies ist die Schnittmenge.
EXCEPT
Bringt alles aus der ersten SELECT-Anweisung, das in der folgenden Anweisung nicht vorkommt. Unter Oracle MINUS
.
Die erste SELECT
-Anweisung gibt vor:
Spaltennamen
Reihenfolge
Datentypen
Spaltenanzahl und Datentypen müssen bei allen Anweisungen übereinstimmen
ORDER BY
kommt erst nach der letzten Anweisung
WHERE
-Klausel in jeder Anweisung separat
Gebe die Namen und Adressen von allen Kunden und Lieferanten in einer Tabelle aus.
Gebe alle Städte aus, in welchen Kunden leben, aber keine Lieferanten.