Ergebnis Korrektur

Maghrebi

Neuer Benutzer
Beiträge
4
Hi Leute,
ich weiß jetzt nicht ob ich die Frage hier richtig stelle aber naja ich hoffe mal.

sitze momentan an einige SQL aufgaben leider habe ich nicht die Möglichkeit die SQL-Anfragen zu kontrollieren und möchte euch fragen ob ich es richtig gemacht habe.

Bestimmen Sie die Namen aller Studenten, die mit je mindestens einem Kommilitonen aus demselben Semester eine Vorlesung besuchen.

Meine Antwort sieht folgender maßen aus:

Code:
select distinct s.Name
from Student s, Vorlesung v, hört h
where s.MatrNr = h.MatrNr
and h.VorlNr = v.VorlNr
and v.VorlNr in (select s.min(*)
                from Student s, Vorlesung v, hört h
                where s.MatrNr = h.MatrNr
                and h.VorlNr = v.VorlNr)

Sagt bescheid, wenn ihr das Beispielschema sehen wollt.

Danke :)
 
Werbung:
Lösung:

Code:
select distinct s1.Name
from Student s1, Stundent s2, hört h1, hört h2
where s1.semester = s2.semester
and  s1.MatrNr = h1.MatrNr
and  s2.MatrNr = h2.MatrNr
and  h1.VorlNr = h2.VorlNr
and  s1.MatrNr <> s2.MatrNr
 
Hi Leute,
ich weiß jetzt nicht ob ich die Frage hier richtig stelle aber naja ich hoffe mal.

sitze momentan an einige SQL aufgaben leider habe ich nicht die Möglichkeit die SQL-Anfragen zu kontrollieren und möchte euch fragen ob ich es richtig gemacht habe.

Bestimmen Sie die Namen aller Studenten, die mit je mindestens einem Kommilitonen aus demselben Semester eine Vorlesung besuchen.


Danke :)


Na sowas lieben wir: ganz neu reinschneien und die Hausaufgaben gemacht haben wollen! ;-)

Ich hab mal diese Tabellen und Inhalte angelegt:

Code:
test=*# select * from studenten ;
 id |    name    | sg
----+------------+----
  1 | mueller    |  1
  2 | meier      |  1
  3 | schuster   |  1
  4 | mustermann |  2
  5 | heinz      |  2
  6 | kunze      |  3
(6 rows)

Time: 0,174 ms
test=*# select * from vorlesung ;
 id | name
----+------
  1 | v1
  2 | v2
  3 | v3
(3 rows)

Time: 0,174 ms
test=*# select * from teilnehmer ;
 id_vorlesung | id_stud
--------------+---------
            1 |       1
            1 |       2
            1 |       3
            2 |       3
            2 |       4
            2 |       6
(6 rows)

Nun diese Abfrage:

Code:
test=*# select v.id v, s.id s, s.sg, count(1) over (partition by v.name,s.sg) from teilnehmer t left join vorlesung v on (t.id_vorlesung=v.id) left join studenten s on(t.id_stud=s.id) ;
 v | s | sg | count
---+---+----+-------
 1 | 1 |  1 |     3
 1 | 2 |  1 |     3
 1 | 3 |  1 |     3
 2 | 3 |  1 |     1
 2 | 4 |  2 |     1
 2 | 6 |  3 |     1
(6 rows)

Die ersten Spalten sind also Vorlesung und Stundent (die IDs), dann noch mal die Seminargruppe (so hab ich das mal genannt) und wie viele Teilnehmer pro Vorlesung und SG dabei sind.

Diese Abfrage kannst Du nun nehmen, um alle v und s zu ermitteln, wo die Teilnehmerzahl größer oder gleich Deiner Schranke ist.


Das dahin auszubauen überlasse ich jetzt Dir als Hausaufgabe ;-)


Ach ja: Du hast kein DB-System genannt, ich verwende PostgreSQL.
 
Wenn du mir sagen kannst wo ich sowas finde, dann wäre es echt super und sehr effektiv beim lernen
Was, 'ne Datenbank zum installieren?

Es gibt OpenSource, ich bevorzuge ja PostgreSQL. Gibt es als Klick-Installation auch für Windows. Es gibt MySQL, was aber zu Oracle gehört und IMHO keine gute DB ist. Es gibt außerden von den großen kommerziellen Systemen fast überall eine freie Demo-Version, die dann auf 4GB Daten oder so beschränkt sind, und/oder 1 CPU-Core oder so. Völlig ausreichend. Also, einfach eine aussuchen, installieren, fertsch. Das ist keine Magie.

http://www.postgresql.org/download/

Mal so als Anlaufstelle ...
 
Als Einstieg finde ich persönlich auch Microsoft SQL Express sehr gut, hauptsächlich weil ich SQL Studio als Werzeug sehr gerne mag und als Windows User findet man sich dort schnell zurecht, kann notfalls auch mal was über Menüs machen.

Aber auch Postgre mag ich sehr, leider kommt es hier nicht zum Einsatz und mein letzter Kontakt ist ewig her.
 
Als Einstieg finde ich persönlich auch Microsoft SQL Express sehr gut, hauptsächlich weil ich SQL Studio als Werzeug sehr gerne mag und als Windows User findet man sich dort schnell zurecht, kann notfalls auch mal was über Menüs machen.

Aber auch Postgre mag ich sehr, leider kommt es hier nicht zum Einsatz und mein letzter Kontakt ist ewig her.

Für Windows-User gibt es PGAdmin, was aber auch unter z.B. Linux läuft. Eine schicke bunte Oberfläche. Mir persönlich reicht das CLI-Tool 'psql' aber völlig aus.
Die aktuellen Versionen, also ab 9.1 / 9.2, bieten eine Fülle von coolen Dingen, wenn Du das lange nicht mehr genutzt hast, wirst Du vieles nicht kennen...

Andreas
 
Ich werd das selbst mal testen, finde aber schon eine grafische Oberfläche die mir Elemente in einer Datenbank (Tabellen, Spalten, Trigger, Views) anzeigt sehr nützlich, siehe MS SQL Studio. Gibt es zu PGAdmin noch sinnvolle Alternativen?
 
Werbung:
Ich werd das selbst mal testen, finde aber schon eine grafische Oberfläche die mir Elemente in einer Datenbank (Tabellen, Spalten, Trigger, Views) anzeigt sehr nützlich, siehe MS SQL Studio. Gibt es zu PGAdmin noch sinnvolle Alternativen?

Sicher, PhpPgAdmin z.B., auch Kommerzware. Aber das PGAdmin ist einklich recht populär, das zeigt Dir schon alles an, also alle Objekt der DB und man kann da viel drin machen.

http://www.pgadmin.org/


Andreas
 
Zurück
Oben