SQL Basic Kurs
Von Elyndra Valen, Senior Entwicklerin bei Java Fleet Systems Consulting


🗺️ Deine Position im Kurs

TagThemaStatus
1Warum Datenbanken?✅ Abgeschlossen
2Das relationale Modell✅ Abgeschlossen
3Schlüssel & Beziehungen✅ Abgeschlossen
→ 4Tabellen erstellen & Daten pflegen👉 DU BIST HIER!
5SELECT – Deine erste Abfrage🔜 Kommt als nächstes
6Filtern und Sortieren🔒 Noch nicht freigeschaltet
7Gruppieren und Auswerten🔒 Noch nicht freigeschaltet
8JOINs – Tabellen verbinden🔒 Noch nicht freigeschaltet
9Views und Ausblick🔒 Noch nicht freigeschaltet
10Zusammenfassung & Projekt🔒 Noch nicht freigeschaltet

Modul: SQL Basic
Gesamt-Dauer: 10 Kurstage
Dein Ziel: Deinen ersten SQL-Code schreiben – Tabellen erstellen und Daten einfügen!


📋 Voraussetzungen für diesen Tag

Du brauchst:

  • ✅ Tag 1-3 abgeschlossen
  • ✅ Du verstehst Primär- und Fremdschlüssel
  • ✅ Du kennst die versandhandel-Datenbank
  • ✅ XAMPP ist gestartet (Anleitung gleich!)

Fragen?
Schreib uns: elyndra.valen@java-developer.online


🖥️ Deine Arbeitsumgebung: XAMPP & phpMyAdmin

Bevor wir loslegen, starten wir deine Datenbank!

Auf deinem Kurs-Computer ist XAMPP vorinstalliert. XAMPP bringt alles mit:

  • Apache – ein Webserver (brauchen wir für phpMyAdmin)
  • MariaDB 10.4 – unsere Datenbank
  • phpMyAdmin – die Oberfläche, über die wir SQL eingeben

Schritt 1: XAMPP starten

  1. Öffne das XAMPP Control Panel (findest du im Startmenü oder auf dem Desktop)
  2. Klicke bei Apache auf Start
  3. Klicke bei MySQL auf Start (das startet MariaDB)
  4. Beide Zeilen sollten jetzt grün hinterlegt sein

So sieht es aus wenn alles läuft:

┌─────────────────────────────────────────────┐
│  Module      Service    PID    Port  Actions│
├─────────────────────────────────────────────┤
│  Apache      ✓ Running  1234   80    [Stop] │
│  MySQL       ✓ Running  5678   3306  [Stop] │
│  FileZilla                           [Start]│
│  Mercury                             [Start]│
└─────────────────────────────────────────────┘

Schritt 2: phpMyAdmin öffnen

  1. Öffne deinen Browser (Chrome, Firefox, Edge…)
  2. Gib in die Adresszeile ein: localhost/phpmyadmin
  3. Drücke Enter

Du siehst jetzt die phpMyAdmin-Oberfläche – dein „Cockpit“ für die Datenbank!

Schritt 3: Die versandhandel-Datenbank importieren

Dein Dozent hat dir die Datei versandhandel.sql gegeben. So importierst du sie:

  1. Klicke links auf „Neu“ (oder „New“)
  2. Gib als Datenbankname ein: versandhandel
  3. Klicke „Anlegen“ (oder „Create“)
  4. Klicke oben auf „Importieren“ (oder „Import“)
  5. Klicke „Datei auswählen“ und wähle versandhandel.sql
  6. Scrolle runter und klicke „Importieren“

Fertig! Links siehst du jetzt die Datenbank versandhandel mit den 5 Tabellen.

Schritt 4: SQL eingeben

  1. Klicke links auf versandhandel
  2. Klicke oben auf den Tab „SQL“
  3. Du siehst ein großes Textfeld – hier tippst du deine SQL-Befehle ein
  4. Klicke „OK“ oder drücke Strg+Enter um auszuführen

Das ist dein SQL-Spielplatz für die nächsten Tage!

Troubleshooting XAMPP

Problem: Apache startet nicht (Port 80 belegt) Lösung: Skype oder ein anderes Programm blockiert den Port. Schließe Skype oder ändere den Apache-Port in XAMPP.

