Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2686 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  (SQL] AIde pour requète

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

(SQL] AIde pour requète

n°2243109
seyrinian
Posté le 16-11-2014 à 20:30:07  profilanswer
 

Bonjour, je suis étudiant en informatique. J'ai un problème pour un exercice de BDD.  
Je vous présente rapidement le propos, je possède:
Une table étudiants contenant le numéro,le nom et prénom de l'étudiant
Une table avoir_note contenant le numéro étudiant,les numéros d'épreuves et les note en fonction du numéro d'étudiant et du numéro d'épreuve.

 
La question est d'afficher le nom des étudiants qui ont ) l'épreuve 4 une note supérieur à celle obtenue par Dupont Luc à l'épreuve 4.
 
J'ai réalisé la requète suivante:
 
select E.nometu,E.prenometu, A.note from etudiants as E, avoir_note as A where (note>(select A.note from etudiants as E, avoir_note as A where (E.nometu='dupont') and (E.prenometu='luc') and (E.numetu=A.numetu) and (numepr=4)));
 
seulement elle n'affiche pas les résultats corrects. J'obtiens le résultat affiché en dessous alors que la réponse devrait contenir 4 ligne seulement. J'ai du mal écrire la requète. Pourriez-vous m'aider svp?  
 
Merci
 
nometu | prenometu | note
-------------+-----------+------
roblin | lea | 15
macarthur | leon | 15
minol | luc | 15
bagnole | sophie | 15
bury | marc | 15
vendraux | marc | 15
vendermaele | helene | 15
besson | loic | 15
godart | jean-paul | 15
beaux | marie | 15
turini | elsa | 15
torelle | elise | 15
pharis | pierre | 15
ephyre | luc | 15
leclercq | jules | 15
dupont | luc | 15
marke | loic | 15
dewa | leon | 15
roblin | lea | 11
macarthur | leon | 11
minol | luc | 11
bagnole | sophie | 11
SUITE

mood
Publicité
Posté le 16-11-2014 à 20:30:07  profilanswer
 

n°2243120
olivthill
Posté le 17-11-2014 à 00:39:50  profilanswer
 

Il faudrait étaler la requête sur plusieurs lignes, avec des indentations. Ca ne pose pas de problème pour le résultat, mais ça en pose pour la lecture du programme par un collègue.
 
Il y a trop de parenthèses. Ca ne pose pas de problème pour le résultat, mais ça en pose pour la lecture du programme par un collègue.
 
Donc, après reformatage, on obtient ceci qui est beaucoup plus lisible :
 

select
    E.nometu,
    E.prenometu,
    A.note
from
    etudiants as E,
    avoir_note as A
where
    note >
         (select
              A.note
          from
              etudiants as E,
              avoir_note as A
          where
              E.nometu = 'dupont'
          and E.prenometu = 'luc'
          and E.numetu = A.numetu
          and numepr = 4
         );  

 
Ce n'est pas terrible d'utiliser les mêmes alias (A et E) dans la sous-requêtes et dans la requête. Il y a un risque de confusion.
 
Il manque une jointure entre A et E dans le select principal. Il y en a une qui est faite, mais uniquement dans le sous-select.
 
Il manque le test sur l'état nul d'une colonne, mais je ne sais pas si une colonne pourrait avoir un état nul.
 

n°2243124
seyrinian
Posté le 17-11-2014 à 01:17:38  profilanswer
 

Okmerci, je tacherai de mieux présenter la requête.  
 
Alors j'ai modifier la requête en mettant des alias différent mais ça ne change rien malheureusement. J'ai aussi rajouté la jointure dans le select principalj 'obtiens le résultat suivant (qui n'est pas encore correct, il faut 4 lignes en réponse)
 
Je n'ai pas bien comprisde quoi tu parles avec l'état nul d'une colonne...
 
 
Merci pour la réponse, j'ai testé la commande malheuresement la réponse donne ceci, ce qui n'est toujours pas les 4 lignes recherchées^^
Par curiosité comment utiliserais tu les join, j'ai vu ça en cours mais je ne saisis pas bien comment l'utiliser. Sinon grâce à ta commande la réponse semble tout de même se préciser, mais j'avoue être perdu, j'ai du mal à réfléchir à d'autres possibilitées.
   nometu    | prenometu | note
