SQL Basic Kurs
Von Elyndra Valen, Senior Entwicklerin bei Java Fleet Systems Consulting
🗺️ Deine Position im Kurs
| Tag | Thema | Status |
|---|---|---|
| 1 | Warum Datenbanken? | ✅ Abgeschlossen |
| 2 | Das relationale Modell | ✅ Abgeschlossen |
| 3 | Schlüssel & Beziehungen | ✅ Abgeschlossen |
| 4 | Tabellen erstellen & Daten pflegen | ✅ Abgeschlossen |
| 5 | SELECT – Deine erste Abfrage | ✅ Abgeschlossen |
| 6 | Filtern und Sortieren | ✅ Abgeschlossen |
| → 7 | Gruppieren und Auswerten | 👉 DU BIST HIER! |
| 8 | JOINs – Tabellen verbinden | 🔜 Kommt als nächstes |
| 9 | Subqueries und Views | 🔒 Noch nicht freigeschaltet |
| 10 | Zusammenfassung & Projekt | 🔒 Noch nicht freigeschaltet |
Modul: SQL Basic
Gesamt-Dauer: 10 Kurstage
Dein Ziel: Daten zusammenfassen und statistische Auswertungen erstellen
📋 Voraussetzungen für diesen Tag
Du brauchst:
- ✅ Tag 1-6 abgeschlossen
- ✅ Du kannst SELECT mit WHERE und ORDER BY
- ✅ XAMPP läuft, phpMyAdmin ist offen
- ✅ Die Datenbanken sind importiert
Fragen?
Schreib uns: Elyndra.Valen@java-developer.online
🔄 Kurzwiederholung: Lösung der Challenge von Tag 6
1. Alle Personen unter 25:
SELECT * FROM person WHERE AGE < 25;
2. Vorname mit ‚M‘ und über 30:
SELECT * FROM person WHERE FIRSTNAME LIKE 'M%' AND AGE > 30;
3. Städte mit „burg“ im Namen:
SELECT * FROM adressen WHERE stadt LIKE '%burg%';
4. Die 10 ältesten Personen:
SELECT FIRSTNAME, LASTNAME, AGE FROM person ORDER BY AGE DESC LIMIT 10;
5. Unter 20 ODER über 80:
SELECT * FROM person WHERE AGE < 20 OR AGE > 80 ORDER BY AGE;
6. Bestimmte Altersstufen mit IN:
SELECT * FROM person WHERE AGE IN (18, 21, 30, 40, 50, 60);
⚡ Das Wichtigste in 30 Sekunden
Heute lernst du:
- ✅ COUNT, SUM, AVG, MIN, MAX – Aggregatfunktionen
- ✅ GROUP BY – Daten in Gruppen zusammenfassen
- ✅ HAVING – gruppierte Daten filtern
- ✅ Auswertungen wie „Durchschnittsalter pro Stadt“
Am Ende des Tages kannst du: Fragen beantworten wie: „Wie viele Kunden haben wir pro Stadt?“ oder „Was ist der durchschnittliche Bestellwert?“
Schwierigkeitsgrad: 🟡 Mittel
Hi! 👋
Bis jetzt hast du einzelne Datensätze abgefragt. Heute wird’s analytisch!
Stell dir vor, dein Chef fragt: „Wie viele Kunden haben wir eigentlich?“ oder „Was ist unser Durchschnittsalter?“ – Das sind keine Fragen nach einzelnen Zeilen, sondern nach Zusammenfassungen.
Dafür gibt es Aggregatfunktionen. Klingt kompliziert, ist aber super praktisch.
Los geht’s! 🚀
🟢 GRUNDLAGEN: Aggregatfunktionen

