2  Relationale Algebra und SQL

Authors

Jonathan Barthelmes

Jacob Rose

Igor Dimitrov

2.1 Relationale Algebra - Fortsetzung

  1. \(\pi_{\substack{\texttt{pid, Name}}}\bigl(\sigma_{\substack{\texttt{Rolle="Pilot"},\\ \texttt{Reichweite}\geq 15000}}(\texttt{Personal} \bowtie \texttt{Zulassung} \bowtie \texttt{Modell})\bigr)\)

  2. \(\pi_{\texttt{Name}}\bigl( \sigma_{\texttt{Land='USA'}}( \beta_{\texttt{Code} \leftarrow \texttt{Ziel}}(\texttt{Flug}) \bowtie \texttt{Flughafen} \bowtie \texttt{Flugzeug} ) \bigr)\)

  3. \(\pi_{\texttt{Code, Land}} \Biggl( \sigma_{\texttt{Name='F. Kohl'}}\biggl(\texttt{Flugzeug} \bowtie \\ \Bigl(\beta_{\texttt{Code} \leftarrow \texttt{Start}}(\pi_{\texttt{Start, fid}}(\texttt{Flug})) \cup \beta_{\texttt{Code} \leftarrow \texttt{Ziel}}(\pi_{\texttt{Ziel, fid}}(\texttt{Flug}))\Bigr)\biggr) \biggr)\)

  4. \(\pi_{\texttt{pid, Name}}(\texttt{Personal}) - \\ \pi_{\texttt{pid, Name}}(\texttt{Personal} \bowtie \texttt{Crew} \bowtie \sigma_{\texttt{Datum} < \texttt{07.04.2013}}(\texttt{Flug}))\)

2.2 SQL-Anfragen

  1. SQL:

    select distinct C from R3

    Ergebniss:

           {{C: 7}, 
            {C: 8}}
  2. SQL:

    select distinct * from R2
    where B = rot

    Ergebniss::

             {{B: rot, C: 9}}
             {{B: blau, C: 8}}
  3. SQL:

    select distinct * from R2
    intersect
    select distinct * from R3;

    Ergebniss:

             {{B: blau}, {C: 7}}
  4. SQL:

    select * from R2
    union
    select * from R3

    Ergebniss:

             {{B: blau,  C: 7}, 
             {B: rot,   C: 8}, 
             {B: rot,   C: 9}, 
             {B: gruen, C: 8}, 
             {B: gelb,  C: 7}}
  5. SQL:

    select * from R3 except (
        select * from R2
    );

    Ergebniss:

             {{B: gruen, C: 8}, 
             {B: gelb,  C: 7}}
  6. SQL:

    select distinct * from
    R1 natural jo R2

    Ergebniss:

             {{A: q, B: rot, C: 8}, 
             {A: q, B: rot, C: 9}}
  7. SQL:

    select distinct * from
    R1, R2

    Ergebniss:

            {{A: q, R1.B: rot,   R2.B: blau,  C: 7 },
            {A: q, R1.B: rot,   R2.B: gruen, C: 8},
            {A: q, R1.B: rot,   R2.B: gelb,  C: 7},
            {A: r, R1.B: gruen, R2.B: gelb,  C: 7},
            {A: r, R1.B: gruen, R2.B: gruen, C: 8},
            {A: r, R1.B: gruen, R2.B: gelb,  C: 7}}

2.3 Entsprechungen in SQL und der relationalen Algebra

  1. Die Anfragen entsprechen sich liefern jedoch nicht das gleiche Ergebniss, da der SQL-Ausdruck Duplikate zulaesst, waehrend bei der relationalen Abfrage die Duplikate entfernt werden.
    1. Die SQL-Anfrage liefert die Bezeichnung der Modelle, die nach Flughafen ‘CDG’ fliegen/geflogen haben.
    2. Der relationale Ausdruck liefert die Sitzplatzkapazitaeten der selben Modelle aus der SQL-Anfrage.
    Somit sind die Ausdrucke nicht Aequivalent und sie entpsrechen sich nicht.
    1. Die erste SQL-Anrage gibt die ID’s der Co-Pilote und die Bezeichnungen der Modelle aus, dafuer sie zugelassen sind.
    2. Die zweite SQL-Anfrage gibt genau das gleiche Ergebniss wie die erste Anfrage. Man beachte, dass natural join in SQL immer von einem Kreuzprodukt und Selektionsoperationen simuliert werden kann.
    Somit sind die beiden Anfragen Aequivalent

2.4 ER-Modell

See the diagrams

Zeile 1

Zeile 2

Zeile 3

Zeile 4

Zeile 5

2.5 Feedback

Zur Aufgabe 1.

1. Richtig, wenn auch > statt >= gemeint 

2. Richtig 3. Sollte passen 4. Richtig

Zur Aufgabe 2:

1. Richtig 2. Ergebnis: Wieso B: Blau wenn ihr nach rot selektiert => - 0.25 P.

3.-7. Richtig

Zur Aufgabe 3:

1. Richtig unter der Annahme, dass Tabelle mehr als die abgedruckten Beispieldaten enthält (Stichwort Distinct)

2. Ebenfalls richtig

3. Dito

Zur Aufgab 4:

1. Richtig 2. Verlage sollen laut ML bitte mindestens ein Buch verlegen => - 0.25P. 3. Laut ML bitte [1,*] => - 0.25 P.

4. Richtig 5. Ebenfalls