📖DQL - Komplexere Abfragen
⚡️ Ausprobieren
Öffne diese Beispiel-Datenbank in einem neuen Fenster: https://www.w3schools.com/sql/trysqlserver.asp?filename=trysql_func_sqlserver_concat
Hier kannst du direkt im Browser SQL Statements ausprobieren. Probiere die Beispiele hier mit einem ⚡️-Symbol aus.
Aggregatfunktionen
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
-- Kleinster, grösster und durchschnittlicher Wert einer Spalte
SELECT AVG(spalte1) AS Durchschnitt,
MIN(spalte1) AS Minimum,
MAX(spalte1) AS Maximum
FROM tabelle;
-- Anzahl Werte einer Spalte
SELECT COUNT(*) AS Anzahl
FROM tabelle;
-- Anzahl Werte einer Spalte (inkl. NULL-Werte)
SELECT COUNT(ISNULL(spalte1,'leer')) AS Anzahl
FROM tabelle;⚡️ Ausprobieren
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.
Gruppierung
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 derGROUP BY-Klausel enthalten sein
Gruppierung einschränken
Um Gruppierte Werte einzuschränken, gibt es die HAVING Klausel. Dabei gilt zu merken:
Die
WHERE-Klausel kommt vor der GruppierungHAVINGschränkt nach der Gruppierung ein (Selektionskriterium auf Aggregate)
⚡️ Ausprobieren
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
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.
Regeln für Unterabfragen
Unterabfragen dürfen bei single-row-Vergleichsoperatoren nur eine Spalte und eine Ergebniszeile liefern (sonst kommt es zu einem Fehler)
Bei Verwendung von
IN,ANYundALLkönnen mehrere Ergebniszeilen geliefert werdenUnterabfragen 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
Korrelierte Unterabfragen
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).
⚡️ Ausprobieren
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
Unterabfragen in der FROM-Klausel
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.
Mengen-Operationen
UNION [ALL]Verbindet mehrereSELECT-Anweisungen zu einem GesamtergebnisALL: Duplikate aus den verschiedenen Anweisungen werden nicht unterdrückt.INTERSECTBringt alle Zeilen, die jede der SELECT-Anweisungen zurückliefert. Dies ist die Schnittmenge.EXCEPTBringt alles aus der ersten SELECT-Anweisung, das in der folgenden Anweisung nicht vorkommt. Unter OracleMINUS.
Regeln für Mengen-Operationen
Die erste
SELECT-Anweisung gibt vor:Spaltennamen
Reihenfolge
Datentypen
Spaltenanzahl und Datentypen müssen bei allen Anweisungen übereinstimmen
ORDER BYkommt erst nach der letzten AnweisungWHERE-Klausel in jeder Anweisung separat
⚡️ Ausprobieren
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.
Last updated
Was this helpful?