<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<game format-version="2" db-system="sqlite" db-system-min-version="3.37.0">
    <head>
        <title>Jack Frost: Von der Idee zur Eisdiele</title>
        <teaser>In einer Welt, in der andere Millionäre mit Aktien jonglieren, taucht unser Held Jack Frost auf der Bildfläche auf - jedoch nicht im Anzug, sondern im kühlen Glanz seiner Eishütchen! Begleite Jack auf seinem eiskalten Abenteuer, wenn er die Welt der Wirtschaft mit einem Hauch von Frost revolutioniert. Jack, ein verschmitzter Eisverkäufer mit einer Vorliebe für Winterwunder und eisgekühlte Träume, entdeckt, dass der Schlüssel zu seinem eiskalten Reichtum nicht in einem Banksafe, sondern in seinem frostigen Köpfchen liegt. Was passiert, wenn Jack beschließt, nicht nur ein, sondern gleich mehrere Eisdielen zu eröffnen, um den Sommer in einen eisigen Rausch zu versetzen? Tauche ein in ein Abenteuer voller skurriler Geschäftsideen, frostiger Finanztricks und einem Hauch von Magie, wenn Jack Frost Millionär werden will. Doch Vorsicht, denn nicht nur die Eiscreme schmilzt in diesem humorvollen Spiel um Reichtum und Kälte! Bist du bereit für einen Slalom durch die Welt der gefrorenen Träume? Schnapp dir deinen Eislöffel und mach dich bereit für das eisigste Geschäft des Jahrhunderts!</teaser>
        <copyright>© 2024 Emily K., Ida T., Leni H.</copyright>
    </head>
    <scenes>
        <select-scene is-row-order-relevant="false" is-col-order-relevant="false" are-col-names-relevant="false">
            <text>Hi, ich bin Jack Frost und ich brauche deine Hilfe. Ich brauche dringend ein Business. Kannst du herausfinden, welche Business-Informationen es gibt? Zeige alle Spalten und Zeilen der Tabelle `Business`. Sie enthält fiktive Vergleichsbetriebe; `Jahresgewinn` ist ihr Gewinn nach Betriebskosten für ein abgeschlossenes Geschäftsjahr in Euro. Hinweise helfen dir bei neuen Befehlen.</text>
            <sql-solution>SELECT * FROM Business;</sql-solution>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
                <text-hint>Mit `SELECT *` wählst du alle Spalten aus. Nach `FROM` folgt der Tabellenname.</text-hint>
            </hints>
        </select-scene>
        <select-scene is-row-order-relevant="false" is-col-order-relevant="false" are-col-names-relevant="false">
            <text>Wow, das sind viele… doch ich möchte doch möglichst schnell reich werden. Zeig mir die Businesses mit ihren Ideen und ihrem Geld/Gewinn. Gib dafür `Name`, `Ideen` und `Jahresgewinn` aller Vergleichsbetriebe aus.</text>
            <sql-solution>SELECT Name, Ideen, Jahresgewinn FROM Business;</sql-solution>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
                <text-hint>Nenne die drei gewünschten Spalten hinter `SELECT`, jeweils durch ein Komma getrennt.</text-hint>
            </hints>
        </select-scene>
        <text-scene>
            <text>Eisläden bringen viel Geld! Die Zahlen sind Vergleichswerte und keine Garantie für meinen Erfolg.</text>
        </text-scene>
        <select-scene is-row-order-relevant="false" is-col-order-relevant="false" are-col-names-relevant="false">
            <text>Uhh, Eisdielen sind wohl sehr gewinnbringend. Das wäre doch eine tolle Idee für meine Region. Doch gibt es bereits Konkurrenz? Welche Eisdielen gibt es bereits hier in der Region Fürstenberg? Zeige `Name` und `Ideen`.</text>
            <sql-solution>SELECT Name, Ideen
FROM Business
WHERE Ort = 'Fürstenberg' AND Ideen = 'Eisdiele';</sql-solution>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
                <text-hint>Verknüpfe den Ort und die Geschäftsidee mit `AND`. Textwerte stehen in einfachen Anführungszeichen.</text-hint>
            </hints>
        </select-scene>
        <text-scene>
            <text>→ Eisläden gibt es hier nicht viele. Eisberg ist die einzige Eisdiele in unseren Vergleichsdaten für Fürstenberg.</text>
        </text-scene>
        <select-scene is-row-order-relevant="false" is-col-order-relevant="false" are-col-names-relevant="false">
            <text>Wie toll, es gibt hier nur eine andere Eisdiele. Sind Eisdielen in Fürstenberg denn überhaupt gewinnbringend? Zeige `Name` und `Jahresgewinn` aller Eisdielen in Fürstenberg.</text>
            <sql-solution>SELECT Name, Jahresgewinn
