Webshop-Join: Suppe kochen, Warenkörbe zählen
Über diese App
Joins und Gruppen an der Übungsdatenbank prodat: tools join products bildet erst alle 9 Kombinationen, on kocht sie auf 3 herunter (mit ambiguous column name und Komma + where). customers × orders ergibt 23 · 184 = 4232 Zeilen, nach on 184. group by order_id macht daraus 80 Warenkörbe, sum(quantity) zählt die Artikel, having lässt 45 stehen. Dazu: Bestellung als Zeile oder als Warenkorb, Monstertabelle gegen getrennte Tabellen, Löschen und Fremdschlüssel.
Mit Erklärmodus: Ein KI-Tutor führt dich durch die App, zeigt in der Szene, worauf es ankommt, und beantwortet deine Fragen.
Join = Kreuzprodukt + Bedingung
Ein JOIN verbindet zwei Tabellen. Logisch kombiniert er zuerst jede Zeile der einen mit jeder Zeile der anderen Tabelle: Aus 3 und 3 Zeilen werden 9, aus 23 Kunden und 184 Bestellzeilen 4232 Kombinationen. Die ON-Bedingung lässt davon nur die Paare stehen, die zusammengehören, etwa gleiche Kundennummern. Kommt ein Spaltenname in beiden Tabellen vor, steht der Tabellenname davor (customers.customer_id), sonst meldet die Datenbank ambiguous column name. FROM a, b mit WHERE liefert dasselbe wie JOIN … ON.
Was die App zeigt
Sechs Szenen auf der Übungsdatenbank prodat: das Kreuzprodukt tools × products, das auf drei Zeilen heruntergekocht wird; die vier Tabellen customers, orders, products und deliveries mit ihren Schlüsseln; customers × orders als Raster, in dem nach ON je Bestellzeile genau ein Kunde übrig bleibt; GROUP BY order_id, das 184 Bestellzeilen zu 80 Warenkörben zusammenfasst, mit sum(quantity) und HAVING; zwei Deutungen von „Bestellung“ (25 Zeilen gegen 45 Warenkörbe); und eine Monstertabelle gegen getrennte Tabellen mit Löschen und Fremdschlüssel.
Selbst ausprobieren
Wähle eine Szene und geh die Schritte durch: Schreib die Bedingung zuerst ohne Tabellennamen, koch die Suppe herunter, gruppiere die Bestellzeilen, setze die Schwelle von fünf Artikeln und lösche einen Kunden. Die Zahlen im Panel zeigen jeweils, wie viele Zeilen, Warenkörbe oder Verweise gerade übrig sind.
Häufige Fragen
- Was macht ein SQL-JOIN ohne Bedingung?
- Er bildet das kartesische Produkt: jede Zeile der ersten Tabelle mit jeder Zeile der zweiten. Zwei Tabellen mit n und m Zeilen ergeben n · m Zeilen. Erst die ON-Bedingung (oder WHERE) lässt die Paare stehen, die zusammengehören.
- Was bedeutet ambiguous column name?
- Eine Spalte mit diesem Namen gibt es in mehreren Tabellen der Abfrage, etwa id in tools und in products. Die Datenbank weiß nicht, welche gemeint ist. Abhilfe: den Tabellennamen davor schreiben, zum Beispiel tools.id.
- Wann HAVING, wann WHERE nach einem Join?
- WHERE prüft einzelne Zeilen, HAVING prüft Gruppen nach GROUP BY. „Warenkörbe mit mehr als fünf Artikeln“ braucht GROUP BY order_id und HAVING sum(quantity) > 5; WHERE quantity > 5 prüft dagegen jede Bestellzeile für sich.
- Was kann ich in der App ausprobieren?
- Sechs Szenen mit Schritten: Kreuzprodukt und ON, die Tabellen des Webshops, customers × orders, Warenkörbe mit GROUP BY und HAVING, Zeile gegen Warenkorb und das Löschen mit Fremdschlüssel. Ein Erklärmodus führt durch alles.
Fach: Informatik
Mehr aus Informatik
- Ackermann-Funktion
- Aufzug-Simulator
- Binär-Werkstatt
- Binäre vs. lineare Suche
- Collatz-Problem (3n+1)
- CPU-Innenleben
- Das Innere austauschen
- Ein Frame in 16 Millisekunden — wie eine Game-Engine ein Bild rechnet (3D)
Eine VisuApp von heyprof: interaktiv, kostenlos im Browser, ohne Anmeldung. Was ist eine VisuApp? · Alle Apps