01671/Einsendearbeit 2/SS 11

01671/EA2/SS11

Hier meine Vorschläge für Aufgabe 1:
Relationenkalkül und -algebra ist aber nicht meine Domäne, insb. Nr. 3 ist unvollständig.
1.
Select Kennzeichen
From Mietwagen
Where
Sprit-Verbrauch > (select Spritverbrauch from Mietwagen where Kennzeichen = „HA-SE 1“)

2.
Select distinct M.Kennzeichen, M.Marke
From Mietwagen M, Reise R, Filiale F
Where
M.Kennzeichen = R.Kfz
And R.Abgabe_Filiale = F.F_Nr
And F.F_Stadt =”Hagen”
And M.Spritverbrauch > select adv(Spritverbrauch) from Mietwagen where Marke = M.Marke)

3.
Reise[Leihdatum < „01.01.2007“
Mieter x Reise
M_Nr = Mieter
[Name][Straße][Stadt]

4.
{(Mieter.M_Name)|
Mieter.M_Nr = Reise.Mieter
Und Reise.Leihdatum <= „21.08.2006“
Und Reise.Abgabedatum >= „21.08.2006“
Und Mietwagen.Kennzeichen = Reise.Kfz
Und Mietwagen.Marke = „Mercedes“
}

5.
Range Mietwagen X
{(Mietwagen.Marke, Mietwagen.Preis)|
X.Mietwagen.Kennzeichen = Reise.Kfz
Und nicht es gibt Reise.Leihdatum >= 01.01.2005 und Reise.Leihdatum <= 31.12.2005)
}

6.
Range Reise X
{(Filiale.Leiter)|
Filiale.F_Nr = Reise.Leihfiliale
Und nicht es gibt X(X.Reise.Kfz = Mietwagen.Kennzeichen
Und Mietwagen.Marke = „Volvo“
Und Reise.Leihdatum > „31.12.2006“)
}

7.
Delete from mietwagen
Where
Sprit-Verbrauch > 15

8.
Insert into Mietwagen
Values („HA-LO 123“, „BMW“, 10, 30000)

9.
Create view Norddeutche_Kunden as
Select distinct M_Name, M_Straße, M_Stadt
From Mieter M, Reise R, Filiale F
Where M.M_Nr = R.Mieter
And Leih_Filiale = F.N_Nr.
And F.F_Stadt in (“Berlin”, “Hamburg”, “Bremen”)
 
Aufgabe 2

...und hier Aufgabe 2, allerdings ohne Relationenalgebra:

a)
1 6 8
4 5 2

b)
2 5
5 5

c)
15

f)
1 9
5 7
6 5
4 8

g)
2 6
5 8
 
Hier meine Vorschläge für Aufgabe 1:
Relationenkalkül und -algebra ist aber nicht meine Domäne, insb. Nr. 3 ist unvollständig.
1.
Select Kennzeichen
From Mietwagen
Where
Sprit-Verbrauch > (select Spritverbrauch from Mietwagen where Kennzeichen = „HA-SE 1“)
Ich habe das Kennzeichen HA-SE 1 in einfache ' gesetzt
2.
Select distinct M.Kennzeichen, M.Marke
From Mietwagen M, Reise R, Filiale F
Where
M.Kennzeichen = R.Kfz
And R.Abgabe_Filiale = F.F_Nr
And F.F_Stadt =”Hagen”
And M.Spritverbrauch > select adv(Spritverbrauch) from Mietwagen where Marke = M.Marke)
Da sich die Attributnamen ja unterscheiden habe ich mir die Angabe der Releation gespart.
Die innere Select Anweisung muss allerdings in () und der Durchschnitt sollte avg sein (ich tippe mal auf einen Tippfehler oder?)
Meine innere SQL-Anweisung sieht daher so aus
(select avg(sprit-verbrauch) from Mietwagen as mw where mw.Marke=marke)
3.
Reise[Leihdatum < „01.01.2007“
Mieter x Reise
M_Nr = Mieter
[Name][Straße][Stadt]
sieht bei mir völlig anders aus (irgendwo fehlt bei dir eine ] )
Filiale[F_Stadt="Hamburg"][F_NR=Leih_Filiale]Reise[Leihdatum<'01.01.2007'][Mieter=M_NR]Mieter[KFZ=Kennzeichen]Mietwagen[Marke="Audi"][M_Name, M_Straße, M_Stadt]
4.
{(Mieter.M_Name)|
Mieter.M_Nr = Reise.Mieter
Und Reise.Leihdatum <= „21.08.2006“
Und Reise.Abgabedatum >= „21.08.2006“
Und Mietwagen.Kennzeichen = Reise.Kfz
Und Mietwagen.Marke = „Mercedes“
}
5.
Range Mietwagen X
{(Mietwagen.Marke, Mietwagen.Preis)|
X.Mietwagen.Kennzeichen = Reise.Kfz
Und nicht es gibt Reise.Leihdatum >= 01.01.2005 und Reise.Leihdatum <= 31.12.2005)
}
6.
Range Reise X
{(Filiale.Leiter)|
Filiale.F_Nr = Reise.Leihfiliale
Und nicht es gibt X(X.Reise.Kfz = Mietwagen.Kennzeichen
Und Mietwagen.Marke = „Volvo“
Und Reise.Leihdatum > „31.12.2006“)
}
sieht bei mir so aus
4)
RANGE Reise R
RANGE Mietwagen M
{(Mieter.M_Name) | EXISTS R(R.Mieter=Mieter.M_Nr and R.Leihdatum<=21.08.06 and EXISTS M(M.Kennzeichen=R.Kfz and M.Marke='Mercedes'))}
5)
RANGE Reise R
RANGE Mieter M
{(Mietwagen.Marke,Mietwagen.Preis)|
EXISTS R(Mietwagen.Kennzeichen=R.KFZ and
R.Leihdatum>=01.01.05 and R.Leihdatum<=31.12.05 and
ALL M(M.M_NR=R.Mieter and M.M_Stadt<>'Hamburg'))}
6)
RANGE Mietwagen M
RANGE Reise R
{(Filiale.Leiter)|
EXISTS R(R.Leihfiliale=Filiale.F_NR and R.Leihdatum>31.12.2006 and ALL M(M.Kennzeichen=R.KFZ and M.Marke<>'Volvo'))}
7.
Delete from mietwagen
Where
Sprit-Verbrauch > 15

