Exercice SQL

husskar Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
ghuysmans99 Messages postés 2496 Date d'inscription   Statut Contributeur Dernière intervention   -
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.

2 réponses

luckydu43 Messages postés 4259 Date d'inscription   Statut Membre Dernière intervention   1 057
 
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   Statut Membre Dernière intervention  
 
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 4259 Date d'inscription   Statut Membre Dernière intervention   1 057
 
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   Statut Contributeur Dernière intervention   340
 
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