Für diese Übung wird ein MySQL- oder MariaDB-Server benötigt. Da MariaDB-Server auf nahezu jedem Webserver für private, aber auch kleine und mittelständische Unternehmen installiert sind, werden wir ebenfalls diesen Server verwenden.
Fun-Fact: Oracle DB ist aktuell auf Platz 1, gefolgt von MySQL. MariaDB liegt immerhin auf Platz 15 (von ca. 400 Datenbank Engines).
MariaDB-Server
choco install mariadb
PhpMyAdmin-Weboberfläche (optional)
choco install phpmyadmin
Um Datenbanken zu managen, öffnen wir zuerst das Terminal und geben folgenden Befehl ein:
mariadb -u root
Wir werden nach keinem Passwort gefragt, da root
ohne Passwort eingerichtet
wurde. Für lokale Übungen reicht das auch so aus.
Hat alles geklappt, sollte nun folgende Maske zu sehen sein.
Die Filialen einer Kaufhauskette haben dem Rechnungswesen ihre Umsätze übermittelt. Die Daten sind nach folgendem Muster aufbereitet worden:
Datum | Standort | Produkt | Kategorie | Einzelpreis (in Cents) | Anzahl | Art |
---|---|---|---|---|---|---|
2024-02-15 | Berlin | Plüschtier | Kleinkinder | 599 | 2 | PayPal |
2024-03-10 | München | Lego-Set | Kinder | 1999 | 1 | Kreditkarte |
2024-04-20 | Hamburg | Brettspiel | Familie | 1499 | 3 | Geschenkkarte |
2024-05-05 | Frankfurt | Actionfigur | Kreativität | 999 | 4 | Bar |
2024-06-12 | Köln | Puzzle | Bildung | 799 | 2 | EC-Karte |
Da die Software-Lizenz für Excel leider abgelaufen ist, soll die Auswertung nun mithilfe einer Datenbank erfolgen.
Zuerst erstellen wir eine Datenbank (Schema), in der dann alle Kaufhaustabellen angelegt werden.
create schema if not exists kaufhaus collate utf8mb4_general_ci;
Hat alles geklappt, wird uns das mit einem QUERY OK
quittiert:
Da wir nun nur in der Datenbank kaufhaus arbeiten wollen, nutzen wir diese mit dem Befehl:
use kaufhaus;
Frage: Sollten wir jetzt einfach die obige Tabelle 1:1 übernehmen?
Die Tabelle sollte nicht 1:1 übernommen werden, da es hier zu sogenannten Anomalien kommen kann. Zu Übungszwecken tun wir das aber trotzdem.
CREATE TABLE IF NOT EXISTS umsatz
(
datum DATE NOT NULL,
standort VARCHAR(50) NOT NULL,
produkt VARCHAR(255) NOT NULL,
kategorie VARCHAR(50) NOT NULL,
einzelpreis int NOT NULL,
anzahl int NOT NULL,
art VARCHAR(50) NOT NULL
)
Lade dir zunächst folgende Datei herunter: umsatz.csv
Diese Datei bzw. deren Datensätze wollen wir nun in unsere neue erstellte Tabelle importieren. Dazu geben wir Folgendes in der Konsole ein:
LOAD DATA INFILE 'C:/Users/public/umsatz.csv'
INTO TABLE umsatz
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(datum, standort, produkt, kategorie, einzelpreis, anzahl, art);
Wir wollen nun wissen, wie viel Umsatz die einzelnen Standorte gemacht haben und wie viel Einkäufe (Anzahl Umsätze) getätigt wurden:
SELECT
standort,
count(standort) AS "Anzahl Umsätze",
FORMAT(sum(einzelpreis * anzahl/100),2,'de_DE') AS Umsatz
FROM umsatz
GROUP BY standort
ORDER BY standort
+-------------+-----------------+-----------+
| standort | Anzahl Umsätze | Umsatz |
+-------------+-----------------+-----------+
| Berlin | 61 | 10.090,18 |
| Dresden | 59 | 10.703,45 |
| Düsseldorf | 38 | 5.544,81 |
| Frankfurt | 37 | 5.232,58 |
| Hamburg | 54 | 10.152,00 |
| Hannover | 38 | 7.107,81 |
| Köln | 52 | 6.870,07 |
| Leipzig | 44 | 6.128,52 |
| München | 57 | 9.813,95 |
| Stuttgart | 59 | 10.802,26 |
+-------------+-----------------+-----------+
10 rows in set (0.001 sec)
Standort-ID | Standort |
---|---|
1 | Berlin |
2 | München |
3 | Hamburg |
4 | Frankfurt |
5 | Köln |
Kategorie-ID | Kategorie |
---|---|
1 | Kleinkinder |
2 | Kinder |
3 | Familie |
4 | Kreativität |
5 | Bildung |
Produkt-ID | Produkt | Kategorie-ID | Einzelpreis (in Cents) |
---|---|---|---|
1 | Plüschtier | 1 | 599 |
2 | Lego-Set | 2 | 1999 |
3 | Brettspiel | 3 | 1499 |
4 | Actionfigur | 4 | 999 |
5 | Puzzle | 5 | 799 |
Verkauf-ID | Datum | Standort-ID | Produkt-ID | Anzahl |
---|---|---|---|---|
1 | 2024-02-15 | 1 | 1 | 2 |
2 | 2024-03-10 | 2 | 2 | 1 |
3 | 2024-04-20 | 3 | 3 | 3 |
4 | 2024-05-05 | 4 | 4 | 4 |
5 | 2024-06-12 | 5 | 5 | 2 |