[Aide compréhension de jointure]

[Aide compréhension de jointure] - SQL/NoSQL - Programmation

Marsh Posté le 23-01-2015 à 16:14:16    

Bonjour,
Je suis actuellement en train d'apprendre le SQL et j'ai un  TP à faire.
Voici la structure de ma base:
 
PILOTE (idPilote, nom, prenom, 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
idPays : Clé étrangère en référence à idPays de PAYS
 
CLASSEMENT (idPilote, dateCourse, positionDep, positionArr)
idPilote, dateCourse : 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érence à idEcurie de ECURIE
idPilote : Clé étrangère en référence à idPilote de PILOTE
 
Je bloque beaucoup sur les jointures, je vois lorsque je dois m'en servir, mais je bloque sur la façon dont je dois le faire et sur la compréhension de celles-ci.
 
En gros, je dois récupérer le nombre de fois où un pilote (ici c'est JEAN ALESI)  est arrivé premier au long de sa carrière.
Je vois donc qu'il faut relier les tables PILOTE et CLASSEMENT par l'idPilote, mais j'ai du mal a voir le reste de la requête, je suis certain qu'il  faut un SELECT COUNT, qu'il faut aussi la condition WHERE nom = ALESI AND prenom= JEAN
 
Si quelqu'un pouvez me filer un petit coup de main sur les jointures et m'expliquer, ca serait sympa !
Merci beaucoup

Reply

Marsh Posté le 23-01-2015 à 16:14:16   

Reply

Marsh Posté le 24-01-2015 à 20:17:40    

Essayes ça :
 
SELECT COUNT(*) AS "Nombre de courses remportées par Jean ALESI"
FROM classement JOIN pilote ON classement.idpilote=pilote.idpilote
WHERE classement.positionarr=1 AND pilote.nom="ALESI" AND pilote.prenom="Jean"
GROUP BY pilote.nom, pilote.prenom;
 
 
J'utilise PGAdminIII.
 
Bon courage

Reply

Marsh Posté le 26-01-2015 à 11:17:46    

Citation :

En gros, je dois récupérer le nombre de fois où un pilote (ici c'est JEAN ALESI)  est arrivé premier au long de sa carrière.


la réponse est facile, c'est 0 :D
 
Ok pour la requête de bianchi69, mais tu peux la raccourcir un peu en utilisant les alias de tables ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 26-01-2015 à 17:58:15    

Alors, désolé de la réponse tardive.
Ma requête donne ceci :  
 
SELECT COUNT (positionArr)
FROM Classement c NATURAL JOIN Pilote p
WHERE nom = "ALESI"
AND prenom = "JEAN"
AND positionArr=1;
 
Le group by de ta requête, est fait pour enlever les doublons à cause du COUNT * ?

Reply

Marsh Posté le 27-01-2015 à 10:43:24    

En quelque sorte mais attention, c'est pas pareil que DISTINCT.
 
Tiens, tout sur le group by : http://cedric-duprez.developpez.co [...] -group-by/


Message édité par rufo le 27-01-2015 à 10:43:34

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 28-01-2015 à 15:28:40    

Merci, sinon ma requête est bonne?


---------------
|i9 13900K | MSI Z690 Tomahawk WIFI DDR4 | 4*16Go G.SKILL Trident Z Neo 3600Mhz C16 | EVGA 3090Ti FTW3 Ultra | DeepCool LT720 | NZXT H7 FLOW|
Reply

Marsh Posté le 28-01-2015 à 15:33:38    

J'aurais plutôt fait :
SELECT p.idPilote, COUNT (positionArr)
FROM Classement c NATURAL JOIN Pilote p
WHERE nom = "ALESI"
AND prenom = "JEAN"
AND positionArr=1
GROUP BY p.idPilote


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed