Bases des bases de données

Une table Employe(Nom, Service, Salaire) contient 8 lignes ; les salaires par service sont : Commercial 320, 280, 350 ; Développement 400, 310 ; Administration 260, 300 ; Planification 330. Combien de lignes renvoie SELECT Service, COUNT(*) FROM Employe WHERE Salaire >= 300 GROUP BY Service HAVING COUNT(*) >= 2 ?

  1. A2 lignes
  2. B3 lignes
  3. C4 lignes
Afficher la réponse et l'explication

Réponse : A. 2 lignes

D'abord, WHERE ne garde que les lignes dont le salaire est supérieur ou égal à 300. Commercial garde 2 lignes (320 et 350), Développement 2 (400 et 310), Administration 1 (300) et Planification 1 (330) ; le 280 de Commercial et le 260 d'Administration sont éliminés. Ensuite, GROUP BY rassemble les lignes par service en 4 groupes, avec les effectifs Commercial 2, Développement 2, Administration 1 et Planification 1. Enfin, HAVING COUNT(*) >= 2 ne garde que les groupes d'au moins 2 lignes ; le résultat compte donc 2 lignes : Commercial et Développement. Sans WHERE, on compterait Commercial 3, Développement 2, Administration 2 et Planification 1, et 3 lignes satisferaient HAVING. C'est l'ordre d'action, WHERE avant le regroupement et HAVING après, qui détermine le résultat.

S'entraîner sur ce thème Retour au thème

Autres questions sur Bases des bases de données

  1. Une table Employe(NumEmploye, Nom, IdService) contient 4 lignes dont les valeurs IdService sont, dans l'ordre, 10, 20, 10 et NULL. Une table Service(IdService, NomService) contient 3 lignes dont IdService vaut 10, 20 et 30. Combien de lignes renvoie SELECT Employe.Nom, Service.NomService FROM Employe INNER JOIN Service ON Employe.IdService = Service.IdService ?
  2. Une table Employe(NumEmploye, Nom, IdService) contient 5 lignes dont les valeurs IdService sont, dans l'ordre, 10, 20, 10, NULL et NULL. Une table Service(IdService, NomService) contient 3 lignes dont IdService vaut 10, 20 et 30. Combien de lignes renvoie SELECT Service.NomService, Employe.Nom FROM Service LEFT OUTER JOIN Employe ON Service.IdService = Employe.IdService ?
  3. La colonne x de la table R contient 4 lignes de valeurs 1, 1, 2, 3, et la colonne x de la table S contient 4 lignes de valeurs 1, 1, 2, 4. Combien de lignes renvoie SELECT * FROM R INNER JOIN S ON R.x = S.x ?
  4. Une table Client(IdClient, Nom) contient 4 lignes : (C1, Aoki), (C2, Inoue), (C3, Ueda), (C4, Eto). Une table Commande(IdCommande, IdClient, Montant) contient 5 lignes : (O1, C1, 3000), (O2, C2, 8000), (O3, C1, 6000), (O4, C3, 2000), (O5, C2, 9000). Combien de lignes renvoie SELECT Nom FROM Client WHERE IdClient IN (SELECT IdClient FROM Commande WHERE Montant > 5000) ?
  5. À partir d'une table Client(IdClient, Nom) et d'une table Commande(IdCommande, IdClient, Montant), on veut obtenir le nom des clients qui n'ont jamais passé de commande. Quelle instruction SQL est correcte ?