Zum Inhalt springen

Relationsalgebra


grinse78

Empfohlene Beiträge

guten tag @all,

ich habe ein paar probleme eine relation zu erstellen.

ich habe folgende aufgabe.

Teilnehmer(TNr,TBesch)

Erforder(TNr,KNr)

Besizt(KNr,MatNr)

Kenntnisse(Knr, KBeschreibung)

a) Welche Studierende haben Kenntnisse in Java und Datenbanken.

Lösung:

Projektion MatrikelNr(Selection(KBeschreibung ='Java'(K verbund B))vereinigt((Projektion MatrikelNr(Selection(KBeschreibung ='Java'(K verbund B))

Mein Problem ist das ich nicht weiss wie man auf diese Lösung kommt. Wie muss ich vorgehen?

Vielleicht könnt ihr mir ja sagen was ihr als erstes in betracht zieht bei der lösung.

Also klar ist mit schon das ich eine Selektion (Spalte) benötige um nach Java und Datenbanken zu suchen.

Aber woher weiss ich das ich bei der projektion nur die Matrikelnummer auswähle und außerdem weiss ich auch nicht wie ich auf die reihenfolge komme.

oh man das ist echt nicht einfach.

Ich hoffe es kann mir jemand helfen

vielen dank

grins

Link zu diesem Kommentar
Auf anderen Seiten teilen

Aber woher weiss ich das ich bei der projektion nur die Matrikelnummer auswähle und außerdem weiss ich auch nicht wie ich auf die reihenfolge komme.

oh man das ist echt nicht einfach.

die matrikelnummer macht den studierenden eindeutig, deshalb brauchst du laut fragestellung nicht mehr als das, würde nach den wohnorten der studenten mit java und DB kenntnissen gefragt, wäre das anders.

weiß jetzt nich was du mit reihenfolge meinst, ob du nun erst die mit java und dann die mit datenbanken wählst, ist für das ergebnis in deisem fall irrelevant

Link zu diesem Kommentar
Auf anderen Seiten teilen

hallo _n4p_

erstmal danke für deine antwort.

also mit reihenfolge ist mir folgendes nicht ganz klar

MatrikelNr(Selection(KBeschreibung ='Java'(K verbund B))

warum muss ich zuerst die selection schreiben und denn den verbund kann man das auch tauschen.

Oder warum steht der verbund nicht vor der matriklNr ?

Kannst du mir vielleicht erklären wie ich das lesen muss?

Wenn du so eine aufgabe bekommst wie gehst du bei der lösung vor.

über hilfe wär ich sehr glücklich

vielen dank

grins

Link zu diesem Kommentar
Auf anderen Seiten teilen

K verbund B ist die "zusammengesetzte" tabelle aus Kenntnisse und Besitzt

in besitzt steht die information welche student welche kenntnisse besitzt

in Kenntnisse steht der "name" der kenntniss.

das mich interessiert welcher student java kann muss ich die tabellen zusammenführen.

leserichting, falls man das so nennen kann, ist von innen nach aussen.

vorgehen:

schauen wo die benötigten informationen zu finden sind

tabellen sinnvoll verknüpfen

auswahl der gesuchten datensätze

anzeige der ausgewählten sätze

(zeige(was(woher)))

Link zu diesem Kommentar
Auf anderen Seiten teilen

hey

das ging ja schnell dankeschön.

ich werd es gleich nochmal versuchen.

Ich habe leider nicht viele bespiele zum üben.

Ich bin neuling in diesem bereichum es zu testen wie schreibt man denn den Verbund als SQL anweisung

ich habe folgende Syntax verwendet

Anweisung:

SELECT *

FROM K

NATURAL JOIN B

ON (Bedingung);

ist das richtig?

Link zu diesem Kommentar
Auf anderen Seiten teilen

das liegt daran das natural ein "spezialisiertes" inner join ist ^^

natural joins vergleichen alle spalten mit gleichem namen in beiden tabellen, in deinem fall die kenntniss nummer. da es sonst keine gleichnamigen spalten gibt ist es damit erledigt

SELECT * FROM a INNER JOIN b ON (a.col1 = b.col1 AND a.col5 = b.col5)

tut unter der vorausetzung das nur die spalten col1 und col5 in den tabellen a und b den gleichen namen haben (col1 und col5 ^^), das gleiche wie

SELECT * FROM a NATURAL JOIN b

in deinem fall bringt auch ein

SELECT B.MatNr FROM B LEFT JOIN K ON (B.Knr = K.Knr) WHERE K.KBeschreibung IN ('Java','Datenbanken')

das gleiche ergebnis, auch wenn es etwas anderes tut als NATURAL JOIN

was mir aber grad auffällt, das liefert eigentlich nicht das gesuchte ergebniss ^^

das liefert studenten die java ODER datenbanken können, die die beides können sind dann doppelt in der liste ^^

SELECT B.MatNr FROM B NATURAL JOIN K WHERE K.KBeschreibung IN ('Java','Datenbanken') GROUP BY B.MatNr HAVING COUNT(B.Knr) = 2

das wären dann die die Java UND Datenbanken haben

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...