DQL: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| Zeile 4: | Zeile 4: | ||
[[Datei:DQLDatenbasisERM.jpg|mini|ERM-Modell zur Datenbasis]] | [[Datei:DQLDatenbasisERM.jpg|mini|ERM-Modell zur Datenbasis]] | ||
[[Datei:DQLDatenbasisTabellen.jpg|mini]] | [[Datei:DQLDatenbasisTabellen.jpg|mini]] | ||
Um die Syntax von SQL-Abfragen nachvollziehen zu können, wird eine Datenbasis bereitgestellt. Das Entity Relationship Modell liefert eine Übersicht aller vorliegenden Tabellen (siehe Bilder). | |||
== Grundlegende Abfragen == | == Grundlegende Abfragen == | ||
Version vom 26. Februar 2026, 14:21 Uhr
Die Data Query Language (DQL) ermöglicht es, Informationen aus verschiedenen Tabellen abzufragen. Das Ergebnis ist eine Relation, die meist als Tabelle angezeigt wird.
Datenbasis


Um die Syntax von SQL-Abfragen nachvollziehen zu können, wird eine Datenbasis bereitgestellt. Das Entity Relationship Modell liefert eine Übersicht aller vorliegenden Tabellen (siehe Bilder).
Grundlegende Abfragen
Einfache Abfrage (Projektion)
SELECT * FROM Mitarbeiter;
Ergebnis:
| IdMitarbeiter | Nachname | Vorname | FkSalon |
|---|---|---|---|
| 1 | Krause | Sabine | 1 |
| 2 | Schrotter | Claudia | 1 |
| 3 | Hermann | Markus | 1 |
| 4 | Krause | Christoph | 2 |
| 5 | Bitter | Manuel | 2 |
Alias und Spaltenauswahl
SELECT IdMitarbeiter AS Mitarbeiternr, Nachname FROM Mitarbeiter;
Ergebnis:
| Mitarbeiternr | Nachname |
|---|---|
| 1 | Krause |
| 2 | Schrotter |
| 3 | Hermann |
| 4 | Krause |
| 5 | Bitter |
Filtern von Daten (WHERE)
Einfacher Filter
SELECT Vorname, Nachname FROM Mitarbeiter WHERE Nachname = 'Krause';
Ergebnis:
| Vorname | Nachname |
|---|---|
| Sabine | Krause |
| Christoph | Krause |
Komplexer Filter
SELECT Vorname, Nachname FROM Mitarbeiter
WHERE (Nachname = 'Krause' OR Vorname = 'Manuel') AND IdMitarbeiter <> 1;
Ergebnis:
| Vorname | Nachname | ||
|---|---|---|---|
| Christoph | Krause | Manuel | Bitter |
Tabellen verknüpfen (JOINs)
Hier werden die Tabellen `Salon` (Tabelle A) und `Mitarbeiter` (Tabelle B) verknüpft.
Inner Join (Schnittmenge)
SELECT Salon.Name, Mitarbeiter.Nachname
FROM Salon INNER JOIN Mitarbeiter ON Salon.IdSalon = Mitarbeiter.FKSalon;
Ergebnis: (Salon 3 erscheint nicht, da kein Mitarbeiter zugeordnet ist)
| Name | Nachname |
|---|---|
| Friedrich List Frisuren | Krause |
| Friedrich List Frisuren | Schrotter |
| Friedrich List Frisuren | Hermann |
| Hammer Haare | Krause |
| Hammer Haare | Bitter |
Left Join (Inklusive linker Tabelle)
SELECT Salon.Name, Mitarbeiter.Nachname
FROM Salon LEFT JOIN Mitarbeiter ON Salon.IdSalon = Mitarbeiter.FKSalon;
Ergebnis: (Salon 3 wird mit NULL aufgeführt)
| Name | Nachname |
|---|---|
| Friedrich List Frisuren | Krause |
| Friedrich List Frisuren | Schrotter |
| Friedrich List Frisuren | Hermann |
| Hammer Haare | Krause |
| Hammer Haare | Bitter |
| Kaiserschnitt | NULL |
Right Join (Inklusive rechter Tabelle)
SELECT Salon.Name, Mitarbeiter.Nachname
FROM Salon RIGHT JOIN Mitarbeiter ON Salon.IdSalon = Mitarbeiter.FKSalon;
Gruppierung und Aggregate
SELECT SUM(Rechnungsbetrag) AS Umsatz, Mitarbeiter.Nachname
FROM Termin
INNER JOIN Mitarbeiter ON Termin.FKMitarbeiter = Mitarbeiter.IdMitarbeiter
GROUP BY Mitarbeiter.IdMitarbeiter
HAVING Umsatz > 100;
Ergebnis:
| Umsatz | Mitarbeiter |
|---|---|
| 106 | Schrotter |
(Berechnung: Claudia Schrotter [ID 2] hatte Termine über 29 und 77 Euro.)