SQL - Besoin d'aide.

Résolu
Dimistik Messages postés 51 Date d'inscription   Statut Membre Dernière intervention   -  
Dimistik Messages postés 51 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je suis actuellement en BTS Informatique de Gestion et nous apprenons à nous servir d'une base de données sous PhpMyAdmin. Pour l'instant, nous devons simplement faire des requêtes.

J'ai une série de requêtes à faire mais je coince vraiment pour celle là.

Donc voilà le schéma relationnel :

VOL (novol, vildep, vilar, dep-h, dep-mn, ar-h, ar-mn, ch-jour))
PILOTE (nopilot, nom, adresse, sal, comm, embauche)
APPAREIL (code-type, nbplace, désign)
AVION (nuavion, type#, annserv, nom, nbhvol)
AFFECTATION (novol, date-vol, nopilot#, nuavion#, nbpass)


La requête à faire est :

-Donnez les noms des pilotes qui ont piloté tous les avions.


Donc, à mon avis, il faudrait compter le nombre d'avions différents puis compter pour chaque pilote les avions piloté (mais en excluant les doubles) et voir si ces deux résultats sont égaux.

Seulement, je sais pas trop comment m'y prendre là ^^

D'abord, est-ce que mon raisonnement est le bon? Si oui, pouvez vous m'aider à faire cette requête?

Merci d'avance à toute personne qui m'aide.
A voir également:

7 réponses

francis
 
Salut,
a mon avis faut que t'utilise les fonctions distinct() et count(), pour compter si ça équivaut au count des avions
0
jeangilles Messages postés 816 Date d'inscription   Statut Membre Dernière intervention   186
 
Selon ton raisonnement, ca doit donner qqchose comme ceci :

select DISTINCT(p.nopilot) from PILOTE p, AFFECTATION af, AVION av WHERE af.nopilot# = p.nopilot and af.nuavion# = av.nuavion HAVING count(av.nuavion) >= (select count(*) FROM AVION)
0
Dimistik Messages postés 51 Date d'inscription   Statut Membre Dernière intervention  
 
Yahoo, ca fonctionne !

SELECT p.nopilot, p.nom
FROM PILOTE p, AFFECTATION af, AVION av 
WHERE af.nopilot = p.nopilot AND af.nuavion = av.nuavion
GROUP BY p.nopilot
HAVING COUNT(DISTINCT av.nuavion) >= (SELECT COUNT(nuavion) FROM AVION) ;


Le soucis, c'est que m'a question suivante consiste à faire l'inverse, c'est à dire de donnez les noms de ceux qui n'ont pas piloté tous les avions, donc j'ai simplement remplacé ">=" par "<=" sauf que, dans le cas où un des pilotes n'a jamais piloté, il n'est pas compté et donc il ne s'affiche pas...

Comment remédier à ça?

Merci d'avance, vous m'avez déjà bien aidé !
0
jeangilles Messages postés 816 Date d'inscription   Statut Membre Dernière intervention   186
 
Ben pour faire l'inverse, tu prend tous les pilotes qui ne sont pas dans cette liste ^^


SELECT nopilot, p.nom FROM PILOTE WHERE nopilot NOT IN(
SELECT p.nopilot
FROM PILOTE p, AFFECTATION af, AVION av
WHERE af.nopilot = p.nopilot AND af.nuavion = av.nuavion
GROUP BY p.nopilot
HAVING COUNT(DISTINCT av.nuavion) >= (SELECT COUNT(nuavion) FROM AVION)) ;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Dimistik Messages postés 51 Date d'inscription   Statut Membre Dernière intervention  
 
Ca marche mais c'est un peu barbare car, avec ça, il ne fait qu'afficher le pilote manquant et ne vérifie donc pas si il a conduit tous les avions ou non...Donc dans tous les cas, il va me l'afficher ^^

Mais c'est bien tenté :P
0
jeangilles Messages postés 816 Date d'inscription   Statut Membre Dernière intervention   186
 
"il ne fait qu'afficher le pilote manquant et ne vérifie donc pas si il a conduit tous les avions ou non"

ben si ca le vérifie : si il est pas dans la liste des pilotes qui ont conduit tous les avions, c'est que soit il n'en a conduit aucun, soit il en a conduit quelques uns, mais pas tous ...
0
Dimistik Messages postés 51 Date d'inscription   Statut Membre Dernière intervention  
 
En fait, dans ce cas, je veux voir qui sont ceux qui ont piloté tous les avions.

Mais comme mon pilote n'appartient pas à cette liste (étant donné qu'il n'est même pas compté) il l'affiche...Or, il n'a pas piloté tous les avions !

En gros, faudrait que je fasse une "grosse" requête pour voir les pilotes qui n'ont jamais piloté, puis faire mon autre requête pour les autres pilotes?

Un peu bizarre tout ça !

Bref, dans tous les cas, tu m'as bien aidé, je verrais la suite avec mon prof et j'vous tiendrai au courant !
0