Problem: MySQL startet nicht Lösung: Eventuell läuft schon eine andere MySQL-Installation. Beende sie im Task-Manager.

Problem: „localhost/phpmyadmin“ zeigt Fehler Lösung: Ist Apache gestartet? Die grüne Markierung muss sichtbar sein.


🔄 Kurzwiederholung: Lösung der Challenge von Tag 3

Erinnerst du dich an die Aufgaben zur adressen-Datenbank?

1. Was sind die Primärschlüssel?

  • Tabelle person: PERSID
  • Tabelle adressen: ADRESID

2. Personen mit Adressen in „Bad“-Städten:

SELECT person.FIRSTNAME, person.LASTNAME, adressen.stadt, adressen.STREET
FROM person, adressen 
WHERE person.PERSID = adressen.PERSID
AND adressen.stadt LIKE 'Bad%';

3. Wie viele Adressen hat Person 1?

Schau in die adressen-Tabelle: PERSID = 1 kommt 5 Mal vor (Zeilen 1-5). Bruno Hoffmann hat also 5 Adressen!

4. Warum kann eine Person mehrere Adressen haben?

Das ist eine 1:n-Beziehung (eins-zu-viele):

  • Eine Person kann viele Adressen haben (Haupt-, Neben-, Ferienwohnung…)
  • Aber jede Adresse gehört genau einer Person (der Fremdschlüssel PERSID in adressen zeigt auf genau eine Person)

Der Fremdschlüssel ist auf der „viele“-Seite (in adressen), nicht auf der „eins“-Seite (in person).


⚡ Das Wichtigste in 30 Sekunden

Heute lernst du:

  • ✅ CREATE TABLE – eine Tabelle erstellen
  • ✅ Datentypen – welcher Typ für welche Daten?
  • ✅ INSERT – Daten einfügen
  • ✅ UPDATE – Daten ändern
  • ✅ DELETE – Daten löschen

Am Ende des Tages kannst du: Selbst eine Tabelle erstellen und Daten einfügen, ändern und löschen!

Schwierigkeitsgrad: 🟡 Mittel (erstes echtes SQL!)


Hi! 👋

Willkommen zu Tag 4 – ab heute wird’s praktisch! 🎉

Die letzten drei Tage waren Theorie: Warum Datenbanken, wie sind sie aufgebaut, wie hängen Tabellen zusammen. Wichtiges Fundament!

Heute schreibst du deinen ersten echten SQL-Code. Du wirst:

  • Eine Tabelle aus dem Nichts erschaffen
  • Daten einfügen
  • Daten ändern
  • Daten löschen

Keine Angst: SQL ist keine Raketenwissenschaft. Die Befehle lesen sich fast wie englische Sätze.

Los geht’s! 🚀


Tabellen erstellen

🟢 GRUNDLAGEN: Deine erste Tabelle

CREATE TABLE – Eine Tabelle erschaffen

So erstellst du eine neue Tabelle:

CREATE TABLE kunden (
    kunden_id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255) NOT NULL,
    vorname VARCHAR(255) NOT NULL,
    strasse VARCHAR(255),
    stadt VARCHAR(255),
    plz VARCHAR(10)
);

Wow, das sieht kompliziert aus!

Lass uns das Zeile für Zeile durchgehen:

Zeile 1: CREATE TABLE kunden (

  • CREATE TABLE = „Erstelle eine Tabelle“
  • kunden = der Name der Tabelle
  • ( = jetzt kommen die Spalten

Zeile 2: kunden_id INT PRIMARY KEY AUTO_INCREMENT,

  • kunden_id = Name der Spalte
  • INT = Datentyp: Ganze Zahl
  • PRIMARY KEY = Das ist der Primärschlüssel!
  • AUTO_INCREMENT = Die Datenbank zählt automatisch hoch (1, 2, 3, …)
  • , = es kommt noch mehr

Zeile 3: name VARCHAR(255) NOT NULL,

  • name = Name der Spalte
  • VARCHAR(255) = Text mit maximal 255 Zeichen
  • NOT NULL = Pflichtfeld! Darf nicht leer sein

Zeile 4-6: Weitere Spalten nach demselben Muster

Zeile 7: );

  • ) = Ende der Spaltenliste
  • ; = Ende des Befehls

