Sql-Abfragen

Chrissy_Love

Mitglied
Hallo zusammen ich bin die Christina und bin neu hier. Ich hoffe ihr könnt mir weiter helfen.

Ich brauche hilfe bei Sql-Abfragen.

Wenn ich folgendes habe :

DB-Schema
Dozent (DozKn, Name, FB, Raum, Telefon)
Student(MatrikelNr, Name, Adresse, Telefon, Immatr, Exmatr)
Vorlesung(Vnr, Name)
Voraussetzung(Vnr, VorVnr)
Vorlesungsangebot(Vnr, Semester, DozKn, Raum, Zeit)
Pruefung(MatrikelNr, Vnr, Semester, Datum, Note)

Die erste Abfrage ist:
Fomuliere in der relationalen Algebra die Abfrage, mit der alle erfolgreich bestandenen
Prüfungsleistungen des Studenten Max Muster ausgegeben werden in der Form MatrikelNr,
VNr, Datum, Note.

Hier für fällt mir keine lösung ein noch nichtmal ein Ansatz.


Die zweite Abfrage ist:

Ermittel die Namen, MatrikelNr aller Studentinnen und Studenten, die im Zeitraum Juni bis
August 2009 keine Prüfung bestanden haben und diejenigen, die im selben Zeitraum mehr als 3
Prüfungen besser als 2.3 bestanden haben. Die Ausgabe soll bestehen aus MatrikelNr, Name,
AnzahlPrüfungen.

Mein Lösungs ansatz :

Select MatrikelNr, Name
from Prüfung where Datum between 'Juni 2009' and 'August 2009'
and Note > 4.0
and Note < 2.3
having count(*) >=3


Ich weiß nicht ob es so richtig ist.


Die dritte Abfrage ist:

Ein Prüfungsausschussvorsitzende möchte für den Prüfungszeitraum Juni bis August 2009 für
alle Prüfungen wissen, wie viele an der jeweiligen Prüfung teilgenommen haben, wie der
Zensurendurchschnitt der jeweiligen Prüfung war und wie viele Teilnehmer um mindestens 0.4
über dem Durchschnitt dieser Prüfung lagen.

Mein Lösungs ansatz :

Select MatikelNr, avg(Note)
from Prüfung where 'Juni 2009' and 'August 2009'
and

Hier weiß ich nicht weiter


Und das letzte wäre noch eine Frage :

Durch welche Maßnahmen (SQL?Befehle) kann in der vorhergehenden Teilaufgabe
gewährleistet werden, dass nur der Prüfungsausschussvorsitzende diese Informationen abrufen
kann?


Ich hoffe jemand von euch kann mir weiter helfen.
Vielen Dank schon mal im vorraus.
 
Hallo,

Sonntag Abend und die Hausaufgaben für Montag noch nicht erledigt ;)
Na dann fang ich mal an und hilf dir bei der 1. Frage.
SQL:
SELECT p.MatrikelNr, p.VNr, p.Datum, p.Note
FROM Pruefungen p, Student s
WHERE p.MatrikelNr = s.MatrikelNr and s.Name = 'Max Muster' and p.Note < 5

um an das Ergebnis zu kommen musst du die Tabellen Pruefungen und Student verknüpfen, dies geschieht in dem Beispiel über die MatrikelNr.
 
Zuletzt bearbeitet von einem Moderator:
Durch welche Maßnahmen (SQL?Befehle) kann in der vorhergehenden Teilaufgabe
gewährleistet werden, dass nur der Prüfungsausschussvorsitzende diese Informationen abrufen
kann?

Hallo,
du kannst mit Hilfe eines 'grand'-Befehls Rechte vergeben

SQL:
grant select on TABELLE_XY to Prüfungsausschussvorsitzende;

wenn vorher Rechte entzogen werden sollen geht das mit

SQL:
revoke select on TABELLE_XY from ...;



Grüße
 
Zuletzt bearbeitet von einem Moderator:
Die zweite Abfrage ist:

Ermittel die Namen, MatrikelNr aller Studentinnen und Studenten, die im Zeitraum Juni bis
August 2009 keine Prüfung bestanden haben und diejenigen, die im selben Zeitraum mehr als 3
Prüfungen besser als 2.3 bestanden haben. Die Ausgabe soll bestehen aus MatrikelNr, Name,
AnzahlPrüfungen.

hier würde ich mit subselect arbeiten:

keine Prüfung:

SQL:
select a.MatrikelNr, a.Name, s.summe
from Prüfung a,
    (select MatrikelNr,
            count(*) as summe
      from Prüfung
      where note <= 4
      and Datum between 'Juni 2009' and 'August 2009'
      group by MatrikelNr) s
where s.MatrikelNr = a.MatrikelNr
and s.summe = 0;

3 Prüfungen besser als 2,3:


SQL:
select a.MatrikelNr, a.Name, s.summe
from Prüfung a,
    (select MatrikelNr,
            count(*) as summe
      from Prüfung
      where note <  2,3
      and Datum between 'Juni 2009' and 'August 2009'
      group by MatrikelNr) s
where s.MatrikelNr = a.MatrikelNr
and s.summe >= 3;

Achtung nicht getestet, nur so aus dem Kopf!!
 
Zuletzt bearbeitet von einem Moderator:
Die dritte Abfrage ist:

Ein Prüfungsausschussvorsitzende möchte für den Prüfungszeitraum Juni bis August 2009 für
alle Prüfungen wissen, wie viele an der jeweiligen Prüfung teilgenommen haben, wie der
Zensurendurchschnitt der jeweiligen Prüfung war und wie viele Teilnehmer um mindestens 0.4
über dem Durchschnitt dieser Prüfung lagen.

Das wird häßlich. Ich hab es auch nicht testen können aber ich versuche es mal:

SQL:
select 
a.Vnr,
avgpruefung.durchschnitt,
anz.summe as anzahlStudenten,
anzdurch.summe as anzahlueberdurschnitt
from   Vorlesungsangebot a
inner join (select Vnr,
            round(avg(Note),2) as durchschnitt
            from Pruefung
            where Datum between 'Juni 2009' and 'August 2009'
            group by Vnr) avgpruefung
on a.Vnr = durch.Vnr
inner join (select Vnr,
            count(*) as summe
            from Pruefung
            where Datum between 'Juni 2009' and 'August 2009'
	        group by Vnr) anz
on a.Vnr = anz.Vnr
left join (select c.Vnr,
	   		     count(*) as summe
	       from Pruefung c,
                (select Vnr,
                        round(avg(Note),2) as durchschnitt
                from Pruefung
                group by Vnr) countdurch
           where c.Note <= countdurch.durchschnitt - 0,4
           and c.Datum between 'Juni 2009' and 'August 2009'
	       and c.Vnr = countdurch.Vnr
	       group by c.Vnr) anzdurch
on anzdurch.Vnr = a.Vnr
group by a.Vnr,
	  	 avgpruefung.durchschnitt,
		 anz.summe,
		 anzdurch.summe

geht vielleicht auch schöner, aber ich denke es wird so funktionieren

Bei Fragen einfach melden, aber vorher subselect, join, grant und revoke lesen :)

Grüße
 
Zuletzt bearbeitet von einem Moderator:
Vielen Vielen Lieben Dank für deine Hilfe FrankBooth.
Ich werde fleißig lesen und hoffe auch dabei lernen. :)

Danke Danke :-(
 
Zurück