Grundlagen der Datenbanken

Eine Mitarbeitertabelle (Name, Abteilung, Gehalt) hat 8 Zeilen mit folgenden Gehältern je Abteilung: Vertrieb 320, 280, 350; Entwicklung 400, 310; Verwaltung 260, 300; Planung 330. Wie viele Zeilen liefert SELECT Abteilung, COUNT(*) FROM Mitarbeiter WHERE Gehalt >= 300 GROUP BY Abteilung HAVING COUNT(*) >= 2?

  1. A2 Zeilen
  2. B3 Zeilen
  3. C4 Zeilen
Antwort und Erläuterung anzeigen

Antwort: A. 2 Zeilen

Zuerst behält WHERE nur Zeilen mit einem Gehalt von 300 oder mehr. Beim Vertrieb bleiben zwei Zeilen (320 und 350), bei der Entwicklung zwei (400 und 310), bei der Verwaltung eine (300) und bei der Planung eine (330); 280 im Vertrieb und 260 in der Verwaltung fallen weg. Dann fasst GROUP BY die Zeilen nach Abteilungen zu vier Gruppen mit den Anzahlen Vertrieb 2, Entwicklung 2, Verwaltung 1 und Planung 1 zusammen. Zuletzt behält HAVING COUNT(*) >= 2 nur Gruppen mit zwei oder mehr Zeilen, das Ergebnis sind also 2 Zeilen: Vertrieb und Entwicklung. Ohne WHERE gezählt ergäbe sich Vertrieb 3, Entwicklung 2, Verwaltung 2 und Planung 1, und 3 Zeilen würden HAVING erfüllen. Die Reihenfolge – WHERE wirkt vor der Gruppierung, HAVING danach – bestimmt das Ergebnis.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Grundlagen der Datenbanken

  1. Eine Mitarbeitertabelle (MitarbeiterNr, Name, AbteilungsID) hat 4 Zeilen mit den AbteilungsID-Werten 10, 20, 10 und NULL in dieser Reihenfolge. Eine Abteilungstabelle (AbteilungsID, Abteilungsname) hat 3 Zeilen mit AbteilungsID 10, 20 und 30. Wie viele Zeilen liefert SELECT Mitarbeiter.Name, Abteilung.Abteilungsname FROM Mitarbeiter INNER JOIN Abteilung ON Mitarbeiter.AbteilungsID = Abteilung.AbteilungsID?
  2. Eine Mitarbeitertabelle (MitarbeiterNr, Name, AbteilungsID) hat 5 Zeilen mit den AbteilungsID-Werten 10, 20, 10, NULL und NULL in dieser Reihenfolge. Eine Abteilungstabelle (AbteilungsID, Abteilungsname) hat 3 Zeilen mit AbteilungsID 10, 20 und 30. Wie viele Zeilen liefert SELECT Abteilung.Abteilungsname, Mitarbeiter.Name FROM Abteilung LEFT OUTER JOIN Mitarbeiter ON Abteilung.AbteilungsID = Mitarbeiter.AbteilungsID?
  3. Spalte x der Tabelle R hat 4 Zeilen mit den Werten 1, 1, 2, 3, und Spalte x der Tabelle S hat 4 Zeilen mit den Werten 1, 1, 2, 4. Wie viele Zeilen liefert SELECT * FROM R INNER JOIN S ON R.x = S.x?
  4. Eine Kundentabelle (KundenID, Name) hat 4 Zeilen: (C1, Aoki), (C2, Inoue), (C3, Ueda), (C4, Eto). Eine Bestelltabelle (BestellID, KundenID, Betrag) hat 5 Zeilen: (O1, C1, 3000), (O2, C2, 8000), (O3, C1, 6000), (O4, C3, 2000), (O5, C2, 9000). Wie viele Zeilen liefert SELECT Name FROM Kunde WHERE KundenID IN (SELECT KundenID FROM Bestellung WHERE Betrag > 5000)?
  5. Aus einer Kundentabelle (KundenID, Name) und einer Bestelltabelle (BestellID, KundenID, Betrag) sollen die Namen der Kunden ermittelt werden, die noch nie bestellt haben. Welche SQL-Anweisung ist richtig?