Problème avec requêtes SQL - Aide aux devoirs - Emploi & Etudes
Marsh Posté le 12-02-2010 à 13:28:47
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
Marsh Posté le 12-02-2010 à 13:42:07
doh-ko a écrit : Correction : |
Effectivement, cette requete ne peut pas fonctionner...
doh-ko a écrit : |
Comme ca, ca m'a pas l'air mal, as tu essayer ta requete ? Pkoi penses tu avoir faux ?
doh-ko a écrit : |
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
Marsh Posté le 12-02-2010 à 13:46:35
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).
Marsh Posté le 12-02-2010 à 13:52:05
seb0uil a écrit : |
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".
Marsh Posté le 12-02-2010 à 13:53:46
doh-ko a écrit : |
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
Marsh Posté le 12-02-2010 à 14:20:22
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.
Marsh Posté le 12-02-2010 à 19:33:03
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
Marsh Posté le 12-02-2010 à 13:25:11
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 édité par doh-ko le 12-02-2010 à 19:06:31