Die wichtigsten Datentypen

Jede Spalte braucht einen Datentyp. Hier die wichtigsten:

Wichtig für Geld: Benutze DECIMAL, nicht FLOAT! Bei Geldbeträgen können Rundungsfehler bei FLOAT zu Problemen führen.

Constraints – Die Regeln

Constraints sind Regeln für die Daten:

ConstraintBedeutungBeispiel
PRIMARY KEYPrimärschlüsselEindeutige ID
NOT NULLDarf nicht leer seinName ist Pflicht
UNIQUEKein Wert darf doppelt vorkommenE-Mail-Adresse
DEFAULTStandardwert wenn nichts angegebenStatus = ‚aktiv‘
FOREIGN KEYFremdschlüsselVerweis auf andere Tabelle

Beispiel mit Fremdschlüssel:

CREATE TABLE bestellungen (
    bestellungen_id INT PRIMARY KEY AUTO_INCREMENT,
    kunden_id INT NOT NULL,
    datum TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (kunden_id) REFERENCES kunden(kunden_id)
);

Die letzte Zeile sagt: „kunden_id verweist auf die Spalte kunden_id in der Tabelle kunden.“


🟡 PROFESSIONALS: Daten einfügen, ändern, löschen

INSERT – Daten einfügen

So fügst du einen neuen Kunden ein:

INSERT INTO kunden (name, vorname, strasse, stadt, plz)
VALUES ('Schmidt', 'Laura', 'Hauptstr. 42', 'Köln', '50667');

Was passiert hier?

  • INSERT INTO kunden = „Füge in die Tabelle kunden ein“
  • (name, vorname, ...) = in diese Spalten
  • VALUES (...) = diese Werte

Wichtig:

  • Texte stehen in einfachen Anführungszeichen: 'Köln'
  • Die kunden_id lassen wir weg – die zählt automatisch hoch (AUTO_INCREMENT)!

Mehrere Zeilen auf einmal:

INSERT INTO kunden (name, vorname, stadt, plz)
VALUES 
    ('Müller', 'Anna', 'Berlin', '10115'),
    ('Weber', 'Thomas', 'Hamburg', '20095'),
    ('Fischer', 'Lisa', 'München', '80331');

UPDATE – Daten ändern

Ein Kunde ist umgezogen:

UPDATE kunden
SET stadt = 'Hamburg', strasse = 'Neuer Weg 5'
WHERE kunden_id = 1;

Was passiert hier?

  • UPDATE kunden = „Ändere in der Tabelle kunden“
  • SET stadt = 'Hamburg' = setze die Stadt auf Hamburg
  • WHERE kunden_id = 1 = aber NUR bei Kunde 1!

⚠️ WARNUNG: Niemals WHERE vergessen!

-- GEFÄHRLICH! Ändert ALLE Kunden!
UPDATE kunden
SET stadt = 'Hamburg';

Ohne WHERE werden ALLE Zeilen geändert! Das willst du nicht.

DELETE – Daten löschen

Ein Produkt wird aus dem Sortiment genommen:

DELETE FROM produkte
WHERE produkte_id = 5;

Was passiert hier?

  • DELETE FROM produkte = „Lösche aus der Tabelle produkte“
  • WHERE produkte_id = 5 = aber NUR Produkt 5!

⚠️ WARNUNG: Niemals WHERE vergessen!

-- KATASTROPHE! Löscht ALLE Produkte!
DELETE FROM produkte;

Ohne WHERE werden ALLE Zeilen gelöscht! Die Tabelle ist danach leer.

Merksatz: Bei UPDATE und DELETE immer erst das WHERE schreiben, dann den Rest!

Die Grundstruktur merken

AktionSQL-BefehlStruktur
EinfügenINSERTINSERT INTO tabelle (spalten) VALUES (werte);
ÄndernUPDATEUPDATE tabelle SET spalte = wert WHERE bedingung;
LöschenDELETEDELETE FROM tabelle WHERE bedingung;

🔵 BONUS: Transaktionen – Alles oder nichts

Optional: Für Neugierige.

Was passiert, wenn du mehrere Befehle ausführst und mittendrin ein Fehler passiert?

