Hallo,
ich bin neu hier, deswegen kann es sein das der Thread verschoben werden musste. Arbeite mit SQL Developer.
Ich habe von der Uni paar Aufgaben bekommen, die ich lösen soll und bei ein paar komm ich nicht wirklich auf die Lösung:
1)
"Völlig trockene Biergärten": Die Namen der Biergärten, die keine alkoholischen Getränke ausschenken.
Im Subselect werden mir alle Getränke geliefert, die keinen Alkoholgehalt besitzen. Wie wende ich das dann auf die Biergärten an?
2)
"Absolut Neuenahr-feindliche Biergärten": Die Namen der Biergärten, die keine Getränke von Firmen aus Neuenahr ausschenken
Ich habe wie in 1) Probleme mit in, any, all, exists usw Probleme. Gibts da einen Trick oder Tipp bzw ne Schritt für Schritt Anleitungen um solche Aufgaben zu lösen?
3)
Seniorenförderung: Alle Biergärten, die von älteren Gästen besucht werden (Geburtsdatum vor 1.1.1945), erhalten so viele Plätze wie der größte in der Datenbank enthaltene Biergarten.
Ich weiß, syntaktisch ist da der Wurm drin. Aber ich werde im Internet nicht ganz schlau wie man ein Update über mehrere Tabellen macht. Überall stehts ein bisschen anders drin und bei mir funktioniert keine.
4)
Firmensterben: Alle Firmen ohne Lieblingsgetränk machen zu.
Da ist mein Problem, das ich nicht weiß, ob man mehrere DELETE in einem Aufruf schreiben kann oder alles einzeln machen muss.
Denn in diesem Fall müsste man erst in schenkt_aus, dann in getraenke und dann zuletzt firma die entsprechenden Tupel löschen.
Mach ich zuerst;
Oder kann man das irgendwie schachteln?
Hier mal die Tabellendefinitionen:
Ich bedanke mich schon im Vorraus für hilfreiche Antworten.
mfg werdas34
ich bin neu hier, deswegen kann es sein das der Thread verschoben werden musste. Arbeite mit SQL Developer.
Ich habe von der Uni paar Aufgaben bekommen, die ich lösen soll und bei ein paar komm ich nicht wirklich auf die Lösung:
1)
"Völlig trockene Biergärten": Die Namen der Biergärten, die keine alkoholischen Getränke ausschenken.
Code:
SELECT DISTINCT schenkt_aus.biergarten_name
FROM schenkt_aus, getraenk
WHERE schenkt_aus.getraenke_name = getraenk.gname
AND schenkt_aus.getraenke_name IN
(SELECT getraenk.gname
FROM getraenk
WHERE alkogehalt = 0);
2)
"Absolut Neuenahr-feindliche Biergärten": Die Namen der Biergärten, die keine Getränke von Firmen aus Neuenahr ausschenken
Code:
select distinct schenkt_aus.biergarten_name
from schenkt_aus
join getraenk on schenkt_aus.getraenke_name = getraenk.gname
join firma on getraenk.hersteller = firma.fname
where firma.fname < all
(select fname
from firma
where standort = 'Neuenahr');
3)
Seniorenförderung: Alle Biergärten, die von älteren Gästen besucht werden (Geburtsdatum vor 1.1.1945), erhalten so viele Plätze wie der größte in der Datenbank enthaltene Biergarten.
Code:
UPDATE biergarten
SET anzahlplaetze =
(SELECT MAX(anzahlplaetze)
FROM biergarten)
JOIN besucht ON besucht.biergarten_name = biergarten.bname AND besucht.biergarten_ort = biergarten.ort
JOIN gast ON gast.vname = besucht.besucher_vname AND gast.nname = besucht.besucher_nname
WHERE gast.gebdatum <= TO_DATE('1945-01-01', 'yyyy-mm-dd');
4)
Firmensterben: Alle Firmen ohne Lieblingsgetränk machen zu.
Da ist mein Problem, das ich nicht weiß, ob man mehrere DELETE in einem Aufruf schreiben kann oder alles einzeln machen muss.
Denn in diesem Fall müsste man erst in schenkt_aus, dann in getraenke und dann zuletzt firma die entsprechenden Tupel löschen.
Mach ich zuerst;
Code:
delete from schenkt_aus
where ...
delete from getraenke
where...
delete from firma
where ...
Hier mal die Tabellendefinitionen:
Code:
create table firma (
fname char(20),
standort char(20),
primary key (fname)
);
create table getraenk (
gname char(20),
alkogehalt int,
preisproliter decimal(4,2),
hersteller char(20) not null,
produktionsaufname date,
primary key (gname),
foreign key (hersteller) references firma
);
create table gast (
nname char(20),
vname char(20),
gebdatum date,
lieblingsgetraenk char(20),
primary key (nname, vname),
foreign key (lieblingsgetraenk) references getraenk
);
create table biergarten (
bname char(20),
ort char(20),
eroeffdatum date,
anzahlplaetze int,
umsatzprojahr decimal (8,2),
primary key (bname, ort)
);
create table besucht (
besucher_nname char(20),
besucher_vname char(20),
biergarten_name char(20),
biergarten_ort char(20),
primary key (besucher_nname, besucher_vname, biergarten_name, biergarten_ort),
foreign key (besucher_nname, besucher_vname) references gast,
foreign key (biergarten_name, biergarten_ort) references biergarten
);
create table schenkt_aus (
biergarten_name char(20),
biergarten_ort char(20),
getraenke_name char(20),
ausschankprotag int,
primary key (biergarten_name, biergarten_ort, getraenke_name),
foreign key (biergarten_name, biergarten_ort) references biergarten,
foreign key (getraenke_name) references getraenk
);
Ich bedanke mich schon im Vorraus für hilfreiche Antworten.
mfg werdas34