prev up next

SQL-Queries zum Anfragen

Folgende Beispiele beziehen sich auf die Universitätsdatenbank, wobei die Relationen Professoren, Assistenten und Studenten jeweils um ein Attribut GebDatum vom Typ Datetime erweitert worden sind.

  1. Liste alle Studenten:
    select * from studenten
    

  2. Liste Personalnummer und Name der C4-Professoren:
    select PersNr, Name
    from   Professoren
    where  Rang='C4'
    

  3. Zähle alle Studenten:
    select count(*)
    from   Studenten
    

  4. Liste Namen und Studiendauer in Jahren von allen Studenten,
    select Name, Semester/2 as Studienjahr
    from   Studenten
    where  Semester is not null
    

  5. Liste alle Studenten mit Semesterzahlen zwischen 1 und 4:
    select *
    from   Studenten
    where  Semester >= 1 and Semester <= 4
    
    alternativ
    select *
    from   Studenten
    where  Semester between 1 and 4
    
    alternativ
    select *
    from   Studenten
    where  Semester in (1,2,3,4)
    

  6. Liste alle Vorlesungen, die im Titel den String Ethik enthalten, klein oder groß geschrieben:
    select *
    from   Vorlesungen
    where  upper(Titel) like '%ETHIK'
    

  7. Liste Personalnummer, Name und Rang aller Professoren, absteigend sortiert nach Rang, innerhalb des Rangs aufsteigend sortiert nach Name:
    select   PersNr, Name, Rang
    from     Professoren
    order by Rang desc, Name asc
    

  8. Liste alle verschiedenen Einträge in der Spalte Rang der Relation Professoren:
    select distinct Rang
    from            Professoren
    

  9. Liste alle Geburtstage mit ausgeschriebenem Monatsnamen:
    select  Name,
            Datename(Day,   Gebdatum) as Tag, 
            Datename(Month, GebDatum) as Monat,
            Datename(Year,  GebDatum) as Jahr
    from    studenten
    

  10. Liste das Alter der Studenten in Jahren:
    select      Name, datediff(year,GebDatum, getdate()) as Jahre
    from    studenten
    

  11. Liste die Wochentage der Geburtsdaten der Studenten:
    select      Name, 
          datename(weekday,GebDatum) as Wochentag
    from       studenten
    
    

  12. Liste die Kalenderwochen der Geburtsdaten der Studenten:
    select      Name, 
          datename(week,GebDatum) as Kalenderwoche
    from       studenten
    
    

  13. Liste den Dozenten der Vorlesung Logik:
    select      Name, Titel
    from       Professoren, Vorlesungen
    where      PersNr = gelesenVon and Titel = 'Logik'
    

  14. Liste die Namen der Studenten mit ihren Vorlesungstiteln:
    select      Name, Titel
    from       Studenten, hoeren, Vorlesungen
    where      Studenten.MatrNr = hoeren.MatrNr
    and       hoeren.VorlNr       = Vorlesungen.VorlNr
    
    alternativ:
    select      s.Name, v.Titel
    from       Studenten s, hoeren h, Vorlesungen v
    where      s.MatrNr = h.MatrNr
    and       h.VorlNr = v.VorlNr
    

  15. Liste die Namen der Assistenten, die für denselben Professor arbeiten, für den Aristoteles arbeitet:
    select  a2.Name
    from    Assistenten a1, Assistenten a2
    where   a2.boss  =  a1.boss
    and     a1.name  = 'Aristoteles'
    and     a2.name != 'Aristoteles'
    

  16. Liste die durchschnittliche Semesterzahl:
    select  avg(Semester)
    from    Studenten
    

  17. Liste Geburtstage der Gehaltsklassenältesten (ohne Namen!):
    select   Rang, max(GebDatum) as Aeltester
    from     Professoren
    group by Rang
    

  18. Liste Summe der SWS pro Professor:
    select   gelesenVon as PersNr, sum(SWS) as Lehrbelastung
    from     Vorlesungen
    group by gelesenVon
    

  19. Liste Summe der SWS pro Professor, sofern seine Durchschnitts-SWS größer als 3 ist:
    select   gelesenVon as PersNr, sum(SWS) as Lehrbelastung
    from     Vorlesungen
    group by gelesenVon
    having   avg(SWS) > 3
    
    alternativ unter Verwendung von Gleichkommadurchschnitt:
    select   gelesenVon as PersNr, sum (SWS) as Lehrbelastung
    from     Vorlesungen
    group by gelesenVon
    having   avg(cast(SWS as float)) > 3.0
    

  20. Liste Summe der SWS pro C4-Professor, sofern seine Durchschnitts-SWS größer als 3 ist:
    select   Name, sum(SWS)
    from     Vorlesungen, Professoren
    where    gelesenVon = PersNr and Rang='C4'
    group by gelesenVon, Name
    having   avg(cast(SWS as float)) > 3.0
    

  21. Liste alle Prüfungen, die als Ergebnis die schlechteste Note haben:
    select * 
    from   pruefen
    where  Note = (select max(Note) from pruefen)
    

  22. Liste alle Professoren zusammen mit ihrer Lehrbelastung:
    select PersNr, Name, (select sum(SWS)
                          from Vorlesungen
                          where gelesenVon = PersNr) as Lehrbelastung
    from Professoren
    

  23. Liste alle Studenten, die älter sind als der jüngste Professor:
    select s.*
    from   Studenten s
    where  exists (select p.*
                   from Professoren p
                   where p.GebDatum > s.GebDatum)
    Alternativ:
    select s.*
    from   Studenten s
    where  s.GebDatum < (select max(p.GebDatum)
                         from Professoren p )

  24. Liste alle Assistenten, die für einen jüngeren Professor arbeiten:
    select a.*
    from   Assistenten a, Professoren p
    where  a.Boss = p.PersNr 
    and    p.GebDatum > a.GebDatum

  25. Liste alle Studenten mit der Zahl ihrer Vorlesungen, sofern diese Zahl größer als 2 ist:
    select tmp.MatrNr, tmp.Name, tmp.VorlAnzahl
    from   (select s.MatrNr, s.Name, count(*) as VorlAnzahl
            from Studenten s, hoeren h
            where s.MatrNr = h.MatrNr
            group by s.MatrNr, s.Name) tmp
    where  tmp.VorlAnzahl > 2

  26. Liste die Namen und Geburtstage der Gehaltsklassenältesten:
    select p.Rang, p.Name, tmp.maximum
    from   Professoren p,
           (select Rang, min(GebDatum) as maximum
            from Professoren
            group by Rang) tmp
    where  p.Rang = tmp.Rang and p.GebDatum = tmp.maximum

  27. Liste Vorlesungen zusammen mit Marktanteil, definiert als = Hörerzahl/Gesamtzahl:
    select h.VorlNr, h.AnzProVorl, g.GesamtAnz,
           cast(h.AnzProVorl as float)/g.GesamtAnz as Marktanteil
    from   (select VorlNr, count(*) as AnzProVorl
            from hoeren group by VorlNr) h,
           (select count(*) as GesamtAnz
            from Studenten) g
    

  28. Liste die Vereinigung von Professoren- und Assistenten-Namen:
    (select Name from Assistenten)
    union
    (select Name from Professoren)
    

  29. Liste die Differenz von Professoren- und Assistenten-Namen (nur SQL-92):
    (select Name from Assistenten)
    minus 
    (select Name from Professoren)

  30. Liste den Durchschnitt von Professoren- und Assistenten-Namen (nur SQL-92):
    (select Name from Assistenten)
    intersect 
    (select Name from Professoren)
    

  31. Liste alle Professoren, die keine Vorlesung halten:
    select Name
    from   Professoren
    where  PersNr not in ( select gelesenVon from Vorlesungen )
    Alternativ:
    select Name
    from   Professoren
    where  not exists ( select *
                       from Vorlesungen
                       where gelesenVon = PersNr )
    

  32. Liste Studenten mit größter Semesterzahl:
    select Name
    from   Studenten
    where  Semester >= all ( select Semester
                             from Studenten )
    

  33. Liste Studenten, die nicht die größte Semesterzahl haben:
    select Name
    from   Studenten
    where  Semester < some ( select Semester
                             from Studenten )
    

  34. Liste solche Studenten, die alle 4-stündigen Vorlesungen hören:
    select s.*
    from   Studenten s
    where  not exists
      (select *
      from Vorlesungen v
      where v.SWS = 4 and not exists
        (select *
         from hoeren h
         where h.VorlNr = v.VorlNr and h.MatrNr = s.MatrNr
        )
      )
    

  35. Liste Studenten mit ihren Vorlesungen (mithilfe von join):
    select s.name, v.titel 
    from   studenten s 
    join   hoeren h 
    on     (s.matrnr=h.matrnr)
    join   vorlesungen v
    on     (h.vorlnr = v.vorlnr)

  36. Berechnung der transitiven Hülle einer rekursiven Relation (nur in Oracle):
    Liste alle Voraussetzungen für die Vorlesung 'Der Wiener Kreis':
    select Titel
    from   Vorlesungen
    where  VorlNr in ( 
            select Vorgaenger
            from voraussetzen
            connect by Nachfolger = prior Vorgaenger
            start with Nachfolger = (
                    select VorlNr
                    from Vorlesungen
                    where Titel = 'Der Wiener Kreis'
            )
    )
    
    


prev up next