Exercice SQL
Fermé
husskar
Messages postés
3
Date d'inscription
jeudi 26 mai 2016
Statut
Membre
Dernière intervention
28 mai 2016
-
Modifié par jordane45 le 27/05/2016 à 19:15
ghuysmans99 Messages postés 2496 Date d'inscription jeudi 14 juillet 2005 Statut Contributeur Dernière intervention 5 juin 2016 - 4 juin 2016 à 04:14
ghuysmans99 Messages postés 2496 Date d'inscription jeudi 14 juillet 2005 Statut Contributeur Dernière intervention 5 juin 2016 - 4 juin 2016 à 04:14
A voir également:
- Exercice SQL
- Logiciel sql - Télécharger - Bases de données
- Jointure sql ✓ - Forum MySQL
- Traitement d'exercice - Forum Bureautique
- Requete sql pix - Forum PHP
- Additions et multiplication dans des requêtes SQL ✓ - Forum MySQL
2 réponses
luckydu43
Messages postés
4215
Date d'inscription
vendredi 9 janvier 2015
Statut
Membre
Dernière intervention
13 mai 2025
1 040
Modifié par jordane45 le 27/05/2016 à 19:14
Modifié par jordane45 le 27/05/2016 à 19:14
Bonjour !
1. OK
2. OK
3.
4.OK
Bon code ^^
Luc
Les 3 plus grands mensonges du dev : 1. La doc ? On la fera plus tard... 2. Le programme a été testé et ne comporte aucun bug... 3. Les spécifications techniques sont finies...
1. OK
2. OK
3.
SELECT (e.NOMETU, e.NUMETU, m.NOMMAT, AVG(n.NOTE) FROM ETUDIANT e INNER JOIN NOTES n ON n.NUMETU# = e.NUMETU INNER JOIN MATIERE m ON m.NUMMAT = n.NUMMAT# GROUP BY e.NOMETU, e.NUMETU, m.NOMMAT
4.OK
Bon code ^^
Luc
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI Merci d'y penser dans tes prochains messages. |
Les 3 plus grands mensonges du dev : 1. La doc ? On la fera plus tard... 2. Le programme a été testé et ne comporte aucun bug... 3. Les spécifications techniques sont finies...
husskar
Messages postés
3
Date d'inscription
jeudi 26 mai 2016
Statut
Membre
Dernière intervention
28 mai 2016
Modifié par husskar le 28/05/2016 à 10:01
Modifié par husskar le 28/05/2016 à 10:01
merci Luc
dans la quatrième requête est ce que il faut utilisé group by avec having où seulement having
dans la quatrième requête est ce que il faut utilisé group by avec having où seulement having
luckydu43
Messages postés
4215
Date d'inscription
vendredi 9 janvier 2015
Statut
Membre
Dernière intervention
13 mai 2025
1 040
Modifié par luckydu43 le 29/05/2016 à 12:56
Modifié par luckydu43 le 29/05/2016 à 12:56
Je ne sais pas honnêtement. N'ayant pas une bases de données sous la main actuellement, je ne pourrais confirmer. Je n'ai pas utilisé la clause Having depuis longtemps, je trouve d'autres astuces (peut-être moins optimisées d'ailleurs) à la place ^^
ghuysmans99
Messages postés
2496
Date d'inscription
jeudi 14 juillet 2005
Statut
Contributeur
Dernière intervention
5 juin 2016
340
Modifié par ghuysmans99 le 4/06/2016 à 04:14
Modifié par ghuysmans99 le 4/06/2016 à 04:14
J'ai testé plus simple dans Access (attention c'est NomEns qui est demandé, pas son numéro de matricule !) :
En règle générale, tout ce qui se trouve juste après le SELECT doit se retrouver dans le GROUP BY. Si tu ne mets pas cette dernière clause, ça fonctionnera si tu n'as qu'un COUNT dans ce que tu sélectionnes. Sinon le SGBD va se plaindre du fait que les autres champs sélectionnés ne se retrouvent pas dans les champs agrégés (GROUP BY).
Synthétiquement, cette clause fonctionne comme suit : elle trie le résultat intermédiaire (où le WHERE a déjà été vérifié) selon ce que tu as donné (disons des noms de champs) et dès qu'une de ces valeurs change par rapport à la ligne précédente (ou qu'elle arrive à la fin), elle produit une ligne de résultat (en faisant les COUNT, MAX et autres fonctions d'agrégat) à condition que la condition après le HAVING l'y autorise.
Dans notre cas, on se permet de regrouper par NomMat et dès qu'on passe à un autre prof, on compte le nombre de NumMat (pas forcément différents même si dans nos résultats ce sera toujours le cas, vu qu'une matière ne peut pas être liée à deux professeurs différents) pour vérifier que ça dépasse bien 1. Si c'est le cas, on a trouvé un professeur qui donne au moins deux cours.
SELECT NomEns FROM ENSEIGNANT E, MATIERE M
WHERE E.Numens=M.Numens
GROUP BY NomEns
HAVING COUNT(NumMat)>1;
En règle générale, tout ce qui se trouve juste après le SELECT doit se retrouver dans le GROUP BY. Si tu ne mets pas cette dernière clause, ça fonctionnera si tu n'as qu'un COUNT dans ce que tu sélectionnes. Sinon le SGBD va se plaindre du fait que les autres champs sélectionnés ne se retrouvent pas dans les champs agrégés (GROUP BY).
Synthétiquement, cette clause fonctionne comme suit : elle trie le résultat intermédiaire (où le WHERE a déjà été vérifié) selon ce que tu as donné (disons des noms de champs) et dès qu'une de ces valeurs change par rapport à la ligne précédente (ou qu'elle arrive à la fin), elle produit une ligne de résultat (en faisant les COUNT, MAX et autres fonctions d'agrégat) à condition que la condition après le HAVING l'y autorise.
Dans notre cas, on se permet de regrouper par NomMat et dès qu'on passe à un autre prof, on compte le nombre de NumMat (pas forcément différents même si dans nos résultats ce sera toujours le cas, vu qu'une matière ne peut pas être liée à deux professeurs différents) pour vérifier que ça dépasse bien 1. Si c'est le cas, on a trouvé un professeur qui donne au moins deux cours.