Basis van databases

De tabel Medewerker (Naam, Afdeling, Salaris) heeft acht rijen, met per afdeling de volgende salarissen: Verkoop 320, 280, 350; Ontwikkeling 400, 310; Administratie 260, 300; Planning 330. Hoeveel rijen geeft SELECT Afdeling, COUNT(*) FROM Medewerker WHERE Salaris >= 300 GROUP BY Afdeling HAVING COUNT(*) >= 2?

  1. A2 rijen
  2. B3 rijen
  3. C4 rijen
Antwoord en toelichting tonen

Antwoord: A. 2 rijen

Eerst houdt WHERE alleen de rijen over met een salaris van 300 of meer. Bij Verkoop blijven twee rijen over (320 en 350), bij Ontwikkeling twee (400 en 310), bij Administratie één (300) en bij Planning één (330); de 280 van Verkoop en de 260 van Administratie vallen af. Daarna bundelt GROUP BY de rijen per afdeling in vier groepen met de aantallen Verkoop 2, Ontwikkeling 2, Administratie 1 en Planning 1. Ten slotte houdt HAVING COUNT(*) >= 2 alleen de groepen met twee of meer rijen over, dus het resultaat bestaat uit twee rijen: Verkoop en Ontwikkeling. Zonder WHERE geteld geeft het Verkoop 3, Ontwikkeling 2, Administratie 2 en Planning 1, en dan zouden drie rijen aan HAVING voldoen. De volgorde, waarbij WHERE vóór het groeperen werkt en HAVING erna, bepaalt het resultaat.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Basis van databases

  1. De tabel Medewerker (MedewerkerNr, Naam, AfdelingID) heeft vier rijen met als waarden voor AfdelingID achtereenvolgens 10, 20, 10 en NULL. De tabel Afdeling (AfdelingID, Afdelingsnaam) heeft drie rijen met AfdelingID 10, 20 en 30. Hoeveel rijen geeft SELECT Medewerker.Naam, Afdeling.Afdelingsnaam FROM Medewerker INNER JOIN Afdeling ON Medewerker.AfdelingID = Afdeling.AfdelingID?
  2. De tabel Medewerker (MedewerkerNr, Naam, AfdelingID) heeft vijf rijen met als waarden voor AfdelingID achtereenvolgens 10, 20, 10, NULL en NULL. De tabel Afdeling (AfdelingID, Afdelingsnaam) heeft drie rijen met AfdelingID 10, 20 en 30. Hoeveel rijen geeft SELECT Afdeling.Afdelingsnaam, Medewerker.Naam FROM Afdeling LEFT OUTER JOIN Medewerker ON Afdeling.AfdelingID = Medewerker.AfdelingID?
  3. Kolom x van tabel R heeft vier rijen met de waarden 1, 1, 2, 3, en kolom x van tabel S heeft vier rijen met de waarden 1, 1, 2, 4. Hoeveel rijen geeft SELECT * FROM R INNER JOIN S ON R.x = S.x?
  4. De tabel Klant (KlantID, Naam) heeft vier rijen: (C1, Aoki), (C2, Inoue), (C3, Ueda), (C4, Eto). De tabel Bestelling (BestelID, KlantID, Bedrag) heeft vijf rijen: (O1, C1, 3000), (O2, C2, 8000), (O3, C1, 6000), (O4, C3, 2000), (O5, C2, 9000). Hoeveel rijen geeft SELECT Naam FROM Klant WHERE KlantID IN (SELECT KlantID FROM Bestelling WHERE Bedrag > 5000)?
  5. Uit de tabel Klant (KlantID, Naam) en de tabel Bestelling (BestelID, KlantID, Bedrag) moeten de namen worden opgevraagd van klanten die nog nooit iets hebben besteld. Welk SQL-statement is juist?