FROM Business
WHERE Ort = 'Fürstenberg' AND Ideen = 'Eisdiele';</sql-solution>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
                <text-hint>Behalte beide Bedingungen aus der vorigen Aufgabe bei; ändere die ausgewählten Spalten.</text-hint>
            </hints>
        </select-scene>
        <text-scene>
            <text>→ Ja, sehr! Eisberg hat in einem Geschäftsjahr 60.000 € Gewinn nach Betriebskosten erzielt. Das ist allerdings noch nicht mein eigener Gewinn.</text>
        </text-scene>
        <select-scene is-row-order-relevant="false" is-col-order-relevant="false" are-col-names-relevant="false">
            <text>Oh ja! So kann ich Millionär werden. Ich möchte hier eine Filiale kaufen! Nun muss ich schauen, welche Häuser in Fürstenberg zur Verfügung stehen. Zeige alle Informationen zu den Filialen dort, deren `BesitzerID` noch `NULL` ist. In dieser Übungsdatenbank kennzeichnet `NULL` einen zum Kauf verfügbaren Standort.</text>
            <sql-solution>SELECT *
FROM Filiale
WHERE Ort = 'Fürstenberg' AND BesitzerID IS NULL;</sql-solution>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
                <text-hint>`NULL` prüfst du mit `IS NULL`, nicht mit `= NULL`. Die andere Filiale in Fürstenberg hat bereits eine Besitzerin.</text-hint>
            </hints>
        </select-scene>
        <text-scene>
            <text>→ Ein Haus ist frei. Die eingerichtete Filiale steht in der Krallenstraße 23. Der angegebene Preis umfasst in unserem vereinfachten Modell Einrichtung und Kaufnebenkosten.</text>
        </text-scene>
        <select-scene is-row-order-relevant="false" is-col-order-relevant="false" are-col-names-relevant="false">
            <text>Ein Haus ist frei. Kann ich mir das leisten? Wie hoch ist denn der Preis? Zeige nur `Preis` für die verfügbaren Filialen in Fürstenberg.</text>
            <sql-solution>SELECT Preis
FROM Filiale
WHERE Ort = 'Fürstenberg' AND BesitzerID IS NULL;</sql-solution>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
                <text-hint>Wähle nur `Preis` aus. Beide Bedingungen bleiben wichtig.</text-hint>
            </hints>
        </select-scene>
        <text-scene>
            <text>→ So viel habe ich nicht auf einem Konto, ich brauche 50.000 €! Bevor wir etwas buchen, prüfen wir das gesamte Guthaben.</text>
        </text-scene>
        <select-scene is-row-order-relevant="false" is-col-order-relevant="false" are-col-names-relevant="false">
            <text>Oh nein, das ist zu viel. Ich muss meine zwei Kontostände summieren. Ich habe in `Personen` die `PersonID` 1. Die Spalte `InhaberID` in `Konten` verweist darauf. Berechne die Summe von `Guthaben` auf allen meinen Konten.</text>
            <sql-solution>SELECT SUM(Guthaben) AS Gesamtguthaben
FROM Konten
WHERE InhaberID = 1;</sql-solution>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
                <text-hint>`SUM(Guthaben)` addiert die ausgewählten Kontostände. Beschränke die Zeilen vorher mit `WHERE` auf `InhaberID = 1`.</text-hint>
            </hints>
        </select-scene>
        <text-scene>
            <text>→ Jetzt habe ich genügend Geld, um mir die Filiale zu kaufen! Zusammen sind es 50.200 €. Der Kauf ist damit möglich; danach bleiben 200 € auf den Konten. Wir erfassen hier den Kauf eines vollständig eingerichteten Standorts. Spätere Einnahmen und Betriebskosten werden als Jahresergebnis zusammengefasst.</text>
        </text-scene>
        <manipulate-scene>
            <text>Ich kaufe mir die Filiale und ändere den Besitzer. Buche den vereinbarten Kauf: Ziehe von jedem meiner beiden Konten (`InhaberID` 1) genau 25.000 € ab und trage bei der verfügbaren Filiale in Fürstenberg, Krallenstraße 23, `BesitzerID` 1 ein. Führe die Änderungen in einer Transaktion aus. Alle anderen Daten sollen unverändert bleiben.</text>
            <sql-solution>BEGIN TRANSACTION;
