IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Liste des élèves non notés dans une matière donnée


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 60
    Points : 47
    Points
    47
    Par défaut Liste des élèves non notés dans une matière donnée
    Salut

    J'ai un petit soucis concernant une requete SQL

    Voilà j'ai les tables suivantes :

    Classes ( idcla , libcla , ....)

    Eleves ( idelv , nomelv , prenelv , .... , #idcla , ....)

    Matieres ( idmat , libmat , ....)

    Trimestres ( idtrim , libtrim , datedeb , datefin)

    Notes ( #idelv , #idmat , #idtrim , note1 , note2 , ...)


    Supposant qu'un prof qui enseigne une matière donnée n'a pas encore saisi les notes de ses élèves dans cette matière et on veut qu'en choisissant sa classe , une liste de ses élèves s'affiche ainsi que les colonnes : note1 , note2 , ...c'est-à-dire en tout ça :

    Nom Prénom note1 note2

    Bernard Yoan NULL NULL

    Dumoulin Seb NULL NULL

    ...... ..... NULL NULL


    Bref , chaque prof a ses propres classes et il doit saisir leurs notes dans la matière qu'il enseigne donc si on suppose que la table Matières est totalement saisie et qu'elle contient toutes les matières enseignées mais que la table Notes n'en contient pas 3 ou 4 ( par exemple les profs de physique et de maths ont oublié de saisir les notes de leurs élèves dans ces matières ).

    Ma question : Comment , à travers une requete SQL , afficher la liste des élèves d'une classe donnée dont leurs notes n'ont pas encore été saisies et ce pour une matière donnée et un trimestre donné , c'est-à-dire afficher les élèves ( nom , prénom , ...) et les colonnes représentant leurs notes respectives mais dont le contenu est : NULL afin de permettre au prof de saisir les notes.

    J'ai essayé cette requete SQL mais ça ne me donne pas ce que je voulais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT e.idelv,e.nom,e.pren,c.libcla,m.libmat,t.libtrim,n.note1,n.note2,n.note3 FROM classes c INNER JOIN 
    eleves e ON c.idcla=e.idcla LEFT JOIN notes n ON e.idelv=n.idelv 
    WHERE e.idcla =4 AND n.idmat=3 AND n.idtrim=1
    Voilà , j'utilise la base de données SQL SERVER 2008 , Merci pour tout.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Bonjour,

    pour voir seulement les matières sans notes, il faut chercher du côté de "NOT EXISTS"

  3. #3
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonjour,

    Effectivement quelque chose du genre serait plus adapté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT * 
    FROM Classes AS C
    INNER JOIN Eleves AS E
     ON C.idcla = E.idcla
    WHERE NOT EXISTS (SELECT * FROM Notes N
                      INNER JOIN Trimestres AS T
                       ON T.idtrim = N.idtrim
                      INNER JOIN Matieres AS M
                       ON M.idmat = N.idmat
                      WHERE n.idmat = 3 AND n.idtrim=1
                        AND N.idelv = E.idelv)
    Par contre je vois que vous avez modélisé la table notes de manière à pouvoir entrer les notes dans une colonne distincte avec un nombre prédéfini de possibilités. Comment allez-vous faire si ce nombre augmente ? Comment allez-vous faire pour calculer (facilemement) des moyennes par classes par exemple ou encore déterminer les meilleurs notes qu'à pu avoir un élève pour un trimestre donné ... ?

    ++

    ++

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    Par contre je vois que vous avez modélisé la table notes de manière à pouvoir entrer les notes dans une colonne distincte avec un nombre prédéfini de possibilités. Comment allez-vous faire si ce nombre augmente ? Comment allez-vous faire pour calculer (facilemement) des moyennes par classes par exemple ou encore déterminer les meilleurs notes qu'à pu avoir un élève pour un trimestre donné ... ?
    C'est ce que je sous-entendais par ailleurs mais comme je l'ai orienté ici pour la requête, il y est venu sans revoir son modèle.
    Du coup il se prend une remarque équivalente ici aussi !

  5. #5
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    C'est ce que je sous-entendais par ailleurs mais comme je l'ai orienté ici pour la requête, il y est venu sans revoir son modèle.
    Du coup il se prend une remarque équivalente ici aussi
    Lol bon ben voila ca c'est fait :-)

    ++

  6. #6
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 60
    Points : 47
    Points
    47
    Par défaut
    Salut ,

    Merci de m'avoir répondu et je suis totalement fautif à propos de la table Notes c'est vrai qu'elle n'est pas bien modélisée mais j'ai fait ça c'est parce que ça me rendait la tache facile surtout pour le calcul de la moyenne par matière mais vous avez totalement raison et je m'incline mais du moment que j'ai le MLD de ma base de données comme ci-dessous comment calculer la moyenne par matière et ce pour chaque élève , pour chaque matière et pour chaque trimestre sachant que l'attribut note peut représenter soit :


    - Note d'appréciation / 20 ----> note_appr

    - devoir n° 1 / 20 ----> dev1

    - devoir n° 2 / 20 ----> dev2

    - Examen de fin de trimestre / 60 ----> exam


    Classe( idcla , libcla , ....)

    Eleve( idelv, nomelv, prenelv, .... , #idcla , ....)

    Matiere( idmat, libmat , ....)

    Trimestre( idtrim , libtrim , datedeb , datefin)

    Examen( idexamen , libexamen , #idmat , date_examen )

    Note( #idelv , #idtrim , #idexamen , note)


    La formule de calcul de la moyenne par matière est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Moy_Mat = ( ( note_appr + dev1 +dev2 ) / 3  + exam ) / 5

    Merci de votre aide et excuse moi CinePhil si je t'ai "aggacé" car vous faites ce qu'il y a de plus sacré au monde : Aider son prochain

  7. #7
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    il suffira de faire une jointure sur la table matière / exam :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select idelv, idmat, avg(note)
    from note a
    inner join Examen b on a.idexamen = b.idexamen
    inner join matiere c on b.idmat = c.idmat
    group by idelv, idmat
    bon après il faudrai déterminer un peu mieux cette notion de note d'appréciation, il faudrai développer le sujet sur le forum modélisation pour mieux cadrer la chose.

  8. #8
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    ce n'est pas le fait que le MLD soit pas terrible qui empêchera quoi que ce soit, mais cela dit plutôt que de dire "je m'en fous", il serait intelligent de corriger ça maintenant.

Discussions similaires

  1. Liste élèves non notés dans une matière donnée
    Par devman2011 dans le forum Modélisation
    Réponses: 7
    Dernier message: 31/03/2012, 03h23
  2. Réponses: 2
    Dernier message: 11/05/2009, 09h36
  3. Récupérer des lignes non enregistrées dans une table
    Par leddy dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/04/2008, 15h09
  4. Liste des dates se trouvant dans une période
    Par mooh91 dans le forum Access
    Réponses: 1
    Dernier message: 17/09/2006, 00h46
  5. récupération des id non présente dans une CIF
    Par Zen_Fou dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/04/2006, 12h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo