|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||||||||||
|
françoi dominique Inscription : novembre 2010 Messages : 28 ![]() |
Bonjour,
Etant en train d'apprendre le SQL , j'ai un petit exercice à faire. Il y'a un certain nombre de requêtes à écrire, j'ai essayé d'en écrire certaines , il y en a d'autres que je n'ai pas su faire. Etant débutante j'aurais besoin d'un petit coup de pouce de votre part. Voici l'exercice en question avec mes tentatives: PILOTE (idpilote,nom,prénom,dateDeNaissance,idPays) idPilote:clé primaire idPays:Clé étrangère en référence à idPays de PAYS PAYS (idpays,nompays) idPays:Clé primaire COURSE (dateCourse ,idPays) datecourse :Clé primaire CLASSEMENT (idPilote,dateCourse,positionDep,positionArr) idPilote,dateCours:Clé primaire idPilote :clé étrangère en référence à idPilote de PILOTE) dateCourse :Clé étrangère en référence à dateCourse de COURSE ECURIE (idEcurie,nomEcurie,dateCreation) idEcurie :Clé primaire ENGAGER (idEcurie,annee,idPilote) idEcurie,annee,idPilote:Clé primaire idEcurie:Clé étrangère en réfénce à idEcurie de ECURIE idPilote:Clé étangère en référence à idPilote de PILOTE Indications: positionDep:Correspond à la position sur la grille de départ d'un pilote. positionArr:Correspond à la position d'arrivée d'un pilote. Remarque:Lorsqu'un pilote ne termine pas une course (abandon,accident,disqualification,...) aucune valeur n'est saisie dans positionArr. Ecrire les requêtes suivantes: Requête 1: donner la liste des pilotes (noms,prénoms) en commençant par le plus jeune. Requête 2: Combien de courses a remporté le pilote "Jean ALESI" dans la carrière ? Code :
Quel est le meilleur résultat au palmarès d'un pilote Suisse? Code :
Combien d'hymnes nationaux différents ont déjà été joués au total dans l'histoire des grands prix? Requête 5: donner la liste des écuries (noms) et des pilotes (noms et prénoms) engagés en 2010. Code :
donner le classement (positions,noms et prénoms des pilotes) de la dernière course (en commençant par le vainqueur bien évidemment). Code :
donner la liste des pilotes qui ont plus de 3 courses non terminées (abandon,accident,disqualification,...) en 2010,vous afficherez également le nombre de courses non terminées. Code :
donner l'écurie qui a le plus de victoires à son palmarès (nom et nombre). Code :
Le 09/05/2010 il y a le grand prix d'Espagne. Mettre à jour la base pour prendre en compte cette information. je vous remercie pour votre aide |
||||||||||||
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 12 080 ![]() |
1) rajouter un ORDER BY
2) totalement faux. Vous obtiendrez toujours 1. Il faut faire une jointure de la table des pilotes avec les tables CLASSEMENT et COURSE. De plus il faut un filtre WHERE sur les colonnes nom et prenom avec les valeurs Jean et ALESI. Enfin les chaines de caractères dans SQL sont délimitées par des apostrophes et non des guillemets ! 3) totalement faux. Il faut faire une sous requête en imbriquant les agrégats COUNT et MAX 4) totalement faux. Il faut faire un COUNT(DISTINCT ....) Bref, vous avez du manqué nombre de cours.... Êtes vous fait pour l'informatique ???? SQL est un véritable langage. Mon site web comme mon livre peuvent vous aider à l'apprendre ! A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
10
|
|
|
#3 | ||
|
Membre expérimenté
![]() Inscription : octobre 2002 Messages : 671 ![]() |
Bonjour,
2/Ce n'est pas que vous obtiendrez un, c'est surtout une erreur car il n'y a pas de colonne course dans la table pilote, de plus le fait de mettre un alias "Jean Alesi" sur la table pilote ne filtre pas, il faut donc une jointure. Code :
Il faut décomposer Fait d'abord une requête pour avoir le résultat au palmarès de tous les pilote, puis tu filtre sur les pilotes suisses, puis tu prend le max du résultat. Bon courage Soazig |
||
|
|
00
|
|
|
#4 |
|
françoi dominique Inscription : novembre 2010 Messages : 28 ![]() |
3/
|
|
|
00
|
|
|
#5 |
|
Membre expérimenté
![]() Inscription : octobre 2002 Messages : 671 ![]() |
Bonjour,
Pour le 3 la première question à se poser est qu'est-ce que le palmares. Ensuite ce que tu nous montres ne sert à rien, tu n'as même pas le pilote qui a eu ce résultat. Tu ne filtres pas sur les pilotes suisses, comme je l'ai suggéré Tu ne prends pas le max . Si tu veux de l'aide, aide-toi d'abord. Là j'ai l'impression que tu veux qu'on te fasse ton devoir, désolée , c'est ton devoir, on peut t'aider à comprendre comment le faire, si on voit que tu essaie, mais je ne ferai pas ton devoir. A+ Soazig |
|
|
10
|
|
|
#6 | ||||||||||||||||||||
![]() ![]() |
Reprenons tes essais de requête dans l'ordre...
Citation:
Il n'y a même pas leur âge dans la réponse ! Citation:
Pour ne compter que les courses de Jean Alesi, il restreindre la réponse au pilote dont le prénom est 'Jean' et le nom 'Alesi'. Tu comptes les courses mais on te demande de compter ses victoires ! Citation:
Ensuite on ne te demande pas la date d'une course ou le nom d'un pays mais le meilleur résultat d'un pilote suisse ! Après tu changes complètement ta requête : Citation:
1, 2, 3, 4, 5, 6, 7... Passionnant non ? Ça correspond à ce qui est demandé ? Citation:
Tu fais une jointure entre les tables 'écurie' et 'pilote' en utilisant idpilote mais idpilote ne figure pas dans la table 'écurie' ! Il te manque une jointure avec une autre table pour que tout ceci soit relié ! Citation:
Sélectionner la position, le nom et le prénom du classement où la date de la course. La phrase est-elle finie ? Le classement a t-il un nom et un prénom ? 'position' est-il le bon nom de la colonne ? Autrement dit cette colonne ainsi appelée figure t-elle dans la table Classement ? Citation:
Ta requête non plus n'est pas terminée ! Citation:
Là encore, la phrase de ta requête n'est pas terminée : "... où la course..." Je ne sais pas si cet exercice est une tentative d'effort personnel ou un travail scolaire mais pour le moment ta copie vaut un beau zéro !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise la suite Linux Mageïa ! |
||||||||||||||||||||
|
20
|
|
|
#7 | ||
|
Invité de passage
![]() Inscription : février 2012 Messages : 2 ![]() |
Salut à tous,
Pour la 8ème requête je suis complètement bloquée, si vous avez un moment ça serait très gentil... Ce que j'ai compris : c'est qu'il faut que je trouve les pilotes qui ont le plus de victoires, après ça je les relient à l'écurie en question. J'ai tenté ça : Code :
Mais quand j'essai de finir la requête et de renvoyer vers l'écurie qui correspond au/x pilote/s on me dit erreur de syntaxe. Code :
SELECT nomecurie FROM ecurie JOIN engager USING (idecurie) JOIN classement USING (idpilote) WHERE idpilote = (la requête au dessus) |
||
|
|
00
|
|
|
#8 | |||||||||
![]() ![]() |
Bonjour.
Tu as le même exercice à faire un an après dominiqu ? Reprenons la question : Citation:
Citation:
Citation:
Tu as compris qu'il ne faut conserver que les pilotes classés premier grâce à la restriction WHERE positionarr=1 mais pourquoi additionner ces positions alors qu'il suffit de les compter ? Tu me diras que ça reviens au même mais ce n'est pas sémantiquement ce qui t'es demandé. Mais la clause HAVING n'est pas bonne. D'ailleurs, tu dis toi-même que tu as tous les pilotes. Donc cette requête te donne le nombre de victoires par pilote arrivé premier : Code :
Code :
À tester.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise la suite Linux Mageïa ! |
|||||||||
|
00
|
|
|
#9 | ||||||
|
Invité de passage
![]() Inscription : février 2012 Messages : 2 ![]() |
Merci beaucoup pour ta réponse,
Oui le CNED n'évolue pas très rapidement. Citation:
Citation:
Tu as déclarer une jointure avec le résultat d'une sous requête c'est bien ça? pour moi après chaque JOIN je dois mettre une table mais là je vois que c'est suivi par la requête établie pour connaitre le nombre de victoire par pilote. J'ai une autre question, (bête mais ça me chiffonne) pourquoi vous donnez des alias aux tables? j'ai vu ça dans le cours mais je ne comprends pas l'utilité. |
||||||
|
|
00
|
|
|
#10 | |||
![]() ![]() |
Citation:
Citation:
Citation:
- de faciliter l'écriture des requête en évitant de répéter les noms des tables qui sont parfois longs ; - de faciliter la lecture de la requête car il y a moins de texte ; - de distinguer éventuellement deux colonnes portant le même nom dans deux tables différentes ; - d'utiliser plusieurs fois la même table dans une seule requête, par exemple lors d'uen auto-jointure.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise la suite Linux Mageïa ! |
|||
|
00
|
|
|
#11 | ||
|
Invité de passage
![]() Inscription : novembre 2012 Messages : 4 ![]() |
Code :
Qu'en pensez-vous ? |
||
|
|
02
|
|
|
#12 |
![]() ![]() |
J'en pense que c'est complètement faux !
![]() 1) La partie SELECT de la requête signifie : "Sélectionne la colonne "nom" en la rebaptisant "ALESI", la colonne "prenom" en la rebaptisant "JEAN" et la colonne "positionarr". Si tu ne veux sélectionner que les lignes concernant Jean Alesi, il faut placer les conditions de restriction sur le nom et le prénom dans la partie WHERE. 2) Il manque la condition de jointure.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise la suite Linux Mageïa ! |
|
00
|
|
|
#13 | |||
|
Invité de passage
![]() Inscription : novembre 2012 Messages : 4 ![]() |
Citation:
Code :
|
|||
|
|
00
|
|
|
#14 | ||
![]() ![]() |
Citation:
![]() 2) La condition WHERE ALESI, Jean ne signifie rien ! ![]() Citation:
Relis toute la discussion et tu trouveras des pistes pour mieux faire cet exercice. Il y a même la solution à la question 2. Après, tu as les cours de SQLPro pour t'aider efficacement.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise la suite Linux Mageïa ! |
||
|
00
|
|
|
#15 | |||
|
Invité de passage
![]() Inscription : novembre 2012 Messages : 4 ![]() |
Citation:
D'accord je voie donc pour la condition je peux faire : Code :
Effectivement je suis au CNED. Merci |
|||
|
|
00
|
|
|
#16 | ||
![]() ![]() |
1) Il faut séparer les conditions de restriction par AND ou OR.
Dans le cas présent, tu veux que le nom soit "ALESI" et le prénom "JEAN". Attention, à l'avenir, quand il y a plus de 2 conditions avec un mélange de OR et de AND ! Il faut réfléchir et mettre des parenthèses aux endroits appropriés en se souvenant de ses cours de logique. (A AND B) OR C n'est pas pareil que A AND (B OR C) ! En SQL, le AND est prioritaire sur le OR. 2) La structure générale d'une jointure : Code :
Encore une fois, relis les premiers messages de la discussion et tu auras des exemples.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise la suite Linux Mageïa ! |
||
|
10
|
|
|
#17 | ||
|
Invité de passage
![]() Inscription : novembre 2012 Messages : 4 ![]() |
D'accord je comprend mieux donc pour ma condition
Code :
Donc JOIN pilote ON classement ? Merci de votre aide. |
||
|
|
01
|
|
|
#18 | ||||||||
![]() ![]() |
Tu prends le temps de réfléchir avant de proposer une nouvelle réponse ?
Citation:
Encore une fois (c'est déjà la troisième !) regarde les premiers messages de cette discussion ! Code :
"où le nom est égal à ALESI et le prénom est égal à Jean." En SQL, les valeurs textuelles s'entourent d'apostrophes, pas de guillemets ! C'est dit par SQLPro dans la première réponse ! Citation:
Code :
"de la table pilote (d'alias p) jointe à la table classement (d'alias c) sur l'égalité des colonnes idPilote des deux tables." Prends le temps de lire les cours, les liens qu'on te donne. Tu as le temps puisque tu suis les cours du CNED ! Il vaut mieux bien assimiler les notions les unes après les autres que de vouloir se précipiter et envoyer un devoir complètement faux à la correction !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise la suite Linux Mageïa ! |
||||||||
|
20
|
|
|
#19 | |
|
Membre chevronné
![]() |
je vois qu'il y a beaucoup d'étudiants qui interviennent dans cette discussion.
en grosso modo, ils ont la volenté d'apprendre les initiatives. même, ils le principe le SQL mais ils leur manquent le syntaxe de SQL. par exemple, dominiqu a mis Citation:
pour info. on peut donner des alias aux colonnes et tables comme Etudiants!! quelles sont vos évolutions?
__________________
d'avoir Pensé à voter positivement pour ceux qui vous ont aidés.
|
|
|
|
01
|
|
|
#20 | ||
|
Invité régulier
![]() Inscription : février 2013 Messages : 6 ![]() |
Hello, désolé pour le déterrage de topic, j'espère que quelqu'un pourra m'apporter de l'aide.
Après avoir lu tout le fil de discussion, certaines choses sont floues pour moi. Pour la requête 3, vous parlez de requête imbriqué, or il me semble l'avoir fait avec seulement 3 natural join plus la restriction du pays 'Suisse' comme ceci Code :
Thoughts ? |
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com