IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Base de données Tennis [AC-2010]


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 21
    Points : 18
    Points
    18
    Par défaut Base de données Tennis
    Bonsoir,
    J'aurai aimé votre aide car j'ai quelques problèmes par rapport à un exercice où je dois effectuer des requêtes SQL.

    On considère une base de données Tennis qui a la tête suivante (les clés primaires sont en gras) :
    Joueur(NuJoueur,Nom,Prenom,AnNais,Nationalite)
    Rencontre(NuGagnant,NuPerdant,LieuTournoi,Annee,Score)
    Gain(NuJoueur,LieuTournoi,Annee,Prime,Sponsor)

    Je n'arrive pas à faire les requêtes suivantes :

    (i) Nom des joueurs ayant gagné un tournoi OU qui ont touché plus de 500000€ à un tournoi
    (ii) Numéros des joueurs ayant eu exactement deux sponsors

    Voici ce que j'avais écrit sous Access (sans succès malheureusement) :

    Pour la (i) :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCT J.Nom
    FROM Joueur J, Rencontre R
    WHERE J.NuJoueur=R.NuGagnant AND R.NuGagnant NOT IN (SELECT R1.NuPerdant FROM Rencontre R1 WHERE R.Annee=R1.Annee AND R.LieuTournoi=R1.LieuTournoi) UNION (SELECT G.NuJoueur FROM Gain G WHERE G.Prime > 500000) ;

    Et aucune idée pour la (ii)...

    Merci d'avance pour votre aide

    Cordialement,
    HydroFire.

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 600
    Points : 56 698
    Points
    56 698
    Billets dans le blog
    40
    Par défaut
    Bonsoir,

    Citation Envoyé par HydroFire Voir le message
    (i) Nom des joueurs ayant gagné un tournoi OU qui ont touché plus de 500000€ à un tournoi
    Puisque tu connais UNION...
    Nom des joueurs ayant gagné un tournoi
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT NuGagnant FROM Rencontre

    qui ont touché plus de 500000€ à un tournoi
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT NuJoueur FROM Gain WHERE Prime > 500000

    Reste à faire l'UNION (qui va éliminer les doublons) puis faire la jointure avec la table Joueur


    Citation Envoyé par HydroFire Voir le message
    (ii) Numéros des joueurs ayant eu exactement deux sponsors
    Tu regroupes par joueur dans Gain, puis tu rajoutes un critère HAVING count(*)=2.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Bonsoir,
    Merci pour votre réponse !

    Je voudrais bien plus de précisions sur la première requête si possible car Access me dit que j'utilise mal UNION...

    Merci
    HydroFire

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 600
    Points : 56 698
    Points
    56 698
    Billets dans le blog
    40
    Par défaut
    Peux-tu poster le SQL de ta requête UNION qu'on puisse voir le problème ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Vous ne la voyez pas dans le premier message ?

    Il me semble que je l'ai mise dans une balise [CODE]

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 600
    Points : 56 698
    Points
    56 698
    Billets dans le blog
    40
    Par défaut
    ok, je viens de voir qu'il fallait trouver le vainqueur d'un tournoi en cherchant dans les rencontres celui qui a gagné ses rencontres sans en avoir perdu une... Un peu curieux comme modélisation (la clé primaire sur NuPerdant,LieuTournoi,Annee), mais bon...


    Pour trouver les vainqueurs de tournoi, essaie plutôt avec NOT EXISTS :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT R.NuGagnant FROM Rencontre R
    WHERE NOT EXISTS (
        SELECT R1.NuPerdant FROM Rencontre R1
        WHERE R1.NuPerdant=R.NuGagnant
            and R1.LieuTournoi=R.LieuTournoi
            and R1.Annee=R.annee )

    Ensuite tu fais l'UNION :
    (SELECT R1.NuPerdant as Nujoueur et bla bla de la requête précédente) UNION (SELECT NuJoueur bla bla joueur avec gain>500000 FROM ...)

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Merci pour ta réponse.

    Par contre, je t'avoue que je n'ai pas trop compris dans quel ordre je dois mettre tout ça ^^'

    Désolé de t'embêter :/

  8. #8
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 600
    Points : 56 698
    Points
    56 698
    Billets dans le blog
    40
    Par défaut
    Décompose ton problème en sous-requêtes et aide-toi des assistants Access. C'est comme ça qu'on apprend SQL avec Access, on décompose en requêtes simples construites avec les assistants puis on bascule en "mode SQL" pour comprendre la syntaxe.

    Tu fais une première requête R_VainqueursTournois avec NOT EXISTS, puis une deuxième R_GainsSuperieurs5000000, une troisième R_Union faisant l'UNION des deux précédentes et enfin une dernière R_final qui reprend la table Joueur et R_Union pour ramener le nom des joueurs. Access permet de faire des requêtes avec des tables mais aussi avec d'autres requêtes

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème Base de données et CRecordSet
    Par LE CHAKAL dans le forum MFC
    Réponses: 3
    Dernier message: 20/08/2002, 11h59
  2. connexion base de donné
    Par saidi dans le forum MFC
    Réponses: 3
    Dernier message: 07/08/2002, 22h22
  3. [Concept] Stabilité d'une base de donnée
    Par lassmust dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 03/07/2002, 16h16
  4. Bases de données
    Par dev dans le forum C++Builder
    Réponses: 4
    Dernier message: 01/07/2002, 22h55
  5. associer une base de données(access) a un dbgrid
    Par ange1708 dans le forum MFC
    Réponses: 3
    Dernier message: 11/06/2002, 12h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo