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 ?
- A2 lignes
- B3 lignes
- 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.
Continuer : 9 autres questions sur Bases des bases de données