8.
Insert into Mietwagen
Values („HA-LO 123“, „BMW“, 10, 30000)
habe ich genauso
9.
Create view Norddeutche_Kunden as
Select distinct M_Name, M_Straße, M_Stadt
From Mieter M, Reise R, Filiale F
Where M.M_Nr = R.Mieter
And Leih_Filiale = F.N_Nr.
And F.F_Stadt in (“Berlin”, “Hamburg”, “Bremen”)
Fängt bei mir ein wenig anders an (ausserdem habe ich mir wieder die Namen für die Relationen gespart)
create view Norddeutsche_Kunden (M_Name, M_Straße, M_Stadt) as
select M_Name, M_Straße, M_Stadt
from mieter, reise, filiale
where mieter.m_nr=reise.mieter
and reise.Leih_Filiale=filiale.f_nr
and filiale.f_stadt in ("Berlin","Hamburg","Bremen")
 
...und hier Aufgabe 2, allerdings ohne Relationenalgebra:
a)
1 6 8
4 5 2
ich habe da
A,C,G
1,6,8
2,5,2
Die dritte Zeile kann nicht enthalten sein, da in R1 B=5 wäre und so etwas gibt es in R3 nicht
B,D
4,6
3,5
für E und damit für A habe ich die Möglichkeiten 7 oder 2
ich bin auf 52 gekommen
Dabei habe ich folgende Tupel berücksichtigt
A B C D C E F (das erste C aus R1, das zweite C aus R2)
4 5 5 4 5 5 7
1 5 8 9 5 5 7
7 4 7 6 4 7 8
9 4 5 3 4 7 8
9 4 5 3 1 5 9
9 4 5 3 5 5 7
9 4 5 3 6 4 5
9 4 5 3 8 2 1
5 7
4 5
7 8
2 1
Es müssten alle Zeilen aus R2 sein, ohne die mit dem kleinsten C
Habe ich auch so
 
Fängt bei mir ein wenig anders an (ausserdem habe ich mir wieder die Namen für die Relationen gespart)
create view Norddeutsche_Kunden (M_Name, M_Straße, M_Stadt) as
select M_Name, M_Straße, M_Stadt
from mieter, reise, filiale
where mieter.m_nr=reise.mieter
and reise.Leih_Filiale=filiale.f_nr
and filiale.f_stadt in ("Berlin","Hamburg","Bremen")
Da fehlte bei mir tatsächlich noch etwas, bei dir aber auch: das distinct. Ohne distinct werden Mieter, die mehrfach ausgeliehen haben, auch mehrfach ausgegeben. Bei mir lautet es jetzt:
Create view Norddeutsche_Kunden (M_Name, M_Straße, M_Stadt) as
Select distinct M_Name, M_Straße, M_Stadt
From Mieter M, Reise R, Filiale F
Where M.M_Nr = R.Mieter
And Leih_Filiale = F.N_Nr.
And F.F_Stadt in (“Berlin”, “Hamburg”, “Bremen”)

Die Vollqualifizierung ist wie du schreibst nicht notwendig, erleichtert meiner Meinung nach aber das Verständnis. Einfache oder doppelte Anführungszeichen sind abhängig von der Implementierung.
 
Hallo zusammen,

hier mal meine Ergebnisse:

--Aufgabe 1
--1.
select mw1.kennzeichen
from mietwagen mw1, mietwagen mw2
where mw1.kennzeichen = mw2.kennzeichen and mw1.kennzeichen = 'HA-SE 1' and mw2.sprit-Verbrauch > mw1.sprit_verbrauch;

--2.
select mw.kennzeichen, mw.marke
from mietwagen mw, filiale f, reise r
where r.kfz=mw.kennzeichen and r.abgabe_filiale = f.´f_nr and f.f_stadt='HAGEN' and mw.spritverbrauch >
select avg(mw2.spritverbrauch)
from mietwagen mw2
where mw2.marke=mw1.marke);

--3.
Reise[Leihdatum<01.01.2007]
X Mietwagen[Kennzeichen=Kfz][Marke='Audi']
X Filiale[F_Nr=Leih_Filiale][F_Stadt=Hamburg]
X Mieter[M_Nr=Mieter][M_Name][M_Straße][M_Stadt]

--4.
RANGE mieter m
RANGE reise r
RANGE mietwagen mw
{(m.Name) | EXISTS r (r.mieter=m.m_m_nr AND
EXISTS mw (mw.kennzeichen = r.kfz AND mw.marke='MERCEDES' AND (r.leihdatum >= 21.08.2006 OR abgabedatum >= 21.08.2006)))}

--5.
RANGE mietwagen mw
RANGE reise r
RANGE mieter m
{(mw.marke,preis) | EXISTS r (r.kfz=mw.kennzeichen and r.leihdatum>=01.01.2005 and r.leihdatum<=31.12.2005 and
NOT EXISTS m (m.m_nr = r.mieter and m_stadt = 'HAMBURG'))}

--6.
range filiale f
range reise r
range mietwagen mw
{(f.leiter) | EXISTS r (r.leih_filiale = f.f_nr and r_leihdatum>31.12.2006 and
NOT EXISTS mw (mw.kennzeichen = r.kfz and mw.makre = 'VOLVO'))}

--7.
delete from mietwagen where sprit-verbrauch > 15;

--8.
insert into mietwagen (kennzeichen, marke, sprit-verbrauch, preis) values ('HA-LO 123','BMW',10,30000);

--9.
create view norddeutsche_kunden (name,straße,stadt) as
select distinct m.m_name, m.m_straße, m.m_stadt
from mieter m, reise r, filiale f
where r.mieter=m.m_nr and f.f_nr = r.leihfiliale and f.f_stadt in ('BERLIN','HAMBURG','BREMEN');

LG
Iris
 
Aufgabe 2 d+e

Hat hier noch niemand 2d+e geposted?

2d
2 8 2
5 5 5

2e
3 2
2 8

Bei 2f stimme ich nun ebenfalls zu:
2 1
5 7
4 5
7 8
 
@boerni: Danke! Ich hab's geändert in:
select mw2.kennzeichen
from mietwagen mw1, mietwagen mw2
where mw1.kennzeichen = 'HA-SE 1' and mw2.sprit-verbrauch > mw1.sprit-verbrauch;
 
...und hier Aufgabe 2, allerdings ohne Relationenalgebra:

c)
15
Hallo zusammen,

ich habe die Werte mal in einer Access Tabelle eingefügt und die SQL Statements gegengeprüft.
Bei 2c erhalte ich einen SQL-Fehler in Access "Typen Unverträglichkeit"

SELECT SUM(F)
FROM R2, R1 WHERE R2.C = B OR D < 4 Wenn der Fall D < 4 zutrifft, fehlt die Relation auf R2, also auf die Spalte F.
Das SQL Statement ist m.E. falsch.

Viele Grüße,
Katrin
 
1. nur weil Access einen Fehler meldet heißt das nicht, dass die SQL-Anweisung falsch ist (oftmals hat eher Access einen *Fehler*, da SQL != SQL)
2. die SQL-Anweisung aus Aufgabe 2c funktioniert in Access tadellos -> Ergebnis 52

Welchen Datentyp hast du deinen Feldern gegeben?
Falls du einen Text mit 4 vergleichst kann das natürlich nicht gutgehen. Als Datentyp musst du jeweils Zahl eintragen.
 
1. nur weil Access einen Fehler meldet heißt das nicht, dass die SQL-Anweisung falsch ist (oftmals hat eher Access einen *Fehler*, da SQL != SQL)
2. die SQL-Anweisung aus Aufgabe 2c funktioniert in Access tadellos -> Ergebnis 52

Welchen Datentyp hast du deinen Feldern gegeben?
Falls du einen Text mit 4 vergleichst kann das natürlich nicht gutgehen. Als Datentyp musst du jeweils Zahl eintragen.
Hallo Sangrick,
nachdem ich die ersten beiden Zeilen deines Kommentares gelesen habe, hat's auch gleich geklingelt.
Schnell die Tabellen in Access hingeschmissen und alles als Text definiert. Zu schnell und nicht aufgepasst. Vielen Dank für den Hinweis.
Ich werde das gleich noch ändern.
Danke und Gruß, Katrin
 
Top