Datenbanken und Informationssysteme


Musterlösung für Aufgabe 5: Anfragen an eine relationale Datenbank in SQL

  1. Formulieren Sie eine Anfrage, die die Namen aller Unterabteilungen liefert.
    select Name from Abteilungen where Oberabt is not null;
        
  2. Formulieren Sie eine Anfrage, die die Namen aller Abteilungen liefert, die Unterabteilungen besitzen.
    select distinct a.Name
    from Abteilungen a, Abteilungen b
    where a.Kurz = b.Oberabt;
        
    Es gibt auch Lösungen, die some oder in verwenden; nur versteht MySQL das leider nicht. Mit z.B. einer Oracle-Datenbank aber gehen auch folgende Lösungen:
    select o.Name from Abteilungen o 
    where o.Kurz = some(select u.Oberabt from Abteilungen u where u.Oberabt is not null);
        
    oder
    select Name from Abteilungen
    where Kurz in
    (select distinct Oberabt from Abteilungen where Oberabt is not null);
        
  3. Formulieren Sie eine Anfrage, die eine zweispaltige Tabelle liefert, die im Klartext (d.h. Projekttitel bzw. Abteilungsname) angibt, welche Abteilung an welchen Projekten mitarbeitet! Die Tabelle soll dabei nach Abteilungen sortiert sein.
    select a.Name, p.Title
    from Abteilungen a, Projektdurchfuehrung pd, Projekte p
    where a.Kurz = pd.Kurz and pd.Nr = p.Nr
    order by a.Name
        
  4. Formulieren sie die obige Anfrage so um, daß die Spalten des Ergebnisses "Abteilung" und "Projekt" heißen!
    select a.Name as Abteilung, p.Title as Projekt
    from Abteilungen a, Projektdurchfuehrung pd, Projekte p
    where a.Kurz = pd.Kurz and pd.Nr = p.Nr
    order by a.Name
        
  5. Formulieren Sie eine Anfrage, die zu jeder Abteilung die Anzahl der Projekte, an denen sie beteiligt ist, ermittelt!
    select a.Name, count(*)
    from Abteilungen a, Projektdurchfuehrung pd
    where a.Kurz = pd.Kurz
    group by a.Name
        


Soft
ware Systems Institute 09-dec-1998 holm wegner