Beispiel: Du willst 100€ von Konto A nach Konto B überweisen.

  1. Ziehe 100€ von Konto A ab
  2. (Hier stürzt der Server ab)
  3. Füge 100€ zu Konto B hinzu

Problem: Das Geld ist von A weg, aber nie bei B angekommen!

Lösung: Transaktionen

START TRANSACTION;

UPDATE konten SET saldo = saldo - 100 WHERE konto_id = 'A';
UPDATE konten SET saldo = saldo + 100 WHERE konto_id = 'B';

COMMIT;
  • START TRANSACTION = „Ab jetzt bitte alles merken“
  • COMMIT = „Alles hat geklappt, speichere es dauerhaft“

Wenn etwas schiefgeht:

ROLLBACK;
  • ROLLBACK = „Vergiss alles seit START TRANSACTION“

So wird entweder ALLES ausgeführt oder NICHTS. Kein Zwischenzustand.


💬 Real Talk: Nova’s erster INSERT

Java Fleet Büro, Schulungsraum. Nova sitzt am Laptop, Elyndra schaut über die Schulter.


Nova: „Okay, ich probier’s mal. INSERT INTO kunden… Moment, was kommt nach VALUES?“

Elyndra: „Die Werte in der gleichen Reihenfolge wie die Spalten, die du oben angegeben hast.“

Nova: (tippt)

INSERT INTO kunden (name, vorname, stadt)
VALUES ('Trent', 'Nova', 'Berlin');

Elyndra: „Sieht gut aus. Ausführen!“

Nova: (klickt) „Oh! ‚Query OK, 1 row affected.‘ Hat geklappt?“

Elyndra: „Genau. Eine Zeile wurde eingefügt. Herzlichen Glückwunsch zu deinem ersten INSERT!“

Nova: „Nice! Und was ist meine kunden_id?“

Elyndra: „Die hat die Datenbank automatisch vergeben. AUTO_INCREMENT, erinnerst du dich? Wahrscheinlich die nächste freie Nummer.“

Tom: (kommt rein) „Was macht ihr?“

Nova: „Ich hab mich gerade selbst in die Datenbank eingetragen!“

Tom: „Cool! Kann ich auch?“

Elyndra: „Klar. Aber denk dran: Texte in Anführungszeichen. Und am Ende ein Semikolon.“

Tom: (tippt)

INSERT INTO kunden (name, vorname, stadt)
VALUES (Fischer, Tom, Hamburg)

Tom: „Fehler: ‚Unknown column Fischer’… Was?“

Elyndra: „Anführungszeichen vergessen! Ohne Anführungszeichen denkt die Datenbank, Fischer ist eine Spalte, nicht ein Text.“

Tom: „Ah! Also 'Fischer' mit Anführungszeichen?“

Elyndra: „Genau. Typischer Anfängerfehler. Passiert jedem einmal.“


✅ Checkpoint: Hast du es verstanden?

Bevor du weitermachst, teste dein Wissen:

Quiz:

Frage 1: Welchen Datentyp würdest du für einen Preis verwenden? (z.B. 19.99€)

Frage 2: Was bedeutet AUTO_INCREMENT bei einem Primärschlüssel?

Frage 3: Was ist der Unterschied zwischen VARCHAR(50) und VARCHAR(255)?

Frage 4: Warum ist es gefährlich, UPDATE oder DELETE ohne WHERE auszuführen?

Frage 5: Schreibe einen INSERT-Befehl, der ein Produkt „USB-Kabel“ mit Preis 9.99 und Lagerbestand 100 einfügt.


Mini-Challenge:

Aufgabe:

Schreibe SQL-Befehle für folgende Aktionen in der versandhandel-Datenbank:

  1. Füge einen neuen Kunden ein:
    • Name: Bauer, Vorname: Max
    • Straße: Waldweg 7, Stadt: Frankfurt, PLZ: 60311
  2. Füge ein neues Produkt ein:
    • Artikel: „Webcam HD“, Preis: 49.99, Lagerbestand: 75
  3. Ändere den Lagerbestand von Produkt mit ID 3: Erhöhe ihn um 25 Stück.
  4. Ändere die Stadt des Kunden mit ID 2 auf „Düsseldorf“.
  5. Lösche das Produkt mit ID 10 (angenommen, es gibt keine Bestellungen dafür).