-------------+-----------+------
 roblin      | lea       |   15
 bagnole     | sophie    |   11
 bury        | marc      |   15
 vendraux    | marc      |   16
 dewa        | leon      |   11
 roblin      | lea       |   12
 macarthur   | leon      |   12
 bagnole     | sophie    |   15
 vendraux    | marc      |   11
 vendermaele | helene    |   13
 marke       | loic      |   19
 godart      | jean-paul |   14
 beaux       | marie     |   14
 turini      | elsa      |   11
 ephyre      | luc       |   20
 leclercq    | jules     |   12
 dupont      | luc       |   11
 godart      | jean-paul |   11
 beaux       | marie     |   12
 torelle     | elise     |   20
 pharis      | pierre    |   12
(21 lignes)


Message édité par seyrinian le 17-11-2014 à 01:18:02
n°2243126
olivthill
Posté le 17-11-2014 à 02:20:37  profilanswer
 

En relisant l'énoncé, je remarque la condition "étudiants qui ont ) l'épreuve 4", avec la parenthèse qui est probablement un "à". Or cette condition est exprimée dans le cas du sous-sélect, pour Luc Dupont, mais pas pour les autres étudiants.
 
Ensuite, dans les résultats je vois deux fois "roblin" par exemple, ce qui semble bizarre. En relisant la question, je m'aperçois qu'il est demandé une liste de noms et c'est tout. On ne demande pas les notes qu'ont ces étudiants. Par exemple, Roblin a eu une fois 15 et une fois 12, mais les notes ne sont pas demandées.
 
L'état nul, que l'on appelle aussi "valeur nulle" est un concept que vous n'avez peut-être pas encore étudié. En théorie, si la base de données est bien conçue (selon les règles de normalisation de Codd que je cite parce qu'elles sont très intéressantes et importantes, mais que votre professeur ne connait peut-être pas), alors les champs sont toujours remplis avec des données. Mais en pratique, il arrive assez souvent qu'un champ ne soit pas rempli, parce qu'il est considéré comme facultatif. Si Bury ne participe pas à l'épreuve 4, il n'aura pas de note. Donc, il faudrait prévoir ce cas, et donc faire un test pour ne sélectionner que les notes non nulles, tant pour les étudiants, que pour Dupont, qui lui aussi peut avoir manqué l'épreuve 4.
 
Je laisse d'autres personnes répondre pour la syntaxe avec join parce que je ne suis pas un spécialiste de ça.


Message édité par olivthill le 17-11-2014 à 02:21:51
n°2243227
gpl73
Posté le 17-11-2014 à 22:15:22  profilanswer
 

seyrinian :  
dans les requetes proposées tu ne fais pas de sélection sur l'épreuve 4
tu remontes les enregistrements des étudiants qui ont une note supérieure à celle de dupont à l'épreuve 4 mais pas pour l'épreuve 4  uniquement...
 
il te reste à ajouter dans ta clause where cette condition...
ou un truc comme ça :
select  
    a.nometu,  
    a.prenometu,  
    b.note  
from etudiants as a
inner join  avoir_note as b  
on
a.id_étudiant = b.id_etudiant
 
where  
b.numepr  = 4 and   and
b.note >  
         (select  
              y.note  
          from  
              from etudiants as x
inner join  avoir_note as y  
on
x.id_étudiant = y.id_etudiant          
where  
              x.nometu = 'Dupont'  
          and x.prenometu = 'Luc'  
          and y.numepr = 4  
         );  
Attention des deux champs nom et prénom sont keysensif ... la requête de olivthill remonte rien :)
 
Qu'est ce qui se passe si ton Dupont a plusieurs notes dans ta matiere 4? il faut alors passer par un min ou un max et tu mets un groupe by à la fin de ta sous requête...


Message édité par gpl73 le 17-11-2014 à 22:20:15

---------------
mieux vaut être un con au chaud, qu'un con gelé lol

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  (SQL] AIde pour requète

 

Sujets relatifs
[PL SQL] Aide sur requeteAide pour requete SQL
[SQL] Aide requête SQL Access 2010aide requête SQL : jointure tables 0-n
[Résolu] aide requête SQL: tri par date desc avec date "nulle" en 1er[Besoin d'aide]: php dans requête SQL qui ne fonctionne pas
Aide sur requête SQL[SQL] Aide à la réalisation d'une simple requête update
besoin d'aide (avant 15h :/) requete SQL compliquéeAIDE requete SQL
Plus de sujets relatifs à : (SQL] AIde pour requète


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR