grinse78 Geschrieben 13. Dezember 2009 Teilen Geschrieben 13. Dezember 2009 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 )vereinigt((Projektion MatrikelNr(Selection(KBeschreibung ='Java'(K verbund ) 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
_n4p_ Geschrieben 14. Dezember 2009 Teilen Geschrieben 14. Dezember 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
grinse78 Geschrieben 14. Dezember 2009 Autor Teilen Geschrieben 14. Dezember 2009 hallo _n4p_ erstmal danke für deine antwort. also mit reihenfolge ist mir folgendes nicht ganz klar MatrikelNr(Selection(KBeschreibung ='Java'(K verbund ) 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
_n4p_ Geschrieben 14. Dezember 2009 Teilen Geschrieben 14. Dezember 2009 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))) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
grinse78 Geschrieben 14. Dezember 2009 Autor Teilen Geschrieben 14. Dezember 2009 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
_n4p_ Geschrieben 14. Dezember 2009 Teilen Geschrieben 14. Dezember 2009 allgemein gesagt, schreibt man den verbund durch ein geeignetes join ^^ und ja, das wäre so schon richtig Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
grinse78 Geschrieben 14. Dezember 2009 Autor Teilen Geschrieben 14. Dezember 2009 ah das hatte mich auch gewundert, denn ich habe das selbe ergbniss erziehlt durch die abfrage mit inner Join. Hab vielen dank *grins* Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
_n4p_ Geschrieben 14. Dezember 2009 Teilen Geschrieben 14. Dezember 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.