====== LU09b: Üben – JOINs im Reiseblog ====== Ziel: JOINs selbst anwenden (INNER JOIN & WHERE-Variante). Arbeiten Sie direkt auf der DB aus LU08c. ==== Aufgabe 1 – Posts mit Autor:in ==== Geben Sie Post-ID, Titel, Autor aus – einmal mit INNER JOIN, einmal mit WHERE-Schreibweise. Nach Post-ID sortieren. Erwartete Spalten: ''post_id, title, author'' ==== Aufgabe 2 – Posts pro Kategorie „Städtereise“ ==== Listen Sie alle Posttitel auf, die zur Kategorie „Städtereise“ gehören (''slug = 'staedtereise' ''). Sortieren Sie nach Titel. ==== Aufgabe 3 – Posts mit Autor und Kategorien ==== Geben Sie Titel, Autor, Kategorie aus (eine Zeile pro Kategorie). Nach Titel, dann Kategorie sortieren. Tipp: Sie brauchen drei Tabellen (''posts, post_category, categories'') – plus //users//, wenn der Autor gezeigt werden soll. ==== Aufgabe 4 – Suche nach Autorname ==== Zeigen Sie alle Titel der Posts, die von „Martin Merten“ geschrieben wurden. ==== Aufgabe 5 (optional) – Zählen ohne GROUP BY vermeiden ==== Finden Sie alle Kategorien, in denen Caro Steig mindestens einen Post hat. (Nur Kategorienamen ausgeben, ohne doppelte Zeilen.) Tipp: ''SELECT DISTINCT c.name …'' ==== Lösungen (Beispielausschnitte) ==== A1 – Variante JOIN: SELECT p.post_id, p.title, u.display_name AS author FROM posts p INNER JOIN users u ON p.author_id = u.user_id ORDER BY p.post_id; A2 – Kategorie „Städtereise“: SELECT p.title FROM posts p INNER JOIN post_category pc ON p.post_id = pc.post_id INNER JOIN categories c ON pc.category_id = c.category_id WHERE c.slug = 'staedtereise' ORDER BY p.title; A3 – Titel, Autor, Kategorie: SELECT p.title, u.display_name AS author, c.name AS category FROM posts p INNER JOIN users u ON p.author_id = u.user_id INNER JOIN post_category pc ON p.post_id = pc.post_id INNER JOIN categories c ON pc.category_id = c.category_id ORDER BY p.title, c.name; A4 – Posts von Martin: SELECT p.title FROM posts p INNER JOIN users u ON p.author_id = u.user_id WHERE u.display_name = 'Martin Merten' ORDER BY p.title; A5 (optional) – Kategorien von Caro (DISTINCT): SELECT DISTINCT c.name FROM categories c INNER JOIN post_category pc ON c.category_id = pc.category_id INNER JOIN posts p ON pc.post_id = p.post_id INNER JOIN users u ON p.author_id = u.user_id WHERE u.display_name = 'Caro Steig' ORDER BY c.name; ==== Kurz-Referenz ==== INNER JOIN … ON – moderne, klare Schreibweise. Mehrere Tabellen nach FROM + WHERE – ältere Variante, fachlich gleichwertig. Join-Pfad denken: Von der Tabelle loslaufen, die Sie anzeigen möchten, dann Schritt für Schritt zu den benötigten Infos verbinden (z. B. ''posts → users'' oder ''posts → post_category → categories''). DISTINCT hilft gegen Dubletten bei N:M-Abfragen. ORDER BY erst am Schluss – bestimmt die Ausgabe-Reihenfolge.