COUNT – Zählen
Wie viele Personen gibt es?
SELECT COUNT(*) FROM person;
Ergebnis: Eine Zahl (ca. 600).
Wie viele Adressen gibt es?
SELECT COUNT(*) FROM adressen;
Mit schönem Namen:
SELECT COUNT(*) AS anzahl_personen FROM person;
Nur bestimmte Werte zählen:
SELECT COUNT(*) FROM person WHERE AGE > 50;
Wie viele Personen sind über 50?
Nur nicht-leere Werte zählen:
SELECT COUNT(telefon) FROM kunden;
Zählt nur Zeilen, wo telefon NICHT NULL ist.
Eindeutige Werte zählen:
SELECT COUNT(DISTINCT stadt) FROM adressen;
Wie viele verschiedene Städte gibt es?
SUM – Summieren
Gesamter Lagerbestand aller Produkte:
SELECT SUM(lagerbestand) FROM produkte;
Gesamtwert aller Produkte im Lager:
SELECT SUM(preis * lagerbestand) AS lagerwert FROM produkte;
Gesamtalter aller Personen (sinnlos, aber möglich):
SELECT SUM(AGE) FROM person;
AVG – Durchschnitt
Durchschnittsalter:
SELECT AVG(AGE) FROM person;
Durchschnittspreis aller Produkte:
SELECT AVG(preis) FROM produkte;
Gerundet auf 2 Nachkommastellen:
SELECT ROUND(AVG(preis), 2) AS durchschnittspreis FROM produkte;
MIN und MAX – Minimum und Maximum
Jüngste und älteste Person:
SELECT MIN(AGE) AS juengste, MAX(AGE) AS aelteste FROM person;
Günstigstes und teuerstes Produkt:
SELECT MIN(preis) AS guenstigster, MAX(preis) AS teuerster FROM produkte;
Funktioniert auch mit Text (alphabetisch):
SELECT MIN(LASTNAME) AS erster, MAX(LASTNAME) AS letzter FROM person;
Übersicht Aggregatfunktionen
| Funktion | Was sie tut | Beispiel |
|---|---|---|
COUNT(*) | Zählt alle Zeilen | COUNT(*) → 600 |
COUNT(spalte) | Zählt nicht-NULL Werte | COUNT(telefon) |
COUNT(DISTINCT spalte) | Zählt eindeutige Werte | COUNT(DISTINCT stadt) |
SUM(spalte) | Summiert alle Werte | SUM(preis) |
AVG(spalte) | Berechnet Durchschnitt | AVG(AGE) |
MIN(spalte) | Findet kleinsten Wert | MIN(preis) |
MAX(spalte) | Findet größten Wert | MAX(preis) |
🟡 PROFESSIONALS: GROUP BY – Gruppieren

