DQL: Unterschied zwischen den Versionen

Aus FLBK-Wiki
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]]
Basierend auf dem bereitgestellten Schema des Friseursalons ergeben sich folgende Tabelleninhalte:
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

ERM-Modell zur 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)

A B

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)

A B

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)

A B

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.)