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 Date 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, die eine Semesterangabe haben:
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 to_char(GebDatum,'month DD, YYYY') AS Geburtstag
from studenten;

10.
Liste das Alter der Studenten in Jahren:
select (sysdate - GebDatum) / 365 as Alter_in_Jahren
from studenten;

11.
Liste die Wochentage der Geburtsdaten der Studenten:
select to_char(GebDatum,'day') 
from studenten;

12.
Liste die Uhrzeiten der Geburtsdaten der Studenten:
select to_char(GebDatum,'hh:mi:ss') 
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, s.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)
from Professoren
group by rang;

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

19.
Liste Summe der SWS pro Professor, sofern seine Durchschnitts-SWS größer als 3 ist:
select gelesenVon, sum(SWS)
from Vorlesungen
group by gelesenVon
      having avg(SWS) > 3;

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

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

22.
Liste alle Professoren zusammen mit ihrer Lehrbelastung (nicht Oracle):
select PersNr, Name, (select sum(SWS) as Lehrbelastung
                      from Vorlesungen
                      where gelesenVon = PersNr)
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, max(GebDatum) as maximum
       from Professoren
       group by Rang) tmp
where p.Rang = tmp.Rang and p.GebDat = tmp.maximum;

27.
Liste Vorlesungen zusammen mit Marktanteil, definiert als = Hörerzahl/Gesamtzahl:
select h.VorlNr, h.AnzProVorl, g.GesamtAnz,
       h.AnzProVorl/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:
( select Name
  from Assistenten )
minus
( select Name
  from Professoren );

30.
Liste den Durchschnitt von Professoren- und Assistenten-Namen:
( 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.
Natürlicher Verbund (nur in SQL-92):
select *
from Studenten
natural join hoeren;

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