UPDATE Konten SET Guthaben = Guthaben - 25000 WHERE InhaberID = 1;
UPDATE Filiale SET BesitzerID = 1
WHERE Ort = 'Fürstenberg' AND Adresse = 'Krallenstraße 23' AND BesitzerID IS NULL;
COMMIT;</sql-solution>
            <sql-check>SELECT * FROM Personen;
SELECT * FROM Business;
SELECT * FROM Filiale;
SELECT * FROM Angestellte;
SELECT * FROM Konten;
SELECT * FROM Eissorten;
SELECT type, name, tbl_name, sql FROM sqlite_schema WHERE name NOT LIKE 'sqlite_%';
PRAGMA foreign_key_check;</sql-check>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
                <text-hint>`UPDATE Tabelle SET Spalte = Ausdruck WHERE Bedingung` ändert ausgewählte Zeilen. Ein Ausdruck wie `Guthaben - 25000` verwendet den bisherigen Wert.</text-hint>
                <text-hint>`BEGIN TRANSACTION;` beginnt eine Transaktion, `COMMIT;` schließt sie ab. Dazwischen stehen die beiden `UPDATE`-Anweisungen. Nach einem SQL-Fehler beendest du eine noch offene Transaktion mit `ROLLBACK;` oder setzt die Datenbank der Szene zurück.</text-hint>
                <text-hint>Zahlung und Besitzerwechsel sollen gemeinsam bestätigt werden. Sende `BEGIN TRANSACTION;`, beide `UPDATE`-Anweisungen und `COMMIT;` als einen SQL-Block ab.</text-hint>
            </hints>
        </manipulate-scene>
        <select-scene is-row-order-relevant="false" is-col-order-relevant="false" are-col-names-relevant="false">
            <text>Bin ich jetzt wirklich Besitzer? Zeige `BesitzerID` und `Adresse` für die Filiale in Fürstenberg mit der Adresse Krallenstraße 23. Dieselbe Straße gibt es auch in Berlin.</text>
            <sql-solution>SELECT BesitzerID, Adresse
FROM Filiale
WHERE Ort = 'Fürstenberg' AND Adresse = 'Krallenstraße 23';</sql-solution>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
                <text-hint>`Ort` und `Adresse` bestimmen den Standort gemeinsam. `BesitzerID` 1 steht für Jack Frost.</text-hint>
            </hints>
        </select-scene>
        <text-scene>
            <text>→ Ja, bin ich! Die Filiale ist jetzt auf mich eingetragen und bezahlt. Auf meinen Konten stehen 0 € und 200 €. Nun plane ich das Sortiment für die Eröffnung.</text>
        </text-scene>
        <select-scene is-row-order-relevant="true" is-col-order-relevant="false" are-col-names-relevant="false">
            <text>Nun brauche ich noch die beliebtesten 5 Eissorten für meinen Laden. Zeige `Eissorte` und `Beliebtheit` der fünf beliebtesten Eissorten, absteigend nach `Beliebtheit`. Bei gleicher `Beliebtheit` sortiere alphabetisch aufsteigend nach `Eissorte`.</text>
            <sql-solution>SELECT Eissorte, Beliebtheit
