Rechercher : dans
Par :

SQL - Besoin d'aide.

Dernière réponse le 3 jui 2009 à 19:08:09 Dimistik, le 3 jui 2009 à 15:39:40 
 Signaler ce message aux modérateurs

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.
Configuration: Windows Vista
Firefox 3.0.10

Meilleures réponses pour « SQL Besoin d'aide. » dans :
SQL - Création de table Voir Le SQL, comportant un langage de définition de données (LDD), permet de créer des tables. Pour cela, il utilise le couple de mots clés CREATE TABLE. La création de tables Le création de tables se fait à l'aide du couple de mots-clés CREATE...
Le langage SQL Voir Qu'appelle-t-on SQL? SQL (Structured Query Language, traduisez Langage de requêtes structuré) est un langage de définition de données (LDD, ou en anglais DDL Data Definition Language), un langage de manipulation de données (LMD, ou en anglais DML,...
SQL - Tri Voir Tri des résultats Il est possible en SQL d'organiser les résultats grâce à la clause ORDER BY. La clause ORDER BY est suivie des mots clés ASC ou DESC, qui précisent respectivement si le tri se fait de manière croissante (par défaut) ou...
SQL - éviter les doublons dans un SELECT VoirProblème Comment éviter les doublons dans les résultats d'une requête SQL ? Solution Il suffit d'utiliser la clause DISTINCT entre SELECT et les champs. Exemple : SELECT distinct id,nom,prenom FROM matable Plus d'informations ...
Sauvegarde automatique d'une BDD sous SQL EXPRESS 2005 VoirSi vous vous voulez automatiser une sauvegarde d'une base de données sous SQL server express, il existe une solution simple grâce à un fichier .bat. Créez un nouveau fichier texte. Ce fichier doit contenir les informations suivantes: SET...
Gestion des paramètres SQL VoirSQL présente un certain nombre de paramètres au niveau d'Oracle qu'il est possible de visualiser à travers la commande : SHOW ALL Pour modifier la valeur d'un paramètre il suffit d'utiliser la commande : SET NOM_PARAM VALEUR
SQL - Commande SELECT VoirLe langage de manipulation de données Le SQL est à la fois un langage de manipulation de données et un langage de définition de données. Toutefois, la définition de données est l'oeuvre de l'administrateur de la base de données, c'est pourquoi la...
SQL - Jointures VoirExpression des jointures Une jointure (ou θ-jointure) est un produit cartésien de deux tables. On appelle équijointure une θ-jointure dont la qualification est une égalité entre deux colonnes. En SQL, l'expression d'une jointure se...
PL/SQL - Introduction au langage PL/SQL VoirIntroduction au langage PL/SQL Le langage PL/SQL est un langage L4G (entendez par ce terme un langage de quatrième génération), fournissant une interface procédurale au SGBD Oracle. Le langage PL/SQL intègre parfaitement le langage SQL en lui...

1

francis, le 3 jui 2009 à 15:44:20

Salut,
a mon avis faut que t'utilise les fonctions distinct() et count(), pour compter si ça équivaut au count des avions

Répondre à francis

2

jeangilles, le 3 jui 2009 à 16:15:04

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)

Répondre à jeangilles

3

Dimistik, le 3 jui 2009 à 16:57:13

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é !

Répondre à Dimistik

4

jeangilles, le 3 jui 2009 à 17:11:59

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)) ;

Répondre à jeangilles

5

Dimistik, le 3 jui 2009 à 17:35:21

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

Répondre à Dimistik

6

jeangilles, le 3 jui 2009 à 18:22:01

"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 ...

Répondre à jeangilles

7

 Dimistik, le 3 jui 2009 à 19:08:09

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 !

Répondre à Dimistik