{
  "training": "SQL met FitWorks",
  "chapters": [
    {
      "title": "Hoofdstuk 4 - Basisqueries",
      "pages": [
        {
          "title": "Terugblik en opening",
          "blocks": [
            {
              "type": "text",
              "summary": "Terugblik"
            },
            {
              "type": "text",
              "summary": "Opening"
            }
          ]
        },
        {
          "title": "Leerdoelen",
          "blocks": [
            {
              "type": "text",
              "summary": "Leerdoelen"
            }
          ]
        },
        {
          "title": "4.1 SELECT en FROM",
          "blocks": [
            {
              "type": "text",
              "summary": "De balie vraagt, de database antwoordt"
            },
            {
              "type": "image",
              "summary": "Anatomie van een SELECT-query"
            },
            {
              "type": "text",
              "summary": "Alle kolommen tegelijk"
            },
            {
              "type": "open-question",
              "summary": "Je wilt de e-mailadressen en geboortedatums van alle leden zien. Welke query schrijf je?"
            }
          ]
        },
        {
          "title": "4.2 WHERE",
          "blocks": [
            {
              "type": "text",
              "summary": "Filteren op voorwaarden"
            },
            {
              "type": "text",
              "summary": "Vergelijkingsoperatoren"
            },
            {
              "type": "image",
              "summary": "WHERE-operatoren"
            },
            {
              "type": "text",
              "summary": "Logische operators"
            },
            {
              "type": "text",
              "summary": "Tekst en getallen"
            },
            {
              "type": "open-question",
              "summary": "Welke query schrijf je om trainers op locatie 1 te tonen die ook een specialisatie hebben opgegeven?"
            }
          ]
        },
        {
          "title": "4.3 NULL",
          "blocks": [
            {
              "type": "text",
              "summary": "Een waarde die geen waarde is"
            },
            {
              "type": "text",
              "summary": "Waarom werkt = NULL niet"
            },
            {
              "type": "text",
              "summary": "De juiste aanpak"
            },
            {
              "type": "image",
              "summary": "NULL-afhandeling"
            },
            {
              "type": "text",
              "summary": "Wat gaat er mis als je dit negeert"
            },
            {
              "type": "open-question",
              "summary": "Schrijf de query die alle lestypes toont waarvan de beschrijving niet is ingevuld."
            }
          ]
        },
        {
          "title": "4.4 ORDER BY en DISTINCT",
          "blocks": [
            {
              "type": "text",
              "summary": "ORDER BY"
            },
            {
              "type": "image",
              "summary": "ORDER BY en DISTINCT"
            },
            {
              "type": "text",
              "summary": "DISTINCT"
            },
            {
              "type": "open-question",
              "summary": "Welke query schrijf je om alle abonnementsnamen met maandprijs te tonen, gesorteerd van duurste naar goedkoopste? Wat verandert er als je DISTINCT toevoegt?"
            }
          ]
        },
        {
          "title": "4.5 Kolomaliassen en literals",
          "blocks": [
            {
              "type": "text",
              "summary": "Kolomaliassen"
            },
            {
              "type": "image",
              "summary": "Aliassen en literals"
            },
            {
              "type": "text",
              "summary": "Literals"
            },
            {
              "type": "open-question",
              "summary": "Schrijf een query die de naam en maandprijs van alle abonnementen toont, met als kolomkoppen Abonnementsnaam en Maandprijs. Sorteer op prijs, laagste eerst."
            }
          ]
        },
        {
          "title": "4.6 CONCAT en CAST",
          "blocks": [
            {
              "type": "text",
              "summary": "CONCAT"
            },
            {
              "type": "text",
              "summary": "CAST"
            },
            {
              "type": "image",
              "summary": "CONCAT en CAST"
            },
            {
              "type": "table",
              "summary": "Veelgebruikte CAST-conversies"
            },
            {
              "type": "open-question",
              "summary": "Schrijf een query die de volledige naam van elke trainer toont in een kolom genaamd Trainer."
            }
          ]
        },
        {
          "title": "Quiz",
          "blocks": [
            {
              "type": "multiple-choice",
              "summary": "Je wilt alle betalingen zien met status `mislukt` of `openstaand`, gesorteerd van hoog naar laag bedrag. Welke query is correct?"
            },
            {
              "type": "multiple-choice",
              "summary": "Welke query geeft correct alle leden terug die geen tussenvoegsel hebben?"
            },
            {
              "type": "multiple-choice",
              "summary": "Een collega ziet met `SELECT DISTINCT specialisatie, voornaam FROM trainers;` nog steeds herhaalde waarden in `specialisatie`. Wat is de oorzaak?"
            }
          ]
        },
        {
          "title": "Samenvatting en vooruitblik",
          "blocks": [
            {
              "type": "text",
              "summary": "Samenvatting"
            },
            {
              "type": "text",
              "summary": "Vooruitblik"
            }
          ]
        }
      ]
    }
  ]
}