Tipp: Achte auf Anführungszeichen bei Texten und vergiss das WHERE nicht!

Lösung:
Wir besprechen die Lösung am Anfang von Tag 5!


❓ Häufig gestellte Fragen

Frage 1: Muss ich die Spalten bei INSERT immer angeben?

Du kannst sie weglassen, aber dann musst du ALLE Spalten in der richtigen Reihenfolge befüllen:

INSERT INTO kunden VALUES (NULL, 'Müller', 'Anna', 'Hauptstr. 1', 'Berlin', '10115');

Das NULL steht für die AUTO_INCREMENT-ID. Besser: Spalten explizit angeben!

Frage 2: Kann ich mehrere Spalten gleichzeitig mit UPDATE ändern?

Ja! Trenne sie mit Komma:

UPDATE kunden SET stadt = 'Köln', plz = '50667' WHERE kunden_id = 1;

Frage 3: Was passiert, wenn ich einen Wert einfüge, der zu lang ist?

Wenn du in VARCHAR(10) einen 20-Zeichen-Text einfügst, wird er abgeschnitten oder du bekommst einen Fehler (je nach Datenbankeinstellung). Plane deine Feldlängen großzügig!

Frage 4: Kann ich einen DELETE rückgängig machen?

Nur wenn du eine Transaktion benutzt und noch kein COMMIT gemacht hast. Sonst: Nein! Deshalb immer vorsichtig mit DELETE. Am besten erst mit SELECT prüfen, was gelöscht würde:

SELECT * FROM produkte WHERE produkte_id = 5;  -- Erst schauen
DELETE FROM produkte WHERE produkte_id = 5;    -- Dann löschen

Frage 5: Was bedeutet DEFAULT CURRENT_TIMESTAMP?

Wenn du keinen Wert angibst, wird automatisch das aktuelle Datum/Uhrzeit eingetragen. Praktisch für „Erstellt am“-Spalten!

Frage 6: Kann ich eine Tabelle nachträglich ändern?

Ja, mit ALTER TABLE:

ALTER TABLE kunden ADD email VARCHAR(255);  -- Neue Spalte
ALTER TABLE kunden DROP COLUMN email;       -- Spalte löschen

Frage 7: Tom hat gefragt, ob man mit DELETE auch „ein bisschen löschen“ kann. Was meinst du?

Lol, nein. DELETE löscht ganze Zeilen, nicht einzelne Werte. Wenn du nur einen Wert „löschen“ willst, benutze UPDATE und setze ihn auf NULL:

UPDATE kunden SET strasse = NULL WHERE kunden_id = 1;

Real talk: DELETE ist binär – die Zeile ist da oder sie ist weg. Kein Mittelding.


📚 Quiz-Lösungen

Hier sind die Antworten zum Quiz von oben:


Frage 1: Welchen Datentyp würdest du für einen Preis verwenden? (z.B. 19.99€)

Antwort:

DECIMAL(10,2) oder DECIMAL(8,2)

  • DECIMAL speichert exakte Dezimalzahlen ohne Rundungsfehler
  • (10,2) bedeutet: maximal 10 Stellen insgesamt, davon 2 Nachkommastellen
  • Also Werte bis 99.999.999,99 möglich

Niemals FLOAT oder DOUBLE für Geldbeträge! Diese Typen können Rundungsfehler haben.


Frage 2: Was bedeutet AUTO_INCREMENT bei einem Primärschlüssel?

Antwort:

Die Datenbank vergibt automatisch die nächste freie Nummer.

  • Erster Datensatz bekommt ID 1
  • Nächster bekommt ID 2
  • Usw.

Du musst dich nicht selbst darum kümmern, welche ID als nächstes dran ist.


Frage 3: Was ist der Unterschied zwischen VARCHAR(50) und VARCHAR(255)?

Antwort:

Die maximale Länge des Textes:

  • VARCHAR(50) = maximal 50 Zeichen
  • VARCHAR(255) = maximal 255 Zeichen

Beide speichern nur so viel Platz, wie tatsächlich gebraucht wird. Ein Name mit 10 Buchstaben braucht 10 Bytes, egal ob VARCHAR(50) oder VARCHAR(255).

