Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Eine Frage der Leitung mit SQL beantworten

Nach dieser Lektion: Ich kann eine Frage der Leitung mit einer SQL-Abfrage beantworten.

Lektion, 45 Min.5 BefehleMySQL-und-phpMyAdmin-Lab mit Beispieldatenbank eines Shops zum Üben von SQL

Welches Produkt bringt am meisten Geld?

Ein Bericht beantwortet eine Frage mit Zahlen, zum Beispiel: Wie viel Umsatz hat jedes Produkt gebracht? Mit SQL stellst du so eine Frage in wenigen Zeilen, und die Datenbank rechnet für dich.

Im Schulcafé will die Leitung nach einer Woche wissen, was sich lohnt. Niemand will dafür 16 Zeilen von Hand addieren, und schon gar nicht 4.000.

Am Ende dieser Lektion

Notiz

Ich kann eine Frage der Leitung mit einer SQL-Abfrage beantworten.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Berichteine Antwort auf eine Frage, in Zahlen
Abfrageeine Frage an die Datenbank, in SQL geschrieben
Umsatzdas Geld, das durch Verkäufe hereinkommt
Aggregatfunktionrechnet viele Zeilen zu einer Zahl zusammenSUM
Gruppealle Zeilen mit demselben Wert in einer Spalte
Filtereine Bedingung, die Zeilen behält oder aussortiert

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Aus der Frage wird eine Abfrage

Schreib die Frage zuerst als Satz. Suche darin drei Dinge: welche Zahl gesucht ist, wonach du sortierst und welche Zeilen überhaupt zählen.

Erst danach schreibst du SQL. So baust du die Abfrage Stück für Stück und rätst nicht.

Ein Beispiel: eine Frage in Teile zerlegen

Teil der FrageGesucht istSQL
Wie viel Umsatz je Produkt?Die Summe pro ProduktSUM(...) und GROUP BY produkt
Nur ab dem 3. März?Ein Filter auf die ZeilenWHERE datum >= '2026-03-03'
Das größte zuerst?Eine ReihenfolgeORDER BY ... DESC

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Probier es: Stück je Produkt

Code: sql
-- Wie viele Stück wurden von jedem Produkt verkauft?
SELECT produkt, SUM(menge) AS stueck
FROM verkaeufe
GROUP BY produkt
ORDER BY stueck DESC;
-- Ändere SUM(menge) in COUNT(*) und starte noch einmal.

Aggregatfunktionen fassen viele Zeilen zusammen

Eine Aggregatfunktion rechnet viele Zeilen zu einer einzigen Zahl zusammen. Die wichtigsten vier stehen in der Tabelle.

Mit GROUP BY bildest du Gruppen. Die Funktion rechnet dann für jede Gruppe einzeln.

Ein Beispiel: die wichtigsten Funktionen

FunktionSie liefertBeispiel
COUNT(*)die Zahl der ZeilenCOUNT(*)
SUM(spalte)die SummeSUM(menge)
AVG(spalte)den DurchschnittAVG(preis_in_cent)
MIN und MAXden kleinsten und größten WertMAX(menge)

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Geld rechnest du in Cent

Die Tabelle speichert den Preis in Cent: 90 steht für 0,90 Euro. So gibt es keine Rundungsfehler beim Addieren.

Für den Umsatz rechnest du menge * preis_in_cent. Erst am Ende teilst du durch 100,0 und bekommst Euro.

Probier es: Umsatz je Kategorie

Code: sql
-- Der Umsatz je Kategorie, erst in Cent, dann in Euro.
SELECT kategorie,
       SUM(menge * preis_in_cent) AS umsatz_in_cent,
       SUM(menge * preis_in_cent) / 100.0 AS umsatz_in_euro
FROM verkaeufe
GROUP BY kategorie
ORDER BY umsatz_in_cent DESC;
-- Füge vor GROUP BY die Zeile WHERE datum = '2026-03-02' ein.

Dieselben Fragen an eine größere Datenbank

Im Lab liegt die Datenbank shop mit 120 Bestellungen und 40 Kundinnen und Kunden. Drück oben in der Leiste auf Lab starten und öffne das Terminal.

Die ersten zwei Befehle richten die Verbindung ein. Alle weiteren stellen eine Frage und ändern nichts.

Das Zertifikat des Servers annehmen

Befehl
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnf

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Eine Abkürzung für die Verbindung

Befehl
alias sql='mariadb -h db -u student -pstudent shop -t -e'

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Wie viele Bestellungen hat jeder Status?

Befehl
sql "SELECT status, COUNT(*) AS anzahl FROM orders GROUP BY status ORDER BY status"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Aus welchem Land kommt wie viel Kundschaft?

Befehl
sql "SELECT country, COUNT(*) AS anzahl FROM customers GROUP BY country ORDER BY anzahl DESC, country"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Wie hoch ist die Summe aller Positionen?

Befehl
sql "SELECT SUM(quantity * unit_price) AS umsatz FROM order_items"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

HAVING prüft Gruppen, WHERE prüft Zeilen

WHERE sortiert Zeilen aus, bevor gruppiert wird. HAVING prüft die Gruppen, nachdem die Funktion gerechnet hat.

Willst du nur Produkte mit mehr als 25 verkauften Stück, brauchst du HAVING SUM(menge) > 25. Die Summe gibt es erst nach dem Gruppieren.

Probier es: nur große Gruppen behalten

Code: sql
-- Nur Produkte, die insgesamt mehr als 25 Stück verkauft haben.
SELECT produkt, SUM(menge) AS stueck
FROM verkaeufe
GROUP BY produkt
HAVING SUM(menge) > 25
ORDER BY stueck DESC;
-- Ändere 25 in 40 und starte noch einmal.

Ein häufiger Fehler

Warnung

Viele denken, WHERE SUM(menge) > 25 sei dasselbe wie HAVING. Es ist ein Fehler, denn beim WHERE gibt es die Summe noch nicht. Nutze WHERE für einzelne Zeilen und HAVING für Gruppen.

Über dieses Lab und seinen Quellcode: MySQL-und-phpMyAdmin-Lab mit Beispieldatenbank eines Shops zum Üben von SQL

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.