FROM Eissorten
ORDER BY Beliebtheit DESC, Eissorte ASC
LIMIT 5;</sql-solution>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
                <text-hint>`ORDER BY Beliebtheit DESC` sortiert die höchsten Werte zuerst. `LIMIT 5` begrenzt das Ergebnis auf fünf Zeilen.</text-hint>
                <text-hint>Vanille und Bueno haben beide den Wert 4. Füge `Eissorte ASC` als zweites Sortierkriterium hinzu, damit auch Gleichstände eindeutig geordnet sind.</text-hint>
                <text-hint>Trenne die Sortierkriterien hinter `ORDER BY` durch ein Komma. Das zweite Kriterium greift nur bei gleicher `Beliebtheit`; `Eissorte ASC` sortiert dann alphabetisch aufsteigend. `LIMIT` steht nach der gesamten `ORDER-BY`-Klausel.</text-hint>
            </hints>
        </select-scene>
        <text-scene>
            <text>→ Die fünf beliebtesten Eissorten sind 1. Schokolade 2. Bueno 3. Vanille 4. Pistazie 5. Zitrone. Bueno und Vanille sind gleich beliebt; in unserer Liste entscheidet dann das Alphabet. Die Abfrage ist meine Bestellliste, keine Lagerbuchung.</text>
        </text-scene>
        <select-scene is-row-order-relevant="false" is-col-order-relevant="false" are-col-names-relevant="false">
            <text>Wow, nun bin ich schon so weit gekommen. Ich habe nun meine eigene Filiale mit den Eissorten Schokolade, Bueno, Vanille, Pistazie, Zitrone. Zeig mir eine Übersicht für mein Business und meine Filiale: Für meine Geschäftsplanung brauche ich Vergleichswerte. Verbinde meine Filialen (`BesitzerID` 1) mit allen Vergleichsbetrieben am selben Ort und im selben Land. Zeige `Filiale.Adresse`, `Business.Name`, `Business.Ideen` und `Business.Jahresgewinn`. Diese Betriebe gehören weiterhin anderen Personen.</text>
            <sql-solution>SELECT Filiale.Adresse, Business.Name, Business.Ideen, Business.Jahresgewinn
FROM Filiale
JOIN Business ON Business.Ort = Filiale.Ort AND Business.Land = Filiale.Land
WHERE Filiale.BesitzerID = 1;</sql-solution>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
                <text-hint>`JOIN` verbindet Tabellen; `ON` beschreibt, welche Zeilen zusammengehören. Hier vergleichen wir Standorte über `Ort` und `Land`, nicht über Eigentum.</text-hint>
                <text-hint>Verbinde die Vergleiche für `Ort` und `Land` in `ON` mit `AND`. Wähle alle passenden Vergleichsbetriebe aus, auch solche mit einer anderen Geschäftsidee als Eisdiele.</text-hint>
                <text-hint>`WHERE Filiale.BesitzerID = 1` schränkt die Ausgangsfilialen auf Jack ein. Verwende die Tabellennamen vor den Spalten, damit klar ist, welche Angaben du auswählst.</text-hint>
            </hints>
        </select-scene>
        <manipulate-scene>
            <text>Ein Geschäftsjahr später: Ich habe den Laden eingerichtet, Zutaten bestellt und zunächst selbst bedient. Mein eigener Jahresabschluss weist 60.000 € Gewinn nach sämtlichen Betriebskosten aus; Einnahmen und laufende Ausgaben buchen wir hier vereinfacht als diesen Nettobetrag. Trage 60000 als `Jahresgewinn` meiner Filiale mit `FilialeID` 4 ein und erhöhe `Guthaben` meines Kontos 12648953 um 60000. Buche beides in einer Transaktion; die Vergleichsbetriebe und alle übrigen Daten bleiben unverändert.</text>
            <sql-solution>BEGIN TRANSACTION;
UPDATE Filiale SET Jahresgewinn = 60000 WHERE FilialeID = 4 AND BesitzerID = 1;
UPDATE Konten SET Guthaben = Guthaben + 60000 WHERE Nr = '12648953' AND InhaberID = 1;
COMMIT;</sql-solution>
            <sql-check>SELECT * FROM Personen;