Trotzdem: Wähle sinnvolle Limits. Eine PLZ braucht keine 255 Zeichen.


Frage 4: Warum ist es gefährlich, UPDATE oder DELETE ohne WHERE auszuführen?

Antwort:

Ohne WHERE betrifft der Befehl ALLE Zeilen der Tabelle!

  • UPDATE kunden SET stadt = 'Berlin' → ALLE Kunden wohnen jetzt in Berlin
  • DELETE FROM kunden → ALLE Kunden werden gelöscht

Das ist fast nie gewollt und kann zu massivem Datenverlust führen.

Tipp: Erst WHERE schreiben, dann den Rest!


Frage 5: Schreibe einen INSERT-Befehl, der ein Produkt „USB-Kabel“ mit Preis 9.99 und Lagerbestand 100 einfügt.

Antwort:

INSERT INTO produkte (artikel, preis, lagerbestand)
VALUES ('USB-Kabel', 9.99, 100);

Beachte:

  • 'USB-Kabel' in Anführungszeichen (Text)
  • 9.99 und 100 ohne Anführungszeichen (Zahlen)
  • produkte_id wird weggelassen (AUTO_INCREMENT)

🎉 Tag 4 geschafft!

Boom! Du hast deinen ersten SQL-Code geschrieben! 🚀

Das hast du heute gelernt:

  • ✅ CREATE TABLE – Tabellen erstellen
  • ✅ Datentypen richtig wählen
  • ✅ INSERT – Daten einfügen
  • ✅ UPDATE – Daten ändern (mit WHERE!)
  • ✅ DELETE – Daten löschen (mit WHERE!)

Du kannst jetzt: Selbständig Tabellen erstellen und Daten pflegen. Das ist echtes, produktives SQL!

Honestly? Du hast gerade die Grundlagen von DDL (Data Definition Language) und DML (Data Manipulation Language) gelernt. Das sind zwei der vier großen SQL-Kategorien. Ab morgen kommt die dritte: Abfragen mit SELECT! 💪


Wie geht’s weiter?

Morgen (Tag 5): SELECT – Deine erste Abfrage

Was dich erwartet:

  • SELECT * FROM – Alle Daten anzeigen
  • Nur bestimmte Spalten auswählen
  • Spalten umbenennen mit AS
  • Berechnungen in Abfragen
  • Das ist der Befehl, den du am häufigsten nutzen wirst! 🔥

Brauchst du eine Pause?
Du hast es dir verdient! Vier Tage geschafft, das Fundament steht.

Tipp für heute:
Probiere die Befehle in phpMyAdmin aus! Öffne den SQL-Tab und tippe ein paar INSERT-Befehle. Mach ruhig Fehler – davon lernt man am meisten. Die versandhandel-Datenbank kannst du jederzeit neu importieren, falls du sie „kaputt“ machst.


🛠️ Troubleshooting

Problem: „Ich bekomme einen Syntaxfehler.“

Lösung: Häufige Ursachen:

  • Semikolon am Ende vergessen
  • Anführungszeichen bei Text vergessen
  • Komma zwischen Spalten vergessen
  • Klammer nicht geschlossen

Problem: „INSERT funktioniert nicht – ‚foreign key constraint fails‘.“

Lösung: Du versuchst, einen Fremdschlüssel einzufügen, der in der referenzierten Tabelle nicht existiert. Beispiel: kunden_id: 99 einfügen, aber es gibt keinen Kunden mit ID 99.

Problem: „Ich habe aus Versehen alle Daten gelöscht!“

Lösung: Wenn du kein Backup hast und keine Transaktion offen war: Die Daten sind weg. Deshalb: Immer erst mit SELECT prüfen, was betroffen wäre, bevor du DELETE ausführst!


📖 Im Buch nachlesen

Mehr Details zu den heutigen Themen findest du in:

Kapitel 5: Datendefinition (DDL)

  • 5.4 CREATE DATABASE, CREATE TABLE
  • 5.5 Datentypen
  • 5.6 Constraints

Kapitel 7: Datenmanipulation (DML)

  • 7.4.1 INSERT
  • 7.4.2 UPDATE
  • 7.4.3 DELETE
  • 7.4.4 Transaktionen

