Benötige Hilfe bei SQL Befehlen / Abfragen

  • Hallo liebe Community,

    ich habe heute den Weg hier ins Forum gefunden weil ich nicht mehr weiter weiß.

    Ich habe demnächst Klausur (Wiederholungsklausur) im Fach Datenbanken. Zum lernen stellte mir der Professor eine ältere Klausur zur Verfügung.

    Ich hänge nun an den SQL-Abfragen. Ich habe sie beantwortet bin mir aber absolut unsicher bei einigen, da die Befehle meines Erachtens nach zu kurz sind um X Punkte einer Aufgaben zu erzielen.

    Ich möchte hier nun gerne die Fragen mit meinen Antworten posten (und die Tabellen mit ihren Verknüpfungen auf die sich die Abfragen beziehen).

    Ich hoffe ihr könnt mir schnellst möglich weiterhelfen da ich selbst durch googeln und Scripte durchwälzen nicht mehr weiter komme.

    Hier der Link zum Logischen Schema

    http://www.repage6.de/memberdata/far…ches-Schema.JPG


    Code
    Aufgabe 1 (4 Punkte)
    Gesucht ist eine Liste mit den Fachbereichsnummern und den Namen
    ihrer Lehrveranstaltungen.
    
    
    Meine Lösung: 
    SELECT FB-Nr, Lv-Name
    FROM   Lehrveranstaltungen
    Code
    Aufgabe 2 (8 Punkte)
    Gesucht ist eine Liste solcher (Nach-) Namen, die an beliebiger Position
    den Buchstaben ‘y’ oder ‘Y’ enthält und absteigend sortiert ist.
    
    
    Meine Lösung:
    SELECT    Name
    FROM      Anstellung
    WHERE    Name LIKE '%y%'
    OR         Name LIKE '%Y%'
    Code
    Aufgabe 3 (10 Punkte)
    Gesucht sind die Personalnummern solcher Angestellten, die weder
    ‘Hans’ mit Vornamen heißen noch ‘Müller’ als (Nach-)Namen haben.
    
    
    Meine Lösung:
    SELECT        Pers-Nr
    FROM          Anstellung
    WHERE NOT   ( Vorname ='Hans'
    AND            Name = 'Müller')
    Code
    Aufgabe 5 (18 Punkte)
    Gesucht ist eine Liste mit sämtlichen Namen der Lehrveranstaltungen
    des Professors aus dem Fachgebiet ‘Datenbanken’.
    
    
    Meine Lösung:
    SELECT	        L.Lv-Name, P.Fachgebiet
    FROM		Lehrveranstaltung AS L
    INNER JOIN	Professor AS P
    ON		P.Fachgebiet = 'Datenbanken'


    Würde mich über eure Hilfe sehr freuen


    Mit freundlichen Grüßen

    Der Fara

  • Und warum richtest du dir keine Datenbank ein und testest das erst mal selber?

  • Ich gebe dir hier keine Lösung vor, sondern mache dich nur auf die Fehler aufmerksam.

    Code
    Aufgabe 1 (4 Punkte)
    Gesucht ist eine Liste mit den Fachbereichsnummern und den Namen
    ihrer Lehrveranstaltungen.
    
    
    Meine Lösung: 
    SELECT FB-Nr, Lv-Name
    FROM   Lehrveranstaltungen


    Hier beziehst du dich lediglich auf die Tabelle Lehrveranstaltungen, aber was ist wenn eine Lehrveranstaltung noch keinem Fachbereich zugeordnet ist?
    Du brauchst auf jeden Fall noch die Tabelle Fachbereich mit der Referenz(Beziehung) auf Lehrveranstaltung.

    Zitat
    Code
    Aufgabe 2 (8 Punkte)
    Gesucht ist eine Liste solcher (Nach-) Namen, die an beliebiger Position
    den Buchstaben ‘y’ oder ‘Y’ enthält und absteigend sortiert ist.
    
    
    Meine Lösung:
    SELECT    Name
    FROM      Anstellung
    WHERE    Name LIKE '%y%'
    OR         Name LIKE '%Y%'


    Wo ist die Sortierung, die absteigend erfolgen soll?

    Zitat
    Code
    Aufgabe 3 (10 Punkte)
    Gesucht sind die Personalnummern solcher Angestellten, die weder
    ‘Hans’ mit Vornamen heißen noch ‘Müller’ als (Nach-)Namen haben.
    
    
    Meine Lösung:
    SELECT        Pers-Nr
    FROM          Anstellung
    WHERE NOT   ( Vorname ='Hans'
    AND            Name = 'Müller')


    Deine Lösung lässt Franz Müller genau so zu wie auch Hans Meier.

    Fall1 erst Klammer auswerten
    Franz = Hans ergibt FALSE
    Müller = Müller ergibt TRUE
    FALSE AND TRUE ergibt FALSE somit Bedingung nicht erfüllt. Das ist das Ergebnis des Klammerausdrucks.
    Das NOT negiert hier FALSE zu TRUE und würde somit Franz Müller durchgehen lassen.

    Fall2
    Hans = Hans ergibt TRUE
    Meier = Müller ergibt FALSE
    TRUE AND FALSE ergibt FALSE..
    Das NOT negiert hier FALSE zu TRUE und würde somit Hans Meier durchgehen lassen.


    Zitat


    Du listet hier nur aus Tabelle der Professoren auf, in der Aufgabenstellung heisst es doch Mitarbeiter. Es gibt ja noch eine weiter Tabelle Mitarbeiter, wo Leute dem Fachbereich Informatik zugeordnet sein können, das unterschlägst du hier komplett. Ausserdem steht dort unterschiedliche Berufe, das erfüllt deine Abfrage auch nicht, weil, wenn die Abfrage was ausgeben würde, was sie nach deiner Abfrage nicht tut, dann wäre es so etwas:
    Professor Informatik
    Professor Informatik
    Professor Informatik
    Professor Informatik
    Professor Informatik
    Denke nicht, dass das so der Aufgabenstellung entspricht.
    Es soll auch nicht
    Techniker Informatik
    Techniker Informatik
    Sekretärin Informatik
    Sekretärin Informatik
    rauskommen.
    Noch mal unterschiedlich heisst, jeder Beruf nur 1 mal auch wenn es öfter in der Tabelle vorkommt.

    Zitat
    Code
    Aufgabe 5 (18 Punkte)
    Gesucht ist eine Liste mit sämtlichen Namen der Lehrveranstaltungen
    des Professors aus dem Fachgebiet ‘Datenbanken’.
    
    
    Meine Lösung:
    SELECT            L.Lv-Name, P.Fachgebiet
    FROM        Lehrveranstaltung AS L
    INNER JOIN    Professor AS P
    ON        P.Fachgebiet = 'Datenbanken'


    Es gibt keine Beziehung zwischen der Tabelle Professor und der Tabelle Lehrveranstaltung. Diese Abfrage ergibt keinen Sinn und somit keine Ausgabe, höchstens gemecker von der DB-Engine.
    Du brauchst hier die Tabellen Fachbereich mit Referenz auf Lehrverstaltung und damit du den Professor ausfindig machen kannst musst du über die Tabelle Anstellung die Personen raussuchen deren Personalnummer auch in der Tabelle Professoren steht.

  • Danke für die Antworten und Hinweise.

    Ich hab nochmal überlegt (und vor allem im script nachgeschaut).

    Habe erstmal folgende Änderungen realisiert:

    Aufgabe 1:
    SELECT FB-Nr, Lv-Name
    FROM Lehrveranstaltungen
    REFERENCES Fachbereich (FB-Nr)

    Ist das so korrekt? Also kann ich einfach mit der Anweisung REFERENCES die Beziehung zu der Tabelle herstellen und der Abfrage damit sagen, dass sie auch die Ergebnisse des SELECT Befehls auf die Tabelle Fachbereich ausweitet?


    Aufgabe 2:
    SELECT Name
    FROM Anstellung
    WHERE Name LIKE '%y%'
    OR Name LIKE '%Y%'
    ORDER BY Name DESC


    Aufgabe 3:
    SELECT Pers-Nr
    FROM Anstellung
    WHERE Vorname != 'Hans'
    AND Name != 'Müller'

    Klingt logisch wenn du das so sagst wegen dem negiertem NOT ^^
    Habe jetzt mal mit dem Operator != gearbeitet und das NOT weggelassen.

    Aufgabe 4:

    Hmm also doppelte Einträge verhindere ich mit SELECT DISTINCT soweit ich mich erinnere.
    Aber wie ich die abfrage damit umändern soll bleibt mir gerade ein Rätsel

    Auch bei Aufgabe 5.
    Ich verstehe wie du das meinst, dass ich keine Beziehung zwischen Tabellen herstellen kann, die gar nicht existieren.

    Ich versuchs mal anders:

    Um den Professor mit Namen heraus zu filtern benötige ich die Tabelle Anstellung mit der Spalte Name und Vorname
    Über die Tabellen Lehrveranstaltung erfrage ich die Veranstaltung Datenbanken.
    Da zwischen diesen beiden Tabellen keine Verbindung existiert, benötige ich noch die Tabelle Fachbereich um die Beziehung herzustellen.
    Aus der Tabelle Professor entnehme ich das Fachgebiet Datenbanken.

    Meine Ausgabe soll mir Zeigen, welche Lehrveranstaltungen der Prof der auch Datenbanken hat, noch gibt. Also ist die Ausgabe der Name des Professors und die dazugehörige Lehrveranstaltung.
    Da ich keine Wiederholungen will also wieder ein DISTINCT

    SELECT DISTINCT A.Name, A.Vorname, L.Lv-Name
    FROM Anstellung AS A, Lerhveranstaltung AS L
    WHERE (SELECT Fachgebiet
    FROM Professor
    WHERE Fachgebiet = 'Datenbanken')
    REFERENCES Fachbereich (FB-Nr)

    Aber irgendwie glaub ich das das nicht hinhaut =(

    Ich hasse dieses Fach -.-'

    - - - Aktualisiert - - -

    Achja @Bandit:

    Ich habe mir dbMain eingerichtet auf meinem PC aber das stürzt immer wieder ab.

    Dann habe ich es mit Access versucht (ich glaub da geht sowas ja auch) aber irgendwie hats nicht gefunzt (geht wohl doch nicht).

    Ausserdem dachte ich mir, ich habe nicht so viel scherereien mit diesen Aufgaben als das sich das suchen und installieren anderweitiger Programme gelohnt hätte ~.~ (wie falsch ich doch mit dem Aufwand lag)