SELECT * FROM Business;
SELECT * FROM Filiale;
SELECT * FROM Angestellte;
SELECT * FROM Konten;
SELECT * FROM Eissorten;
SELECT type, name, tbl_name, sql FROM sqlite_schema WHERE name NOT LIKE 'sqlite_%';
PRAGMA foreign_key_check;</sql-check>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
                <text-hint>`Filiale.Jahresgewinn` beschreibt Jacks tatsächlichen Betrieb; `Business.Jahresgewinn` enthält fremde Vergleichswerte.</text-hint>
                <text-hint>Im `Filiale`-`UPDATE` setzt du den `Jahresgewinn`. Im `Konten`-`UPDATE` addierst du den Gewinn zum vorhandenen `Guthaben`.</text-hint>
            </hints>
        </manipulate-scene>
        <select-scene is-row-order-relevant="false" is-col-order-relevant="false" are-col-names-relevant="false">
            <text>Toll, das ist viel Geld. Jetzt habe ich genug Geld, um Mitarbeiter*innen einzustellen. Suche Angestellte, die bei keinem Arbeitgeber beschäftigt sind. Zeige alle Informationen zu Angestellten, deren `ArbeitgeberID` `NULL` ist. Die Spalte `Jahreslohn` enthält die geplanten jährlichen Personalkosten einer Teilzeitstelle in Euro.</text>
            <sql-solution>SELECT * FROM Angestellte WHERE ArbeitgeberID IS NULL;</sql-solution>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
                <text-hint>`ArbeitgeberID` verweist auf `Personen`. `NULL` bedeutet hier, dass die Person für eine Einstellung verfügbar ist.</text-hint>
            </hints>
        </select-scene>
        <select-scene is-row-order-relevant="false" is-col-order-relevant="false" are-col-names-relevant="false">
            <text>Nun möchte ich Mitarbeiter*innen, die fleißig und nett sind und noch bei keinem Arbeitgeber beschäftigt. Zeige alle Informationen zu ihnen. In diesem vereinfachten Modell steht 1 für ja und 0 für nein.</text>
            <sql-solution>SELECT *
FROM Angestellte
WHERE ArbeitgeberID IS NULL AND Fleissig = 1 AND Nett = 1;</sql-solution>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
                <text-hint>Verknüpfe alle drei Bedingungen mit `AND`. Jan Winter ist zwar fleißig und nett, arbeitet aber bereits für jemand anderen.</text-hint>
            </hints>
        </select-scene>
        <manipulate-scene>
            <text>Diese Angestellten stelle ich ein. Stelle genau die verfügbaren, fleißigen und netten Angestellten ein: Setze ihre `ArbeitgeberID` auf meine `PersonID` 1. Der `Jahreslohn` ist eine Planung für das kommende Jahr und wird jetzt noch nicht von den Konten abgebucht. Verändere keine weiteren Daten.</text>
            <sql-solution>UPDATE Angestellte
SET ArbeitgeberID = 1
WHERE ArbeitgeberID IS NULL AND Fleissig = 1 AND Nett = 1;</sql-solution>
            <sql-check>SELECT * FROM Personen;
SELECT * FROM Business;
SELECT * FROM Filiale;
SELECT * FROM Angestellte;
SELECT * FROM Konten;
SELECT * FROM Eissorten;
SELECT type, name, tbl_name, sql FROM sqlite_schema WHERE name NOT LIKE 'sqlite_%';
PRAGMA foreign_key_check;</sql-check>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
                <text-hint>Übernimm alle drei Bedingungen aus der Auswahl in die `UPDATE`-Anweisung. Ohne `WHERE` würdest du auch andere Arbeitsverhältnisse ändern.</text-hint>
            </hints>
        </manipulate-scene>
        <select-scene is-row-order-relevant="false" is-col-order-relevant="false" are-col-names-relevant="false">
            <text>Mein Eisladen läuft so gut, ich möchte jetzt expandieren. Kannst du nach Filialen im Ausland suchen, die noch keinen Besitzer haben? Laura Becker und Alexander Weber sind jetzt mein Team. Für ihre Teilzeitstellen plane ich insgesamt 30.000 € Personalkosten im nächsten Jahr ein. Ich suche zusätzlich einen eingerichteten Standort außerhalb Deutschlands. Zeige alle Informationen zu Filialen, deren `Land` nicht Deutschland ist und deren `BesitzerID` `NULL` ist.</text>
            <sql-solution>SELECT *
FROM Filiale
WHERE Land &lt;&gt; 'Deutschland' AND BesitzerID IS NULL;</sql-solution>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
                <text-hint>Verwende `Land`, nicht `Ort`, um das Ausland zu bestimmen. `&lt;&gt;` bedeutet ungleich. Prüfe zusätzlich die Verfügbarkeit.</text-hint>
            </hints>
        </select-scene>
        <select-scene is-row-order-relevant="false" is-col-order-relevant="false" are-col-names-relevant="false">
            <text>Der Standort in Valencia kostet 25.000 €. Prüfe vor dem Kauf unser Budget: Berechne erneut das gesamte Guthaben meiner Konten mit `InhaberID` 1.</text>
            <sql-solution>SELECT SUM(Guthaben) AS Gesamtguthaben
