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 -
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 :
La requête à faire est :
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.
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:
- SQL - Besoin d'aide.
- Logiciel sql - Télécharger - Bases de données
- Requete sql pix - Forum PHP
- Additions et multiplication dans des requêtes SQL ✓ - Forum MySQL
- Sql query download - Télécharger - Gestion de données
- Ora-00933: la commande sql ne se termine pas correctement ✓ - Forum Oracle
7 réponses
Salut,
a mon avis faut que t'utilise les fonctions distinct() et count(), pour compter si ça équivaut au count des avions
a mon avis faut que t'utilise les fonctions distinct() et count(), pour compter si ça équivaut au count des avions
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)
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)
Yahoo, ca fonctionne !
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é !
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é !
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)) ;
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)) ;
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
Mais c'est bien tenté :P
"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 ...
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 ...
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 !
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 !