Lösungen zum SQL-Übungsblatt von Walter Ebner 1) create table

Transcription

Lösungen zum SQL-Übungsblatt von Walter Ebner 1) create table
Lösungen zum SQL-Übungsblatt von Walter Ebner
1)
create table hältAb (
SV-Nr int references Lektor(SV-Nr),
LV-Nr int references Lehrveranstaltung(LV-Nr),
SWS int,
Primary Key (SV-Nr, LV-Nr)
);
2)
select * from Hörsaal where Größe>50 and Bezeichnung like '____' order by
gebäude desc, bezeichnung desc;
3)
select * from Lehrveranstaltung where maxTeiln between 20 and 30;
oder
select * from Lehrveranstaltung where maxTeiln>=20 and maxTeiln<=30;
4)
delete from lektor where berufsbez='Univ.Doz.' or
Name like 'S%' and Name not like '%er';
5)
Select Abteilung from Lektor group by Abteilung having count(*)>=5;
6)
Select Abteilung, count(*) as Mitarbeiteranzahl from Lektor where Abteilung
like 'M%' group by Abteilung;
Das 'as Mitarbeiteranzahl' ist nicht notwendig. Dient aber der besseren
Lesbarkeit des Ergebnisses.
7)
Select avg(Größe) as Durchschnittliche_Hörsaalgröße from Hörsaal;
8)
Select bezeichnung from Hörsaal where Größe=(select max(Größe) from Hörsaal);
9)
select distinct sv-nr, name from lektor natural join hältAb
where BerufsBez='Univ.Prof.';
10)
select LV-Nr, count(*) from besucht
group by LV-Nr having count(*) between 30 and 40;
11)
select Studium, count(*) from student group by Studium having count(*)> 2000;
12)
select Gebäude, count(*) as Anzahl from Hörsaal group by Gebäude order by
count(*) desc;
13)
1
select Abteilung, sum(SWS) from lektor, hältAb where lektor.sv-nr=hältAb.sv-nr
group by abteilung having sum(SWS)>100;
select Abteilung, sum(SWS) from lektor natural join hältAb group by abteilung
having sum(SWS)>100;
select Abteilung, sum(SWS) from lektor join hältAb using(SV-Nr) group by
abteilung having sum(SWS)>100;
14)
select lektor.sv-nr, lektor.name from lektor, hältAb, lv where lektor.svnr=hältAb.sv-nr and hältAb.LV-Nr=lv.LV-Nr and findetStatt='Audi.Max.';
select lektor.sv-nr, lektor.name from lektor join hältAb using(SV-Nr) join lv
using(LV-Nr) where findetStatt='Audi.Max.';
Achtung: in Lektor und LV gibts das Attr. Name. D.h. man kann nicht einfach
mit natural join joinen.
15)
select matr-nr, student.name from student, besucht, hältAb, lektor where
student.Matr-Nr=besucht.Matr-Nr and besucht.LV-Nr=hältAb.LV-Nr and hältAb.SVNr=Lektor.SV-Nr and Studium='Winf' and lektor.name='Panny' and
berufsbez='Univ.Prof.';
oder
select matr-nr, student.name from student join besucht using(Matr-Nr) join
hältAb using(LV-Nr) join lektor (SV-Nr) where Studium='Winf' and
lektor.name='Panny' and berufsbez='Univ.Prof.';
16)
select matr-nr, student.name from student, besucht, lehrveranstaltung, hältAb,
lektor where student.Matr-Nr=besucht.Matr-Nr and besucht.LVNr=lehrveranstaltung.LV-Nr and lehrveranstaltung.LV-Nr=hältAb.LV-Nr and
hältAb.SV-Nr=Lektor.SV-Nr and Lehrveranstaltung.name='Datenbanksysteme' and
abteilung='Informationswirtschaft';
oder
select matr-nr, student.name from student join besucht using(Matr-Nr) join
lehrveranstaltung using (LV-Nr) join hältAb using(LV-Nr) join lektor (SV-Nr)
where Lehrveranstaltung.name='Datenbanksysteme' and
abteilung='Informationswirtschaft';
17)
select name from lv where lv-nr in
(select setzt-voraus-lv-nr from voraussetzung where lv-nr in
(select lv-nr from lv where name='Rechnerpraktikum')
);
18)
(Select Bezeichnung from Hörsaal) except (select findetstatt from
Lehrveranstaltung);
oder
2
select Bezeichnung from Hörsaal where Bezeichnung not in (select findetstatt
from Lehrveranstaltung)
19) Delete from student löscht alle Zeilen aus der Student Tabelle. Drop Table
Student löscht nicht nur die Einträge in der Tabelle sondern auch die
Tabellenstruktur (die Definition der Tabelle).
3