FROM Konten
WHERE InhaberID = 1;</sql-solution>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
                <text-hint>Der erste Kauf und das Jahresergebnis haben die Konten verändert. Verwende `SUM` auf dem aktuellen `Guthaben`.</text-hint>
            </hints>
        </select-scene>
        <text-scene>
            <text>Aktuell sind 60.200 € verfügbar. Wenn ich 30.000 € für die geplanten Personalkosten zurückhalte, bleiben 30.200 €. Der Gesamtpreis von 25.000 € für Valencia passt dazu. Ich entscheide mich für die Erweiterung; für künftige Betriebsausgaben bleiben neben der Lohnreserve noch 5.200 € Puffer.</text>
        </text-scene>
        <manipulate-scene>
            <text>Den einen möglichen Standort kaufen wir! Buche den Kauf des einzigen verfügbaren Standorts außerhalb Deutschlands: Ziehe 25000 vom Guthaben meines Kontos 12648953 ab und setze `BesitzerID` der verfügbaren Auslandsfiliale auf 1. Verwende eine Transaktion. Andere Konten, die verfügbare Filiale in Berlin und sämtliche weiteren Daten bleiben unverändert.</text>
            <sql-solution>BEGIN TRANSACTION;
UPDATE Konten SET Guthaben = Guthaben - 25000 WHERE Nr = '12648953' AND InhaberID = 1;
UPDATE Filiale SET BesitzerID = 1
WHERE Land &lt;&gt; 'Deutschland' AND BesitzerID IS NULL;
COMMIT;</sql-solution>
            <sql-check>SELECT * FROM Personen;
SELECT * FROM Business;
SELECT * FROM Filiale;
SELECT * FROM Angestellte;
SELECT * FROM Konten;
SELECT * FROM Eissorten;
SELECT type, name, tbl_name, sql FROM sqlite_schema WHERE name NOT LIKE 'sqlite_%';
PRAGMA foreign_key_check;</sql-check>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
                <text-hint>Verwende die beiden Bedingungen der Auslandsabfrage auch im `UPDATE`. Sonst kaufst du womöglich einen bereits vergebenen oder einen inländischen Standort mit.</text-hint>
                <text-hint>Buche nur von Konto 12648953 ab. Die Jahreslöhne sind weiterhin reserviertes Guthaben, keine bereits bezahlte Ausgabe.</text-hint>
            </hints>
        </manipulate-scene>
        <select-scene is-row-order-relevant="false" is-col-order-relevant="false" are-col-names-relevant="false">
            <text>Kontrolliere zum Abschluss die Zahlung: Zeige `Nr` und `Guthaben` aller meiner Konten (`InhaberID` 1).</text>
            <sql-solution>SELECT Nr, Guthaben FROM Konten WHERE InhaberID = 1;</sql-solution>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
                <text-hint>Es gibt weiterhin zwei Konten. Die Summe ihrer verbleibenden Guthaben muss Kauf und Jahresergebnis berücksichtigen.</text-hint>
            </hints>
        </select-scene>
        <text-scene>
            <text>Super, danke für die Hilfe! Unser Business gedeiht und die Einnahmen sprudeln!

Die Standorte in Fürstenberg und Valencia gehören mir, und Laura Becker und Alexander Weber bilden mein Team. Nach beiden Käufen und dem ersten Jahresergebnis liegen noch 35.000 € und 200 € auf meinen Konten: zusammen 35.200 €, davon 30.000 € als Lohnreserve für das nächste Jahr. Valencia wird erst eröffnet und hat noch keinen Jahresgewinn.</text>
        </text-scene>
    </scenes>
    <initial-sql-script>PRAGMA foreign_keys = ON;

-- Alle Personen, Betriebe und Zahlen sind fiktive Übungsdaten.
-- Geldbeträge sind Eurobeträge; Jahresgewinn bezeichnet Gewinn nach Betriebskosten
-- für ein abgeschlossenes Geschäftsjahr, nicht Umsatz oder Kontoguthaben.
CREATE TABLE Personen (
    PersonID INTEGER PRIMARY KEY,
    Name TEXT NOT NULL
);

