# SQL Abfrage



## MQue (5. Jan 2009)

Hallo,

ich hätte eine Frage bzgl SQL-Abfrage und zwar möchte ich die Frage beantworten, welcher Student (matrnr, name, Anzahl d. VL ) die meisten Vorlesungenbesucht?

So hab ich mal alle Studenten mit der Anzahl der besuchten Vorlesungen ausgegeben:

```
SELECT matrNr, Name, COUNT(*) AS AnzahlVL FROM is_Studenten NATURAL JOIN is_hoeren GROUP BY matrNr, Name;
```

und so den Max- Wert der besuchten Vorlesungen:

```
SELECT MAX(Anzahl) FROM (SELECT matrNr, COUNT(*) AS Anzahl FROM is_hoeren GROUP BY matrNr);
```
aber ich weiß nicht, wie ich diese beiden Abfragen kombinieren kann oder wie es sonst gehen könnte.
Vielleicht könnte mir da jemand helfen,
Vielen Dank im Voraus,
Beste Grüße


----------



## SlaterB (5. Jan 2009)

sei X gleich 'SELECT matrNr, Name, COUNT(*) AS AnzahlVL FROM is_Studenten NATURAL JOIN is_hoeren GROUP BY matrNr, Name;'

dann kannst du entweder X nach Anzahl sortieren und zurückgeben, 
evtl. die Ergebnismenge auf eine bestimmte Anzahl Einschränken einschränken (DB-spezifisch)

oder

select * from X where anzahl = (select max(anzahl) from X)

beim inneren X kann der Join mit StudentenName wegfallen


----------



## MQue (5. Jan 2009)

Super, hat geklappt, vielen Dank

eine Frage hätte ich noch.
Ich möchte alle Professoren mit ihren Vorlesungen angezeigt und Professoren, die keine
Vorlesungen halten und beim zweiten Teil hats mich, wie kann ich die Professoren dazuholen, die keine Vorlesungen haben und wo dann in der Titel-Spalte "NULL" drinnen steht?

schönen Abend noch,
Beste Grüße



```
SELECT Name, Titel FROM is_professoren INNER JOIN is_vorlesungen ON PersNr = gelesenVon
UNION
SELECT Name, Titel FROM is_professoren, is_vorlesungen WHERE PersNr nicht in der Tabelle Vorlesungen;
```


----------



## SlaterB (5. Jan 2009)

outer join und dann zählen, Anzahl Vorlesungen 0 oder > 0, so in der Art,
oder normalen Join und dann später neue Query nach Ids die nicht in der erste Liste drin sind


----------



## fjord (6. Jan 2009)

Ist das nicht genau der Fall für den es LEFT OUTER JOIN gibt?

```
SELECT Name, Titel FROM is_professoren LEFT OUTER JOIN is_vorlesungen ON PersNr = gelesenVon
```
oder habe ich die Frage falsch verstanden?


----------