SQL Ressourcen & Weiterführende Links

Elyndra’s Schatzkiste – Alles, was du für deinen SQL-Lernweg brauchst


🎮 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

🔗 sqlbolt.com

  • 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

🔗 sqlzoo.net

  • 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

🔗 w3schools.com/sql

  • „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

🔗 sql-easy.com

  • Reduziert auf das Wesentliche
  • Sofort loslegen ohne Ablenkung
  • Über 200.000 Lernende seit 2017
  • Empfohlen für: Schnelle Wiederholung

Learn SQL Online

🔗 learnsqlonline.org

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

🔗 mariadb.com/kb/de/mariadb

  • Offizielle Dokumentation auf Deutsch
  • Alle Befehle, Datentypen, Konfigurationen
  • Das Nachschlagewerk für unseren Kurs

MariaDB.org Documentation

🔗 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

🔗 dev.mysql.com/doc

  • 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

🔗 apachefriends.org/de

  • 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

🔗 heidisql.com

  • Kostenloser SQL-Client für Windows
  • Grafische Oberfläche statt Kommandozeile
  • Perfekt für Einsteiger
  • Export/Import von Daten

DBeaver – Der Alleskönner

🔗 dbeaver.io

  • 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

🔗 YouTube: 4-Stunden-Kurs

  • Kompletter SQL-Kurs in einem Video
  • 4+ Stunden Inhalt
  • Sehr beliebt (Millionen Views)
  • Englisch mit guter Aussprache

Bro Code – SQL Playlist

🔗 YouTube Playlist

  • Viral gegangen 2024
  • Kurze, knackige Videos
  • Schritt für Schritt
  • Gut für Pausen zwischendurch

📅 Welche Ressource zu welchem Tag?

KurstagThemaEmpfohlene Ressource
Tag 1Was ist eine Datenbank?XAMPP installieren, MariaDB Doku
Tag 2Tabellen & BeziehungenW3Schools Referenz
Tag 3SchlüsselMariaDB Knowledge Base
Tag 4CREATE TABLESQLBolt Lesson 16-17
Tag 5SELECT BasicsSQLBolt Lesson 1-4
Tag 6WHERE & FilterSQLBolt Lesson 2-4
Tag 7GROUP BYSQLBolt Lesson 10-11
Tag 8HAVINGSQLZoo SUM and COUNT
Tag 9JOINsSQLBolt Lesson 6-7, SQLZoo JOIN
Tag 10SubqueriesSQLZoo SELECT within SELECT

💡 Elyndra’s Pro-Tipps

„Die beste Ressource ist die, die du auch benutzt.“

  1. Nicht alles auf einmal – Wähle EINE Übungsplattform und bleib dabei
  2. Täglich 15 Minuten schlägt einmal pro Woche 2 Stunden
  3. Fehler sind Lernchancen – Jede Fehlermeldung bringt dich weiter
  4. Eigene Datenbank – Sobald du kannst, arbeite mit eigenen Daten
  5. 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

Zertifizierungen

  • Oracle Database SQL Certified Associate
  • Microsoft Azure Data Fundamentals (DP-900)
  • Google Data Analytics Certificate

📥 Downloads aus unserem Kurs


Fragen? Feedback?
Schreib uns in die Kommentare oder kontaktiere das Java Fleet Team!


Letzte Aktualisierung: Dezember 2025
Zusammengestellt von Elyndra Valen – Senior Database Architect


💬 Feedback?

War dieser Tag zu schnell? Zu viel Code auf einmal?
Schreib uns: elyndra.valen@java-developer.online

Wir wollen, dass du erfolgreich lernst!


Bis morgen – SELECT wartet auf dich! 👋

Elyndra


SQL Basic – Tag 4 von 10
© Java Fleet Systems Consulting
www.java-developer.online

Autor

  • Elyndra Valen

    28 Jahre alt, wurde kürzlich zur Senior Entwicklerin befördert nach 4 Jahren intensiver Java-Entwicklung. Elyndra kennt die wichtigsten Frameworks und Patterns, beginnt aber gerade erst, die tieferen Zusammenhänge und Architektur-Entscheidungen zu verstehen. Sie ist die Brücke zwischen Junior- und Senior-Welt im Team.