-- Vergleichsbetriebe: Diese Daten gehören nicht zu Jacks eigenen Filialen.
CREATE TABLE Business (
    BusinessID INTEGER PRIMARY KEY,
    Sterne INTEGER NOT NULL CHECK (Sterne BETWEEN 1 AND 5),
    Name TEXT NOT NULL,
    Ideen TEXT NOT NULL,
    Jahresgewinn REAL NOT NULL,
    Ort TEXT NOT NULL,
    Land TEXT NOT NULL
);

-- Preis ist der vereinbarte Gesamtpreis für einen eingerichteten Standort.
-- NULL bei Jahresgewinn bedeutet: noch kein eigener Jahresabschluss erfasst.
CREATE TABLE Filiale (
    FilialeID INTEGER PRIMARY KEY,
    BesitzerID INTEGER REFERENCES Personen(PersonID),
    Preis REAL NOT NULL CHECK (Preis &gt; 0),
    Adresse TEXT NOT NULL,
    Ort TEXT NOT NULL,
    Land TEXT NOT NULL,
    Jahresgewinn REAL,
    UNIQUE (Land, Ort, Adresse)
);

CREATE TABLE Angestellte (
    AngestelltenID INTEGER PRIMARY KEY,
    Sterne INTEGER NOT NULL CHECK (Sterne BETWEEN 1 AND 5),
    ArbeitgeberID INTEGER REFERENCES Personen(PersonID),
    Name TEXT NOT NULL,
    Fleissig INTEGER NOT NULL CHECK (Fleissig IN (0, 1)),
    Nett INTEGER NOT NULL CHECK (Nett IN (0, 1)),
    Jahreslohn REAL NOT NULL CHECK (Jahreslohn &gt; 0)
);

CREATE TABLE Konten (
    Nr TEXT PRIMARY KEY NOT NULL,
    InhaberID INTEGER NOT NULL REFERENCES Personen(PersonID),
    Guthaben REAL NOT NULL CHECK (Guthaben &gt;= 0)
);

CREATE TABLE Eissorten (
    Eissorte TEXT PRIMARY KEY NOT NULL,
    Beliebtheit REAL NOT NULL CHECK (Beliebtheit BETWEEN 0 AND 5)
);
INSERT INTO Personen VALUES (1, 'Jack Frost');
INSERT INTO Personen VALUES (2, 'Max Mustermann');
INSERT INTO Personen VALUES (3, 'Anna Schmidt');
INSERT INTO Personen VALUES (4, 'Peter Müller');
INSERT INTO Personen VALUES (5, 'Elena García');

INSERT INTO Business VALUES (1, 4, 'ABC Company', 'Innovative Produkte', 50000.0, 'Augsburg', 'Deutschland');
INSERT INTO Business VALUES (2, 5, 'XYZ Enterprises', 'Dienstleistungen im IT-Bereich', 75000.5, 'Berlin', 'Deutschland');
INSERT INTO Business VALUES (3, 3, '123 Startup', 'Neue Geschäftsideen', 30000.75, 'Köln', 'Deutschland');
INSERT INTO Business VALUES (4, 5, 'Eisberg', 'Eisdiele', 60000.0, 'Fürstenberg', 'Deutschland');
INSERT INTO Business VALUES (5, 4, 'Best Bakery', 'Backwaren', 30000.0, 'Düsseldorf', 'Deutschland');
INSERT INTO Business VALUES (6, 3, 'Green Gardens', 'Landschaftsgestaltung', 60000.25, 'Erfurt', 'Deutschland');
INSERT INTO Business VALUES (7, 5, 'Tech Solutions', 'IT-Beratung', 20000.75, 'Frankfurt', 'Deutschland');
INSERT INTO Business VALUES (8, 4, 'Cool Creations', 'Eisdiele', 45000.5, 'Göttingen', 'Deutschland');
INSERT INTO Business VALUES (9, 5, 'Frozen Delights', 'Eisdiele', 55000.8, 'Heidelberg', 'Deutschland');
INSERT INTO Business VALUES (10, 4, 'Sweet Scoops', 'Eisdiele', 48000.6, 'Ingolstadt', 'Deutschland');
INSERT INTO Business VALUES (11, 3, 'Healthy Bites', 'Gesunde Ernährung', 20000.3, 'Lübeck', 'Deutschland');
INSERT INTO Business VALUES (12, 5, 'Luxury Events', 'Eventplanung', 10000.9, 'Köln', 'Deutschland');
INSERT INTO Business VALUES (13, 5, 'Eisberg', 'Eisdiele', 30000.0, 'Valencia', 'Spanien');
INSERT INTO Business VALUES (14, 5, 'Eisberg', 'Eisdiele', 55000.0, 'Berlin', 'Deutschland');
INSERT INTO Business VALUES (15, 4, 'Backstube am Markt', 'Bäckerei', 22000, 'Fürstenberg', 'Deutschland');