Das Problem
Du willst wissen: „Wie viele Adressen gibt es PRO PERSON?“
Mit einfachem COUNT bekommst du nur die Gesamtzahl. Du brauchst Gruppierung.
Die Lösung: GROUP BY
SELECT PERSID, COUNT(*) AS anzahl_adressen FROM adressen GROUP BY PERSID;
Was passiert hier?
- Die Tabelle wird nach PERSID gruppiert
- Für jede Gruppe (= jede Person) wird COUNT ausgeführt
- Ergebnis: Eine Zeile pro Person mit der Anzahl ihrer Adressen
Weiteres Beispiel: Durchschnittsalter nach Anfangsbuchstabe
SELECT
LEFT(FIRSTNAME, 1) AS anfangsbuchstabe,
COUNT(*) AS anzahl,
ROUND(AVG(AGE), 1) AS durchschnittsalter
FROM person
GROUP BY LEFT(FIRSTNAME, 1)
ORDER BY anfangsbuchstabe;
Wie viele Personen gibt es pro Anfangsbuchstabe, und wie alt sind sie im Schnitt?
Die goldene Regel
Alles, was in SELECT steht und KEINE Aggregatfunktion ist, MUSS in GROUP BY stehen!
-- FALSCH: SELECT FIRSTNAME, COUNT(*) FROM person GROUP BY LASTNAME; -- RICHTIG: SELECT LASTNAME, COUNT(*) FROM person GROUP BY LASTNAME;
Wenn du nach LASTNAME gruppierst, kannst du nicht einfach FIRSTNAME anzeigen – welchen Vornamen sollte SQL nehmen, wenn es mehrere Müllers gibt?
Mehrere Spalten gruppieren
SELECT
stadt,
LEFT(STREET, 1) AS strassen_anfang,
COUNT(*) AS anzahl
FROM adressen
GROUP BY stadt, LEFT(STREET, 1);
Gruppiert nach Stadt UND Straßenanfangsbuchstabe.
🟡 HAVING – Gruppierte Daten filtern
Das Problem
Du willst nur Personen sehen, die MEHR ALS 3 Adressen haben.
Das funktioniert NICHT:
SELECT PERSID, COUNT(*) AS anzahl FROM adressen WHERE COUNT(*) > 3 -- FEHLER! GROUP BY PERSID;
WHERE wird VOR der Gruppierung ausgeführt – da gibt es COUNT noch gar nicht!
Die Lösung: HAVING
SELECT PERSID, COUNT(*) AS anzahl FROM adressen GROUP BY PERSID HAVING COUNT(*) > 3;
HAVING filtert NACH der Gruppierung.
WHERE vs. HAVING
| WHERE | HAVING |
|---|---|
| Filtert einzelne Zeilen | Filtert Gruppen |
| VOR der Gruppierung | NACH der Gruppierung |
| Keine Aggregatfunktionen | Mit Aggregatfunktionen |
Beide kombiniert:
SELECT PERSID, COUNT(*) AS anzahl FROM adressen WHERE stadt LIKE 'Bad%' -- nur Adressen in "Bad..."-Städten GROUP BY PERSID HAVING COUNT(*) >= 2; -- nur Personen mit mindestens 2 solcher Adressen
Die komplette Reihenfolge
SELECT spalten FROM tabelle WHERE bedingung_fuer_zeilen GROUP BY gruppierung HAVING bedingung_fuer_gruppen ORDER BY sortierung LIMIT anzahl;
Merksatz: SELECT – FROM – WHERE – GROUP BY – HAVING – ORDER BY – LIMIT
🔴 BONUS: Praktische Beispiele
Beispiel 1: Altersverteilung in 10er-Schritten
SELECT
FLOOR(AGE / 10) * 10 AS altersgruppe,
COUNT(*) AS anzahl
FROM person
GROUP BY FLOOR(AGE / 10) * 10
ORDER BY altersgruppe;
Ergebnis: Wie viele Personen sind 10-19, 20-29, 30-39, usw.
Beispiel 2: Top 5 Städte mit den meisten Adressen
SELECT
stadt,
COUNT(*) AS anzahl
FROM adressen
GROUP BY stadt
ORDER BY anzahl DESC
LIMIT 5;
Beispiel 3: Personen mit überdurchschnittlichem Alter
Erst Durchschnitt berechnen, dann filtern:
SELECT * FROM person WHERE AGE > (SELECT AVG(AGE) FROM person);
(Das ist eine Subquery – mehr dazu an Tag 9!)
Beispiel 4: Statistik-Übersicht
SELECT
COUNT(*) AS gesamt,
MIN(AGE) AS juengste,
MAX(AGE) AS aelteste,
ROUND(AVG(AGE), 1) AS durchschnitt,
SUM(CASE WHEN AGE < 30 THEN 1 ELSE 0 END) AS unter_30,
SUM(CASE WHEN AGE >= 30 AND AGE < 60 THEN 1 ELSE 0 END) AS zwischen_30_60,
SUM(CASE WHEN AGE >= 60 THEN 1 ELSE 0 END) AS ab_60
FROM person;
Eine komplette Altersstatistik in einer Abfrage!
💬 Real Talk: Die Kursplanung für Tag 7
Java Fleet Büro, Besprechungsraum. Das Team diskutiert.
Franz-Martin: „Tag 7 – Aggregatfunktionen. Das ist der analytische Durchbruch.“
Nova: „COUNT hab ich sofort verstanden. SUM und AVG auch. Aber GROUP BY hat gedauert.“
Tom: „Für mich war HAVING verwirrend. Warum kann ich nicht einfach WHERE benutzen?“
Elyndra: „Weil WHERE vor der Gruppierung passiert. HAVING danach. Das ist der Schlüssel.“
Kat: „Vielleicht hilft ein Bild? Erst werden die Zeilen gefiltert (WHERE), dann gruppiert (GROUP BY), dann die Gruppen gefiltert (HAVING).“
Franz-Martin: „Die Reihenfolge ist wirklich wichtig. SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY.“
Nova: „Wie ein Rezept. Erst die Zutaten auswählen (WHERE), dann mischen (GROUP BY), dann aussortieren was nicht schmeckt (HAVING), dann anrichten (ORDER BY).“
Elyndra: „Das ist gut! Das nehmen wir.“
Tom: „Und praktische Beispiele. Nicht nur COUNT(*), sondern echte Fragen: Wie viele Kunden pro Stadt? Durchschnittsalter pro Abteilung?“
Elyndra: „Genau. Die Leute sollen sehen, was sie damit anfangen können. Berichte, Statistiken, Dashboards – alles startet mit GROUP BY.“
✅ Checkpoint: Hast du es verstanden?
Bevor du weitermachst, teste dein Wissen:
Quiz:
Frage 1: Wie zählst du, wie viele verschiedene Nachnamen es in der person-Tabelle gibt?
Frage 2: Was ist der Unterschied zwischen WHERE und HAVING?
Frage 3: Warum liefert SELECT FIRSTNAME, COUNT(*) FROM person GROUP BY LASTNAME; einen Fehler (oder ein seltsames Ergebnis)?
Frage 4: Wie berechnest du den Durchschnittspreis aller Produkte, gerundet auf 2 Nachkommastellen?
Frage 5: Du willst nur Städte sehen, die mindestens 5 mal in der adressen-Tabelle vorkommen. Wie?
Mini-Challenge:
Aufgabe:
Arbeite mit der person– und adressen-Datenbank:
- Wie viele Personen gibt es insgesamt? Wie viele verschiedene Vornamen gibt es?
- Was ist das Durchschnittsalter aller Personen? (gerundet)
- Erstelle eine Liste: Für jeden Anfangsbuchstaben des Vornamens die Anzahl der Personen. Sortiert nach Anzahl (häufigste zuerst).
- Welche PERSID hat die meisten Adressen? Wie viele sind es?
- Zeige alle Städte, die mehr als 2 mal in der adressen-Tabelle vorkommen, sortiert nach Häufigkeit.
- Berechne für jede „Altersgruppe“ (20er, 30er, 40er…) die Anzahl der Personen.
Lösung:
Wir besprechen die Lösung am Anfang von Tag 8!
❓ Häufig gestellte Fragen
Frage 1: Kann ich mehrere Aggregatfunktionen in einer Abfrage verwenden?
Ja! SELECT COUNT(*), AVG(AGE), MIN(AGE), MAX(AGE) FROM person; funktioniert.
Frage 2: Was passiert, wenn ich GROUP BY vergesse, aber eine Aggregatfunktion benutze?
Du bekommst EINE Zeile mit dem Ergebnis für die gesamte Tabelle. Manchmal ist das gewollt!
Frage 3: Kann ich nach einem Alias gruppieren?
In MySQL/MariaDB: Ja, oft. GROUP BY anfangsbuchstabe funktioniert, wenn du vorher LEFT(FIRSTNAME, 1) AS anfangsbuchstabe geschrieben hast. Standard-SQL erlaubt das eigentlich nicht – aber MariaDB ist tolerant.
Frage 4: Wie runde ich auf ganze Zahlen?
ROUND(AVG(AGE), 0) oder einfach ROUND(AVG(AGE)).
Frage 5: Kann ich in HAVING auf den Alias zugreifen?
In MariaDB oft ja: HAVING anzahl > 5. Standard-SQL verlangt: HAVING COUNT(*) > 5.
Frage 6: Was ist der Unterschied zwischen COUNT(*) und COUNT(spalte)?
COUNT(*) zählt alle Zeilen. COUNT(spalte) zählt nur Zeilen, wo diese Spalte NICHT NULL ist.
Frage 7: Nova verglich die SQL-Reihenfolge mit einem Rezept. Macht das wirklich Sinn?
Real talk: Ja, tatsächlich! WHERE ist wie „diese Zutaten verwenden wir“ (Vorfilterung). GROUP BY ist „alles zusammenmischen“ (Gruppierung). HAVING ist „hmm, diese Portion schmeckt nicht, weg damit“ (Nachfilterung). ORDER BY ist „schön anrichten“ (Sortierung). Und LIMIT ist „nur drei Portionen servieren“ (Begrenzung). Kochen = SQL? Irgendwie schon.
📚 Quiz-Lösungen
Hier sind die Antworten zum Quiz von oben:
Frage 1: Verschiedene Nachnamen zählen?
Antwort:
SELECT COUNT(DISTINCT LASTNAME) FROM person;
DISTINCT sorgt dafür, dass jeder Nachname nur einmal gezählt wird.
Frage 2: Unterschied WHERE vs. HAVING?
Antwort:
- WHERE filtert einzelne Zeilen VOR der Gruppierung
- HAVING filtert Gruppen NACH der Gruppierung
WHERE kann keine Aggregatfunktionen enthalten, HAVING schon.
Frage 3: Warum funktioniert SELECT FIRSTNAME … GROUP BY LASTNAME nicht richtig?
Antwort:
Wenn du nach LASTNAME gruppierst, gibt es pro Gruppe (pro Nachname) möglicherweise mehrere verschiedene FIRSTNAME-Werte.
SQL weiß nicht, welchen Vornamen es anzeigen soll. Das Ergebnis ist undefiniert (oder ein Fehler, je nach Datenbank-Modus).
Regel: Jede Spalte in SELECT muss entweder in GROUP BY stehen ODER eine Aggregatfunktion sein.
Frage 4: Durchschnittspreis gerundet?
Antwort:
SELECT ROUND(AVG(preis), 2) AS durchschnittspreis FROM produkte;
ROUND(wert, 2) rundet auf 2 Nachkommastellen.
Frage 5: Nur Städte mit mindestens 5 Einträgen?
Antwort:
SELECT stadt, COUNT(*) AS anzahl FROM adressen GROUP BY stadt HAVING COUNT(*) >= 5 ORDER BY anzahl DESC;
HAVING filtert nach der Gruppierung.
🎉 Tag 7 geschafft!
Wow! Du kannst jetzt Daten analysieren! 🚀
Das hast du heute gelernt:
- ✅ COUNT, SUM, AVG, MIN, MAX
- ✅ GROUP BY für Gruppierungen
- ✅ HAVING für Gruppenfilter
- ✅ Die Reihenfolge: WHERE → GROUP BY → HAVING
Du kannst jetzt: Echte Business-Fragen beantworten! „Wie viele Kunden pro Region?“, „Durchschnittlicher Umsatz pro Monat?“, „Top 10 Produkte nach Verkaufszahl?“ – alles machbar!
Das ist Analytics-Power. Controller und Manager lieben diese Abfragen! 💪
Wie geht’s weiter?
Morgen (Tag 8): JOINs – Tabellen verbinden
Was dich erwartet:
- INNER JOIN, LEFT JOIN, RIGHT JOIN
- Mehrere Tabellen in einer Abfrage
- „Zeige Kundennamen mit ihren Bestellungen“ – endlich!
- Der „richtige“ JOIN (du kennst schon die Komma-Variante)
🛠️ Troubleshooting
Problem: „Column ‚xyz‘ not in GROUP BY clause“
Lösung: Jede Spalte in SELECT, die keine Aggregatfunktion ist, muss in GROUP BY stehen.
Problem: HAVING funktioniert nicht
Lösung: HAVING kommt NACH GROUP BY. Reihenfolge beachten!
Problem: Ergebnis hat nur eine Zeile statt vieler
Lösung: GROUP BY vergessen? Ohne GROUP BY gibt eine Aggregatfunktion nur EINE Zeile für die ganze Tabelle.
📖 Im Buch nachlesen
Mehr Details zu den heutigen Themen findest du in:
Kapitel 6: Gruppierung und Aggregation
- 6.1 Aggregatfunktionen
- 6.2 GROUP BY
- 6.3 HAVING
- 6.4 Kombinierte Beispiele
SQL Ressourcen & Weiterführende Links
Elyndra’s Schatzkiste – Alles, was du für deinen SQL-Lernweg brauchst
Du hast die 10 Tage SQL Basic Kurs geschafft (oder bist mittendrin) und willst mehr? Hier findest du handverlesene Ressourcen, die dich weiterbringen – von interaktiven Übungsplattformen bis zur offiziellen Dokumentation.
🎮 Interaktive Übungsplattformen
Übung macht den Meister. Diese Plattformen lassen dich SQL direkt im Browser ausprobieren – ohne Installation, ohne Risiko.
SQLBolt – Der Klassiker für Einsteiger
- Interaktive Lektionen mit sofortigem Feedback
- Perfekt strukturiert: SELECT → JOINs → Subqueries
- Keine Registrierung nötig
- Empfohlen für: Tag 5-8 unseres Kurses
SQLZoo – Echte Daten, echte Herausforderungen
- Seit über 20 Jahren der Goldstandard
- Übungen mit echten Datensätzen (Nobel-Preise, Fußball-WM, etc.)
- Progressiv schwieriger werdende Aufgaben
- Empfohlen für: Tag 9-10 und danach
W3Schools SQL Tutorial
- „Try it Yourself“ Editor bei jedem Beispiel
- Komplette Referenz aller SQL-Befehle
- Gut zum Nachschlagen
- Empfohlen für: Schnelles Nachschlagen während des Kurses
SQL Easy – Minimalistisch & Effektiv
- Reduziert auf das Wesentliche
- Sofort loslegen ohne Ablenkung
- Über 200.000 Lernende seit 2017
- Empfohlen für: Schnelle Wiederholung
Learn SQL Online
- Komplett kostenlos
- Interaktive Code-Beispiele
- Community-getrieben
- Empfohlen für: Zusätzliche Übungen
📚 Offizielle Dokumentation
Wenn du es genau wissen willst, führt kein Weg an der offiziellen Doku vorbei.
MariaDB Knowledge Base (Deutsch)
- Offizielle Dokumentation auf Deutsch
- Alle Befehle, Datentypen, Konfigurationen
- Das Nachschlagewerk für unseren Kurs
MariaDB.org Documentation
- Hauptdokumentation der MariaDB Foundation
- PDF-Download verfügbar
- Release Notes für alle Versionen
- Kostenlose Video-Kurse zu fortgeschrittenen Themen
MySQL Referenz
- Gilt zu 95% auch für MariaDB
- Sehr detailliert und umfangreich
- Englisch, aber sehr präzise
🛠️ Setup & Installation
Alles, was du brauchst, um SQL auf deinem Rechner zum Laufen zu bringen.
XAMPP – Das Rundum-Sorglos-Paket
- Apache + MariaDB + PHP in einem Paket
- Windows, Mac, Linux
- Unsere Empfehlung für den Kurs!
- Ein Klick → Datenbank läuft
MariaDB Standalone
🔗 mariadb.com/get-started-with-mariadb
- Offizielle Installationsanleitung
- Für alle Betriebssysteme
- Docker-Variante verfügbar
HeidiSQL – Der komfortable Client
- Kostenloser SQL-Client für Windows
- Grafische Oberfläche statt Kommandozeile
- Perfekt für Einsteiger
- Export/Import von Daten
DBeaver – Der Alleskönner
- Universeller Datenbank-Client
- Windows, Mac, Linux
- Unterstützt MySQL, MariaDB, PostgreSQL, Oracle, …
- Community Edition kostenlos
🇩🇪 Tutorials auf Deutsch
Nicht jeder mag englische Tutorials. Hier die besten deutschen Ressourcen.
IONOS Digital Guide
🔗 ionos.de – MySQL/MariaDB installieren
- Schritt-für-Schritt Installationsanleitung
- Screenshots für jeden Schritt
- Linux, Windows, Mac abgedeckt
Guru99 MariaDB Tutorial
🔗 guru99.com/de/mariadb-tutorial-install.html
- Übersetztes Tutorial
- Viele Screenshots
- Grundlagen gut erklärt
GeeksforGeeks SQL Tutorial
🔗 geeksforgeeks.org/sql-tutorial
- Sehr umfangreich
- Von Basics bis Advanced
- Viele Code-Beispiele
🎬 Video-Kurse (kostenlos)
Manchmal ist Zuschauen einfacher als Lesen.
freeCodeCamp – SQL Full Course
- Kompletter SQL-Kurs in einem Video
- 4+ Stunden Inhalt
- Sehr beliebt (Millionen Views)
- Englisch mit guter Aussprache
Bro Code – SQL Playlist
- Viral gegangen 2024
- Kurze, knackige Videos
- Schritt für Schritt
- Gut für Pausen zwischendurch
📅 Welche Ressource zu welchem Tag?
| Kurstag | Thema | Empfohlene Ressource |
|---|---|---|
| Tag 1 | Was ist eine Datenbank? | XAMPP installieren, MariaDB Doku |
| Tag 2 | Tabellen & Beziehungen | W3Schools Referenz |
| Tag 3 | Schlüssel | MariaDB Knowledge Base |
| Tag 4 | CREATE TABLE | SQLBolt Lesson 16-17 |
| Tag 5 | SELECT Basics | SQLBolt Lesson 1-4 |
| Tag 6 | WHERE & Filter | SQLBolt Lesson 2-4 |
| Tag 7 | GROUP BY | SQLBolt Lesson 10-11 |
| Tag 8 | HAVING | SQLZoo SUM and COUNT |
| Tag 9 | JOINs | SQLBolt Lesson 6-7, SQLZoo JOIN |
| Tag 10 | Subqueries | SQLZoo SELECT within SELECT |
💡 Elyndra’s Pro-Tipps
„Die beste Ressource ist die, die du auch benutzt.“
- Nicht alles auf einmal – Wähle EINE Übungsplattform und bleib dabei
- Täglich 15 Minuten schlägt einmal pro Woche 2 Stunden
- Fehler sind Lernchancen – Jede Fehlermeldung bringt dich weiter
- Eigene Datenbank – Sobald du kannst, arbeite mit eigenen Daten
- Community nutzen – Stack Overflow, Reddit r/SQL, Discord-Server
🚀 Nach dem Kurs: Wie geht’s weiter?
Du hast die Basics drauf? Hier sind die nächsten Schritte:
Fortgeschrittene Themen
- Window Functions – OVER(), PARTITION BY, ROW_NUMBER()
- CTEs – Common Table Expressions (WITH-Klausel)
- Stored Procedures – Wiederverwendbare SQL-Skripte
- Indexe & Performance – Queries optimieren
Weiterführende Kurse
- SQLCourse.com Advanced – Fortgeschrittene Themen
- Mode Analytics SQL Tutorial – Für Data Analytics
- LeetCode SQL – Übungen für Bewerbungen
Zertifizierungen
- Oracle Database SQL Certified Associate
- Microsoft Azure Data Fundamentals (DP-900)
- Google Data Analytics Certificate
📥 Downloads aus unserem Kurs
- versandhandel.sql – Unsere Übungsdatenbank (5 Tabellen)
- adressen.sql – 601 Personen, 1523 Adressen
💬 Feedback?
Hast du den Unterschied zwischen WHERE und HAVING verstanden?
Schreib uns: Elyndra.Valen@java-developer.online
Bis morgen – dann verbinden wir Tabellen! 👋
Elyndra
SQL Basic – Tag 7 von 10
© Java Fleet Systems Consulting
www.java-developer.online

