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
Bonjour,



voici mon travail j'attend votre correction

Requête 1:
select * from etudiant
order by nomEtu; 


Requête 2:
SELECT Numetu, Nometu
FROM ETUDIANT
WHERE Numetu NOT IN
     (SELECT Numetu FROM NOTES N, MATIERE M
      WHERE N.Numat=M.Numat
      AND Nomat='algorithmique'');

Requête 3:

j'ai pas bien compris la requete

Requête 4:
SELECT Numens, Grade, Ancien
FROM ENSEIGNANT E, MATIERE M
WHERE E.Numens=M.Numens
HAVING COUNT(Numens)>1;




EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.
A voir également:

2 réponses

luckydu43 Messages postés 3484 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 30 juin 2022 815
Modifié par jordane45 le 27/05/2016 à 19:14
Bonjour !

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...
0
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
merci Luc
dans la quatrième requête est ce que il faut utilisé group by avec having où seulement having
0
luckydu43 Messages postés 3484 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 30 juin 2022 815
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 ^^
0
ghuysmans99 Messages postés 2496 Date d'inscription jeudi 14 juillet 2005 Statut Contributeur Dernière intervention 5 juin 2016 338
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 !) :
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.
0