INSERT INTO Filiale VALUES (1, 2, 150000, 'Hauptstraße 123', 'Augsburg', 'Deutschland', 18000);
INSERT INTO Filiale VALUES (2, 3, 98000.5, 'Nebengasse 456', 'Berlin', 'Deutschland', 22000);
INSERT INTO Filiale VALUES (3, 4, 120000.75, 'Marktplatz 789', 'Berlin', 'Deutschland', 28000);
INSERT INTO Filiale VALUES (4, NULL, 50000, 'Krallenstraße 23', 'Fürstenberg', 'Deutschland', NULL);
INSERT INTO Filiale VALUES (5, NULL, 25000, 'Plaza de la Solera 25', 'Valencia', 'Spanien', NULL);
INSERT INTO Filiale VALUES (6, 3, 90000, 'Marktstraße 10', 'Fürstenberg', 'Deutschland', 14000);
INSERT INTO Filiale VALUES (7, 5, 98000, 'Calle de la Luna 7', 'Sevilla', 'Spanien', 19000);
INSERT INTO Filiale VALUES (8, NULL, 27000, 'Lindenweg 8', 'Berlin', 'Deutschland', NULL);
INSERT INTO Filiale VALUES (9, 4, 80000, 'Krallenstraße 23', 'Berlin', 'Deutschland', 21000);

INSERT INTO Angestellte VALUES (1, 4, NULL, 'Max Mustermann', 0, 0, 15000);
INSERT INTO Angestellte VALUES (2, 3, NULL, 'Anna Schmidt', 0, 0, 15000);
INSERT INTO Angestellte VALUES (3, 4, NULL, 'Maria Fischer', 0, 0, 15000);
INSERT INTO Angestellte VALUES (4, 3, NULL, 'Thomas Wagner', 0, 1, 15000);
INSERT INTO Angestellte VALUES (5, 5, NULL, 'Laura Becker', 1, 1, 15000);
INSERT INTO Angestellte VALUES (6, 4, NULL, 'Michael Schulz', 0, 0, 15000);
INSERT INTO Angestellte VALUES (7, 3, NULL, 'Sophie Richter', 0, 0, 15000);
INSERT INTO Angestellte VALUES (8, 5, NULL, 'Alexander Weber', 1, 1, 15000);
INSERT INTO Angestellte VALUES (9, 4, NULL, 'Emma Schneider', 0, 0, 15000);
INSERT INTO Angestellte VALUES (10, 3, NULL, 'Felix Meier', 1, 0, 15000);
INSERT INTO Angestellte VALUES (11, 5, NULL, 'Lea Keller', 0, 0, 15000);
INSERT INTO Angestellte VALUES (12, 4, NULL, 'David Huber', 0, 0, 15000);
INSERT INTO Angestellte VALUES (13, 5, NULL, 'Julia Mayer', 0, 0, 15000);
INSERT INTO Angestellte VALUES (14, 5, NULL, 'Nina Braun', 0, 1, 15000);
INSERT INTO Angestellte VALUES (15, 5, 2, 'Jan Winter', 1, 1, 15000);

INSERT INTO Konten VALUES ('12345678', 2, 100000);
INSERT INTO Konten VALUES ('23456789', 3, 120000.5);
INSERT INTO Konten VALUES ('34567890', 4, 80000.25);
INSERT INTO Konten VALUES ('12648953', 1, 25000);
INSERT INTO Konten VALUES ('65972796', 1, 25200);

INSERT INTO Eissorten VALUES ('Schokolade', 5);
INSERT INTO Eissorten VALUES ('Vanille', 4);
INSERT INTO Eissorten VALUES ('Bueno', 4);
INSERT INTO Eissorten VALUES ('Pistazie', 3.5);
INSERT INTO Eissorten VALUES ('Zitrone', 3);
INSERT INTO Eissorten VALUES ('Erdbeere', 2);</initial-sql-script>
</game>
