Programming lesson
SQL-Abfragen für Reisebuchungen: Praxis-Tutorial mit MariaDB (CIS4301 Homework #3)
Lerne SQL-Abfragen Schritt für Schritt anhand eines Reisebuchungs-Datenbanksystems. Inklusive INSERT, SELECT, WHERE, LIKE, BETWEEN und Pattern Matching – ideal für Studierende der Datenbanken.
Einführung: Warum SQL für Reisebuchungen?
Stell dir vor, du entwickelst eine App wie Booking.com oder Expedia – oder vielleicht ein KI-gestütztes Reiseplanungs-Tool, das aktuell in aller Munde ist. Jede Buchung, jeder Reisende und jedes Reiseziel wird in einer Datenbank gespeichert. Mit SQL (Structured Query Language) holst du genau die Informationen raus, die du brauchst. Dieses Tutorial führt dich durch die typischen Aufgaben aus CIS4301 Homework #3 – aber ohne die Lösung einfach zu kopieren. Du lernst das selbstständige Formulieren von SQL-Abfragen und verstehst die Konzepte dahinter.
Die Beispiele sind auf den Mai 2026 abgestimmt: Stell dir vor, du analysierst Buchungsdaten für die kommende Sommersaison. Die Tabellen TravelAgent, Traveler, Trip und Booking sind dein Spielplatz. Los geht's!
1. Datenmodell verstehen: Tabellen und Beziehungen
Bevor du eine einzige Abfrage schreibst, musst du das Schema verstehen. In dieser Aufgabe gibt es vier Tabellen:
- TravelAgent: Name, Jahre Erfahrung, Telefon
- Traveler: Name, SSN (Sozialversicherungsnummer), Geburtsdatum
- Trip: Reise-ID, Startort, Zielort, Abreisedatum, Rückreisedatum
- Booking: Verknüpft Agent (Name), Reisenden (SSN) und Reise (ID)
Beachte: Booking nutzt agent (String) und nicht den Primärschlüssel von TravelAgent – das ist ein typisches Design, das du in älteren Systemen findest. Für die Abfragen spielt das keine Rolle, solange die Werte übereinstimmen.
2. Tabellen anlegen und Daten einfügen (Schritt 2)
Zuerst erstellst du die Tabellen mit CREATE TABLE und fügst die Beispieldaten mit INSERT INTO ein. Wichtig: Verwende die exakt gleichen Datentypen wie in der Aufgabenstellung. Ein häufiger Fehler ist, VARCHAR statt String zu verwenden – aber in MariaDB ist VARCHAR üblich. Achte auf die Fremdschlüsselbeziehungen: Die Spalte agent in Booking sollte auf name in TravelAgent verweisen, auch wenn das in der Aufgabenstellung nicht explizit als Constraint gefordert ist. Übung: Schreibe die CREATE-Befehle und füge dann die Daten ein – genau wie in der Aufgabenstellung.
3. Grundlegende SELECT-Abfragen (Übungen 1–5)
Übung 1: Alle Agenten mit mehr als 10 Jahren Erfahrung
Aufgabe: Gib Namen und Telefonnummer aller Reiseagenten aus, die mehr als 10 Jahre Erfahrung haben. Füge eine zusätzliche Spalte hinzu – in der Originalaufgabe ist das eine Spalte mit einem berechneten Wert (z.B. „Erfahrungsstufe“). Du könntest z.B. 'Senior' als Konstante ausgeben. Die Lösung: SELECT name, phone, 'Senior' AS status FROM TravelAgent WHERE years_experience > 10;. Beachte den Vergleichsoperator > – exklusive 10 Jahre.
Übung 2–5: Einfache Filter mit WHERE
Die nächsten Aufgaben sind direkte WHERE-Klauseln:
- Übung 3: Alle Reisen, die in New York starten und in Paris enden:
SELECT * FROM Trip WHERE start_location = 'New York' AND end_location = 'Paris'; - Übung 4: Reisen, die in New York oder Miami starten:
WHERE start_location IN ('New York', 'Miami');oder mitOR. - Übung 5: Reisen nach dem 1. August 2025:
WHERE start_date > '2025-08-01';– Datumsvergleiche funktionieren in SQL mit einfachen Anführungszeichen.
Tipp: Teste jede Abfrage einzeln in MariaDB und vergleiche die Ergebnisse mit den erwarteten Datensätzen. So vermeidest du Flüchtigkeitsfehler.
4. Verknüpfungen und Unterabfragen (Übung 6)
Übung 6 verlangt: „Gib die Reisenden-SSN und Reise-ID für alle Buchungen des Reiseagenten Alice Brown aus.“ Hier greifst du auf die Booking-Tabelle zu. Die Abfrage ist simpel: SELECT traveler_ssn, trip_id FROM Booking WHERE agent = 'Alice Brown';. Aber was, wenn du auch den Namen des Reisenden brauchst? Dann müsstest du JOIN verwenden – das kommt in späteren Hausaufgaben. Merke: Lies die Aufgabe genau – hier sind nur SSN und trip_id gefragt.
5. Pattern Matching mit LIKE (Übungen 7–9)
Pattern Matching ist extrem nützlich, z.B. wenn du in einer App nach bestimmten Namen suchst. Die Aufgaben nutzen den LIKE-Operator und den Platzhalter _ (genau ein Zeichen) oder % (beliebig viele Zeichen).
Übung 7: Zweiter Buchstabe ist 'a'
Gesucht sind alle Reisenden, deren Name an zweiter Stelle ein 'a' hat. Das Pattern: '_a%'. Der Unterstrich steht für genau ein Zeichen (den ersten Buchstaben), dann ein 'a', dann beliebig viele weitere Zeichen. Beispiel: 'David Harris' hat 'a' als zweiten Buchstaben? Nein, 'D-a-vid' – der zweite Buchstabe ist 'a', aber Achtung: Der Vorname ist 'David' – hier ist der zweite Buchstabe 'a'? 'D' (1), 'a' (2) – ja! Aber der Nachname wird nicht beachtet, da LIKE standardmäßig auf die gesamte Zeichenkette angewendet wird. Wenn du nur den Vornamen betrachten willst, müsstest du die Spalte trennen – das ist hier nicht gefordert. Also: SELECT * FROM Traveler WHERE name LIKE '_a%';.
Übung 8: Alle außer 'David Harris'
Hier ist die Formulierung knifflig: „Finde alle Reisenden, die NICHT 'David Harris' heißen. Du musst Patterns verwenden.“ Das bedeutet, du darfst nicht einfach WHERE name != 'David Harris' schreiben, sondern musst ein Pattern nutzen. Eine Lösung: WHERE name NOT LIKE 'David Harris'. Das ist zwar ein Pattern, aber sehr direkt. Alternativ könntest du WHERE name NOT LIKE 'D%' verwenden – aber das würde auch andere mit D ausschließen. Die sauberste Pattern-basierte Lösung ist WHERE name NOT LIKE 'David Harris'. In der Aufgabenstellung wird akzeptiert, dass du NOT LIKE mit einem festen String verwendest – schließlich ist es ein Pattern ohne Wildcards.
Übung 9: Telefonnummer beginnt mit '456'
Pattern: '456%'. Also: SELECT * FROM TravelAgent WHERE phone LIKE '456%';. Einfach, oder?
6. Bereichsabfragen mit BETWEEN (Übung 10)
Die letzte Übung nutzt das BETWEEN-Keyword, um Reisen zu finden, die zwischen dem 1. Juli 2025 und dem 30. September 2025 starten. Wichtig: BETWEEN ist inklusive der Grenzen. Die Abfrage: SELECT * FROM Trip WHERE start_date BETWEEN '2025-07-01' AND '2025-09-30';. Vergiss nicht, die Datumsangaben in einfache Anführungszeichen zu setzen. Dieses Keyword ist besonders nützlich für Filter in Dashboards, z.B. wenn du alle Buchungen eines bestimmten Monats anzeigen willst.
7. Häufige Fehler und Tipps
- Semikolon vergessen: Jede SQL-Anweisung endet mit einem Semikolon. Sonst wartet MariaDB auf weitere Eingabe.
- Falsche Datentypen: Achte darauf, dass du Zahlen ohne Anführungszeichen schreibst, Strings und Datumsangaben aber in einfache Anführungszeichen setzt.
- LIKE ohne Wildcard: Wenn du
LIKE 'Alice'schreibst, ist das äquivalent zu= 'Alice'. Verwende%oder_für echte Muster. - Groß-/Kleinschreibung: MariaDB ist bei Stringvergleichen standardmäßig case-insensitive (hängt vom Collation ab). Aber sicherheitshalber solltest du die Schreibweise aus den Beispieldaten übernehmen.
8. Trend-Tipp: SQL im Zeitalter von KI-Reiseplanern
Im Mai 2026 nutzen viele Startups KI-gestützte Reiseplaner, die auf SQL-Datenbanken zugreifen, um personalisierte Angebote zu generieren. Stell dir vor, du entwickelst einen Chatbot, der auf Zuruf die günstigsten Flüge nach Paris findet. Dahinter steckt eine Abfrage wie: SELECT * FROM Trip WHERE end_location = 'Paris' AND start_date BETWEEN '2026-06-01' AND '2026-08-31';. Genau solche Abfragen lernst du hier. Auch Datenanalyse für Social-Media-Trends (z.B. „Welche Reiseziele sind diesen Sommer viral gegangen?“) basiert auf SQL. Mit den Grundlagen aus diesem Tutorial bist du bestens gerüstet.
Fazit
Dieses Tutorial hat dir gezeigt, wie du typische SQL-Abfragen für ein Reisebuchungssystem formulierst. Du hast gelernt, WHERE-Klauseln, LIKE-Patterns und BETWEEN einzusetzen. Übe jede Abfrage selbst in MariaDB – nur so entwickelst du ein Gespür für die Syntax. Denk daran: In der Hausaufgabe musst du auch Screenshots deiner Ergebnisse einfügen. Viel Erfolg!