🎓 Ihr werdet Lehrkräfte!
SQL-Aufgaben selbst erstellen und anderen erklären
Wir nutzen weiterhin unsere Online-Shop-Datenbank aus den letzten Stunden. Öffne SQLite Online und lade die Datenbank.
JOIN – Tabellen verbinden
▾
JOIN kannst du Daten aus zwei oder mehr Tabellen gleichzeitig abfragen und miteinander verbinden. Das ist nötig, wenn die gesuchten Informationen auf verschiedene Tabellen verteilt sind.
Beispiel: In der Tabelle Orders steht nur die CustomerID, nicht der Name. Mit JOIN holen wir den Namen aus Customers.
| Orders (Auszug) | Customers (Auszug) | ||
|---|---|---|---|
| OrderID | CustomerID | CustomerID | CustomerName |
| 10248 | 90 | 90 | Vins et alcools Chevalier |
| 10249 | 81 | 81 | Toms Spezialitäten |
Die CustomerID ist der gemeinsame Schlüssel – damit verbinden wir die beiden Tabellen.
| Code-Teil | Was bedeutet das? |
|---|---|
SELECT Customers.CustomerName, ... |
Welche Spalten soll das Ergebnis zeigen? Da wir aus zwei Tabellen abfragen, schreiben wir Tabellenname.Spaltenname, damit SQL weiß, woher die Spalte kommt. |
FROM Orders |
Die erste (Haupt-)Tabelle, aus der wir starten. Hier beginnt SQL zu lesen. |
JOIN Customers |
Die zweite Tabelle, die wir dazunehmen und mit der ersten verbinden wollen. |
ON Orders.CustomerID = Customers.CustomerID |
Die Verbindungsbedingung: Beide Tabellen teilen sich die CustomerID. SQL sucht Zeilen, bei denen diese ID übereinstimmt, und fügt sie zusammen. |
FROM ist die linke Seite, JOIN die rechte – und ON ist der Zahn, der beide zusammenhält.🎯 Noch ein Beispiel: Welcher Mitarbeiter hat welche Bestellung bearbeitet?
FROM Orders
JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
ORDER BY Orders.OrderDate DESC
LIMIT 10;
— Zeige die 10 neuesten Bestellungen mit dem Namen des Mitarbeiters
CustomerID), musst du immer angeben, von welcher Tabelle sie stammt: Orders.CustomerIDZeige den Produktnamen (
Products.ProductName) und die bestellte Menge (OrderDetails.Quantity) für alle Bestelldetails an.Tipp: Verbinde
OrderDetails mit Products über ProductID.
| Funktion | Bedeutung | Beispiel |
|---|---|---|
COUNT(*) | Anzahl der Zeilen zählen | Wie viele Bestellungen? |
SUM(Spalte) | Summe berechnen | Gesamtmenge aller Bestellungen |
AVG(Spalte) | Durchschnitt berechnen | Durchschnittspreis der Produkte |
MAX(Spalte) | Größten Wert finden | Teuerster Preis |
MIN(Spalte) | Kleinsten Wert finden | Günstigster Preis |
📝 Beispiel 1: Wie viele Kunden gibt es insgesamt? – Zeile für Zeile erklärt:
| Code-Teil | Was bedeutet das? |
|---|---|
COUNT(*) |
Zählt alle Zeilen in der Tabelle. Das * steht für „alle“ – egal was in den Spalten steht. |
AS AnzahlKunden |
Gibt der Ergebnisspalte einen eigenen Namen (Alias). Statt einer unleserlichen Spaltenüberschrift steht dann „AnzahlKunden“ im Ergebnis. |
FROM Customers |
Sagt SQL, in welcher Tabelle gezählt werden soll. |
📝 Beispiel 2: Mit GROUP BY – Pro Gruppe zählen:
Wie viele Kunden gibt es aus jedem Land?
| Code-Teil | Was bedeutet das? |
|---|---|
SELECT Country, COUNT(*) AS Anzahl |
Wir wollen den Ländernamen sehen und dazu, wie oft er vorkommt (gezählt mit COUNT). |
FROM Customers |
Wir schauen in der Tabelle Customers nach. |
GROUP BY Country |
SQL gruppiert alle Zeilen mit demselben Land zusammen – danach zählt COUNT pro Gruppe. Wichtig: Jede Spalte im SELECT, die keine Aggregatfunktion ist, muss hier auftauchen! |
ORDER BY Anzahl DESC |
Sortiert das Ergebnis absteigend (DESC = größte Zahl zuerst). So sehen wir zuerst die Länder mit den meisten Kunden. |
SELECT → FROM → JOIN → WHERE → GROUP BY → ORDER BY → LIMIT. Du brauchst nicht alle – aber die Reihenfolge muss stimmen!🎯 Großes Beispiel: JOIN + Aggregation kombiniert – Zeile für Zeile erklärt
Welcher Kunde hat die meisten Bestellungen?
| Code-Teil | Was bedeutet das? |
|---|---|
SELECT Customers.CustomerName, COUNT(Orders.OrderID) AS AnzahlBestellungen |
Zeige den Kundennamen und zähle, wie viele OrderID-Einträge es pro Kunde gibt. Das Ergebnis heißt „AnzahlBestellungen“. |
FROM Orders |
Startpunkt ist die Tabelle Orders – sie enthält alle Bestellungen. |
JOIN Customers ON Orders.CustomerID = Customers.CustomerID |
Verbinde Orders mit Customers: Zu jeder Bestellung holen wir den passenden Kundennamen. |
GROUP BY Customers.CustomerName |
Gruppiere alle Zeilen pro Kunde. Danach zählt COUNT, wie viele Bestellungen jeder Kunde hat. |
ORDER BY AnzahlBestellungen DESC |
Sortiere so, dass der Kunde mit den meisten Bestellungen ganz oben steht. |
LIMIT 5 |
Zeige nur die Top 5 Kunden – nicht die ganze Liste. |
Was ist der durchschnittliche Preis (
Price) aller Produkte in der Tabelle Products?Tipp: Nutze
AVG() und nenne die Spalte DurchschnittPreis.
Nutzt SELECT mit einer WHERE-Bedingung.
Beispiel: „Zeige alle Kunden aus Berlin an.“
Kombiniert WHERE, ORDER BY oder LIMIT.
Beispiel: „Liste alle Bestellungen von 2023 auf, sortiert nach Bestelldatum.“
Nutzt JOIN, GROUP BY und COUNT.
Beispiel: „Welcher Kunde hat die meisten Bestellungen? Zeige Name und Anzahl.“
• Schreibt deutlich, welche Spalten ausgegeben werden sollen.
• Formuliert die Aufgabe klar und verständlich (stellt euch vor, jemand kennt die Lösung nicht).
• Notiert auch eure eigene Musterlösung als SQL-Code.
📋 Meine Angaben
Stufe 1 Meine einfache Aufgabe
Stufe 2 Meine mittlere Aufgabe
Stufe 3 Meine schwere Aufgabe
💬 Reflexion: Was habe ich gelernt?
💡 Das PDF enthält alle Erklärungen und deine eigenen Aufgaben. Du kannst es dann an deine Mitschüler:innen weitergeben.