DQL

Aus FLBK-Wiki
Version vom 26. Februar 2026, 14:05 Uhr von Flbkwikiadmin (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „Die '''Data Query Language (DQL)''' ist der Teilbereich von SQL, der zur Abfrage und Zusammenstellung von Informationen aus Datenbanktabellen dient. Das Ergebnis einer DQL-Abfrage ist eine Relation, die in der Regel als temporäre Tabelle dargestellt wird. DQL-Abfragen basieren auf den Operationen der '''relationalen Algebra''' (Selektion, Projektion, Join etc.). == Datenbasis & Modellierung == Um komplexe Abfragen zu verstehen, ist die Kenntnis…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Die Data Query Language (DQL) ist der Teilbereich von SQL, der zur Abfrage und Zusammenstellung von Informationen aus Datenbanktabellen dient. Das Ergebnis einer DQL-Abfrage ist eine Relation, die in der Regel als temporäre Tabelle dargestellt wird.

DQL-Abfragen basieren auf den Operationen der relationalen Algebra (Selektion, Projektion, Join etc.).

Datenbasis & Modellierung

Um komplexe Abfragen zu verstehen, ist die Kenntnis des zugrundeliegenden Schemas (ER-Modell) notwendig.

Grundstruktur einer Abfrage

Die Basis jeder Abfrage besteht aus der Auswahl der Spalten (`SELECT`) und der Festlegung der Datenquelle (`FROM`).

Auswahl (SELECT) und Alias (AS)

Mit `SELECT` werden die gewünschten Spalten definiert. Mehrere Spalten werden durch Kommata getrennt.

  • `*`: Wählt alle Spalten einer Tabelle aus.
  • `AS`: Definiert einen Alias-Namen für eine Spalte oder Tabelle (erhöht die Lesbarkeit).
-- Beispiel mit Spaltenauswahl und Alias
SELECT Nachname AS Mitarbeitername, IdMitarbeiter 
FROM Mitarbeiter;

Datenherkunft (FROM)

Hinter `FROM` werden die betroffenen Tabellen gelistet. Bei mehreren Tabellen müssen Spaltennamen eindeutig durch Voranstellen des Tabellennamens (`Tabellenname.Spaltenname`) identifiziert werden.

---

Filtern und Sortieren

WHERE-Klausel (Filter)

Die `WHERE`-Klausel schränkt die Ergebnismenge ein. Nur Datensätze, die die Bedingung erfüllen (boolesche Logik), werden angezeigt.

  • Operatoren: `=`, `<>`, `<`, `>`, `BETWEEN`, `AND`, `OR`, `NOT`.
  • NULL-Werte: Da `NULL` kein Wert, sondern ein Zustand ist, erfolgt die Prüfung mit `IS NULL` oder `IS NOT NULL`.
-- Filter mit komplexer Bedingung und NULL-Prüfung
SELECT * FROM Termin 
WHERE (Rechnungsbetrag BETWEEN 50 AND 150) 
  AND Datum IS NOT NULL;

ORDER BY & LIMIT

  • ORDER BY: Sortiert die Ausgabe nach einer oder mehreren Spalten (`ASC` für aufsteigend, `DESC` für absteigend).
  • LIMIT: (In MySQL/PostgreSQL) Begrenzt die Anzahl der ausgegebenen Zeilen (Top-N-Abfrage).
SELECT * FROM Warenkorb 
ORDER BY datum DESC 
LIMIT 10;

---

Tabellen verknüpfen (JOINs)

JOINs ermöglichen es, Daten aus unterschiedlichen Tabellen über Fremdschlüsselbeziehungen zusammenzuführen.


INNER JOIN

Gibt nur die Datensätze zurück, bei denen in beiden Tabellen eine Übereinstimmung der Verknüpfungsbedingung vorliegt.

SELECT Salon.Name, Mitarbeiter.Nachname 
FROM Salon 
INNER JOIN Mitarbeiter ON Salon.IdSalon = Mitarbeiter.FKSalon;

LEFT / RIGHT OUTER JOIN

  • LEFT JOIN: Alle Datensätze der linken Tabelle werden angezeigt. Gibt es keine Entsprechung in der rechten Tabelle, werden die Spalten mit `NULL` aufgefüllt.
  • RIGHT JOIN: Funktioniert analog, jedoch werden alle Datensätze der rechten Tabelle garantiert angezeigt.

---

Gruppierung und Aggregate

Mit `GROUP BY` werden Datensätze mit gleichen Werten in bestimmten Spalten zusammengefasst. Dies wird meist mit Aggregatfunktionen genutzt:

  • `COUNT()`: Anzahl der Datensätze
  • `SUM()`: Summe
  • `AVG()`: Mittelwert
  • `MIN()` / `MAX()`: Extremwerte

> Wichtig: Um auf aggregierte Werte zu filtern, muss das Schlüsselwort HAVING anstelle von `WHERE` verwendet werden.

SELECT Mitarbeiter.Nachname, SUM(Termin.Rechnungsbetrag) AS Umsatz
FROM Mitarbeiter 
INNER JOIN Termin ON Mitarbeiter.MitarbeiterID = Termin.FKMitarbeiter
GROUP BY Mitarbeiter.MitarbeiterID
HAVING Umsatz > 100;

---

Fortgeschrittene Techniken

Unterabfragen (Subqueries)

Eine Abfrage kann innerhalb einer anderen Abfrage stehen. Sie muss in Klammern gesetzt werden.

-- Termine finden, deren Betrag unter dem Durchschnitt liegt
SELECT TerminID, Rechnungsbetrag 
FROM Termin 
WHERE Rechnungsbetrag < (SELECT AVG(Rechnungsbetrag) FROM Termin);

UNION

Vereint die Ergebnismengen zweier `SELECT`-Abfragen. Voraussetzungen: Gleiche Anzahl an Spalten und kompatible Datentypen.

SELECT nachname FROM Mitarbeiter
UNION
SELECT nachname FROM Kunde;

---

Logische Verarbeitungsreihenfolge

Für die Fehleranalyse ist es wichtig zu wissen, in welcher Reihenfolge das DBMS die Befehle intern abarbeitet:

{# class="wikitable" ! Reihenfolge !! Klausel !! Beschreibung |- | 1 || FROM || Tabellen und JOINs werden geladen. |- | 2 || WHERE || Zeilenweise Filterung der Rohdaten. |- | 3 || GROUP BY || Zusammenfassen von Zeilen zu Gruppen. |- | 4 || HAVING || Filterung der gebildeten Gruppen. |- | 5 || SELECT || Auswahl der Spalten und Berechnung von Aggregaten. |- | 6 || ORDER BY || Sortierung der fertigen Ergebnismenge. |- | 7 || LIMIT || Begrenzung der Ausgabeanzahl. |}