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

  FORUM HardWare.fr
  Emploi & Etudes
  Aide aux devoirs

  Problème avec requêtes SQL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème avec requêtes SQL

n°2610683
doh-ko
Posté le 12-02-2010 à 13:25:11  profilanswer
 

Bonjour à tous,
 
Voilà je suis en cours du soir au CNAM et je vais bientôt passer un examen sur les SGBD. Pour cela je m'entraine avec avec pas mal d'annales.
 
J'ai quelques souci avec deux requêtes :
 
1)Voilà l'énoncé du premier exercice:
 
Bateau (Num_Bat, NomB, Sponsor) ;
Course (Num_Cou, NomC, Date, Prix) ;
Resultat (Num_Bat, Num_Cou, Score) ;
 
Voici la question : Donner pour chaque nom de bateau, le nombre de ses participations à une course ?
 
Correction :
 
SELECT NomB, Count(*)
FROM Bateau B, Course C
WHERE B.Num_Bat = C.Num_Bat
GROUP BY NomB ;
 
Je ne comprend pas pourquoi il y a une jointure "B.Num_Bat = C.Num_Bat" alors que Num_Bat n'apparait même pas dans la table Course
 
Moi j'aurais mis cela :
 
SELECT NomB, Count(*)
FROM Bateau B, Course C, Resultat R
WHERE B.Num_Bat = R.Num_Bat
AND R.Num_Cou = C.Num_Cou
GROUP BY NomB ;
 
Please quelqu'un peu m'expliquer pourquoi j'ai faux ?  :??:  
 
 
2)Voilà l'énoncé du deuxième exercice:
 
AEROPORTS (Code, Nom, Pays)
AVIONS (Ref, Type, Compagnie, NB_Passagers)
VOLS (Ref, Date_Depart, Depart, Arrivée, Date_Arrivée, Distance)
VOYAGEURS (ref_Client, Nom, Prenom, Nationalité, Kilométrage)
RESERVATIONS (ref, Date_Depart, Ref_client, Classe)
 
Voici ce que l'on nous demande : Donnez les pays de destination pour tous les départs de l'aéroports de code 'CDG' le 14 juillet 2008 ?
 
Voici la correction que l'on nous donne :
 
SELECT A.Pays
FROM VOLS V, AEROPORTS A,
WHERE V.Arrivee=A.Code
AND V.Depart='CDG'
AND V.Date_Depart>='2008-07-14 00:00:00'
AND V.Date Depart <'2008-07-15 00:00:00';
 
Ce que je ne comprend pas c'est comment on peu faire une jointure comme "V.Arrivee=A.Code" !! Je pensais que la jointure était uniquement entre deux attributs commun à deux table !!! Est-ce que quelqu'un peu m'expliquer  
 
D'avance merci pour vos réponses et merci d'avoir pris le temps de m'expliquer  ;)

Message cité 2 fois
Message édité par doh-ko le 12-02-2010 à 19:06:31
mood
Publicité
Posté le 12-02-2010 à 13:25:11  profilanswer
 

n°2610686
double cli​c
Why so serious?
Posté le 12-02-2010 à 13:28:47  profilanswer
 

tu trouveras ptet des réponses ici, mais à mon avis tu aurais plus de chances d'avoir une réponse rapide dans la cat Programmation :o


---------------
Tell me why all the clowns have gone.
n°2610687
doh-ko
Posté le 12-02-2010 à 13:38:37  profilanswer
 

Merci je vais essayer de la poser la-bas

n°2610688
seb0uil
Posté le 12-02-2010 à 13:42:07  profilanswer
 

doh-ko a écrit :

Correction :
 
SELECT NomB, Count(*)
FROM Bateau B, Course C
WHERE B.Num_Bat = C.Num_Bat
GROUP BY NomB ;
 
Je ne comprend pas pourquoi il y a une jointure "B.Num_Bat = C.Num_Bat" alors que Num_Bat n'apparait même pas dans la table Course


Effectivement, cette requete ne peut pas fonctionner...
 

doh-ko a écrit :


Moi j'aurais mis cela :
 
SELECT NomB, Count(*)
FROM Bateau B, Course C, Resultat R
WHERE B.Num_Bat = R.Num_Bat
AND R.Num_Cou = C.Num_Cou
GROUP BY NomB ;
 
Please quelqu'un peu m'expliquer pourquoi j'ai faux ?  :??:  
 


Comme ca, ca m'a pas l'air mal, as tu essayer ta requete ? Pkoi penses tu avoir faux ?
 

doh-ko a écrit :


Ce que je ne comprend pas c'est comment on peu faire une jointure comme "V.Arrivee=A.Code" !! Je pensais que la jointure était uniquement entre deux attributs commun à deux table !!! Est-ce que quelqu'un peu m'expliquer  
 
D'avance merci pour vos réponses et merci d'avoir pris le temps de m'expliquer  ;)  


 
Ben la jointure se fait bien sur l'attribut du code de l'aeroport, seulement dans une table il s'appelle code, dans la seconde, c'est Arrivee. Après il faut qu'il ait le même type, mais pas forcément le même nom.
 
sur cette requete, j'aurais fais un select distinct A.Pays  pour eviter les doublons du aux différents aéroports dans le même pays

n°2610693
john clees​e
Posté le 12-02-2010 à 13:46:35  profilanswer
 

La réponse correcte pour le premier exo me semble être la tienne.
 
Pour le 2eme, celle du prof est bonne. On part du postulat qu'un vol a un aéroport de départ et un d'arrivée. Donc, plutot que d'avoir le nom de l'aeroport de depart et celui d'arrivée dans la table VOLS, on stocke les codes de ces deux aéroports (sinon, que se passerait-il si l'aéroport de Laon, par exemple, était renommé en aéroport de Chambry ?).
 
 
Donc les colonnes Depart et Arrivée de VOLS correspondent à des codes aéroports (clés étrangères vers la table AEROPORTS).
 

n°2610696
john clees​e
Posté le 12-02-2010 à 13:52:05  profilanswer
 

seb0uil a écrit :


Comme ca, ca m'a pas l'air mal, as tu essayer ta requete ? Pkoi penses tu avoir faux ?
 


Je pense qu'en effet, le mieux est de t'installer un SGBD gratuit (mysql, par exemple), de te créer les tables, de les peupler avec des données puis de tester toi-même tes requêtes. Et de faire mumuse même en t'inventant des énoncés "un peu plus tordus".

n°2610698
seb0uil
Posté le 12-02-2010 à 13:53:46  profilanswer
 

doh-ko a écrit :


Moi j'aurais mis cela :
 
SELECT NomB, NomC, Count(*)
FROM Bateau B, Course C, Resultat R
WHERE B.Num_Bat = R.Num_Bat
AND R.Num_Cou = C.Num_Cou
GROUP BY NomB, NomC ;
 


 
En relisant, et pour coller un peu plus a la question, j'imagine qu'il faut indiquer pour chaque bateau, son nom, et son nombre de participation aux différentes courses, en séparant les courses, et non pas son nombre de participation totale toutes courses confondues

n°2610721
crashsyste​m
Posté le 12-02-2010 à 14:20:22  profilanswer
 

Dans la 1, il doit y avoir une erreur dans les tables, ca serait plutot:
FROM Bateau B, Resultat C comme on veut juste le nombre de participation a la course, si il y a un resultat c'est qu'il y participation.
Ta reponse est correcte mais il y a une jointure inutile alors c'est moins optimise, ca passe pour des petites tables mais ca coute cher en cpu sur des tres grosses.
 
La 2, la reponse a ete donnee.

n°2610925
doh-ko
Posté le 12-02-2010 à 19:33:03  profilanswer
 

Merci à tous pour vos réponses  
 
Crashsystem> Effectivement si je pense aussi qu'on pourrait se passer de la table Course et donc de la jointure "R.Num_Cou = C.Num_Cou " mais si j'ai mis ça s'était pour coller un peu plus à la correction car je me demandais vraiment pour il pouvait y avoir une jointure pareil "B.Num_Bat = C.Num_Bat "
 
John cleese> Tu voulais peu être plutôt mettre ça ou j'ai rien compris ?

Citation :

Pour le 2eme, celle du prof est bonne. On part du postulat qu'un vol a un aéroport de départ et un d'arrivée. Donc, plutot que d'avoir le nom de l'aeroport de depart et celui d'arrivée dans la table AEROPORTS, on stocke les codes de ces deux aéroports (sinon, que se passerait-il si l'aéroport de Laon, par exemple, était renommé en aéroport de Chambry ?).


 
SebOuil et John cleese> Donc en fait ce qu'il fallait comprendre c'est que les valeurs des attributs "Code" et "Arrivée" sont les même !!! Je comprend mieux effectivement la jointure "V.Arrivee=A.Code" mais franchement sans avoir un exemple de valeurs sous les yeux je ne vois pas comment je pouvais deviner avec l'ennoncé !!! Un peu tendu comme piège
 
SebOuil>Effectivement on pourrait faire ça serait pas mal mais là je pense que ce n'était pas trop demandé mais du coup la proposition de Crashsystem ne serait plus bonne
 
En tout cas merci à vous les gas, j'ai des réponses 10 fois plus rapidement que sur le forum pleiad  ;)


Message édité par doh-ko le 12-02-2010 à 19:41:23

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Emploi & Etudes
  Aide aux devoirs

  Problème avec requêtes SQL

 

Sujets relatifs
Probleme d'ordre budgetaireDBA SQL Server et Microsoft BI
[CDI] Développeur .NET, SQL Server, Oracle (FACILITY Télécom)problème de factorisation niveaux 3eme
Gros problème avec un diplôme déclaré et maintenant demandé (help)probléme exo de chime Ts
probléme exercice d'économétrieProblème en recherche de stage bac+5
problème mathématique spécialitéproblème mathématiques
Plus de sujets relatifs à : Problème avec requêtes SQL


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