SQL

o++oPS

Anfrage 1:

        o++oPS-Result:

  M( STID, NAME, ORT?, STIP, FAK, L( KURS, NOTE),  M( PROJ, STUNDEN)
    1245 Sophia Berlin 400 CS Algebra 3 Mao 5
              Datenbanken 1 Ming 4
              Otto 1 Otto 6

      

Probleme der entsprechenden SQL-Lösung:

1. Die SQL-Anfrage bezieht sich auf 3 Tabellen
2. Die SQL-Ergebnistabelle muss in die 1.Normalform überführt werden;
folglich erscheint ein Student mit 10 Examen und 10 Projekten 100 mal in diesem Beispiel
3. SQL erfordert 4 Join-Verknüpfungen

eine Zwischen-Anfrage

SELECT *
FROM students1
WHERE “Algebra“ in (SELECT KURS FROM exams1 WHERE students1.STID=exams1.STID)


enthält nur die Daten aus students1 und nicht aus exams1
und die Zwischen-Anfrage

SELECT *
FROM students1, exams1
WHERE KURS=“Algebra“ and students1.STID=exams1.STID


enthält nur Algebra-Records; eine zusätzliche Bedingung KURS=”Datenbanken” ergibt keinen Sinn.

 

Anfrage 2:

       o++oPS-Result:

  B( NAME, M( KURS, NOTE))
    Clara OCaml 2
    Sophia Algebra 3
  Otto 1

     

Probleme der entsprechenden SQL-Lösung:

1. SQL erfordert eine Join-Verknüpfung
2. In SQL ist es schwierig, Sets mit Multisets zu verarbeiten.
3. SQL kennt keine strukturierte Ausgabe

Anfrage  3:

      o++oPS-Result:

ANZ, M( KURS, ANZ, M( NAME, STID))  
  4 Algebra 1 Ernst 1234  
    Apel 1 Kaethe 5678  
    Datenbanken 2 Clara 3456  
        Sophia 1245  
    Geschichte 1 Ernst 1234  
    Otto 1 Sophia 1245  
    Repin 1 Kaethe 5678  

    

Hier ist festzustellen, dass die Gesamt-Aggregation nicht der Summe der partiellen Aggregationen entspricht.


Probleme der entsprechenden SQL-Lösung:

1. Die Aggregationen müssen in unabhängigen Anfragen berechnet werden.
2. SQL erfordert Join-Verknüpfungen.
3. SQL erfordert GROUPBY-Anweisungen (GROUPBY KURS)
4. In der GROUPBY-Anweisung sind NAME und STID nicht zulässig.