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

Langage SQL Discussion :

Jointure MultiTable - Ai-je compris ?


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2004
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 306
    Par défaut Jointure MultiTable - Ai-je compris ?
    Bonjour,

    je pense avoir compris le fonctionnement d'une requête de jointure multi-table avec plusieurs join imbriqués.

    Voici mon exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    table t_produit (
       prod_Id integer,
       prod_Libelle varchar(32)
    );
     
    table t_commande (
       cmd_Id integer auto_increment,
       cmd_Date date
    );
     
    table tj_prod_cmd (
       cmd_Id integer,
       prod_Id integer,
       qute integer,
       remise integer
    );
    Si je souhaite sélectionner l'id et le libellé de t_produit et l'id et la date de t_commande, je dois effectuer la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select p.*,c.* from t_produit p
       join tj_prod_cmd pc on p.prod_id=pc.prod_id
       join t_commande c on pc.cmd_id=c.cmd_id
    Je pense que ma requête est bonne.
    Donc je cherche à comprendre le fonctionnement de cette requête, et l'imbrication des join, c'est à dire comment le SGBD fait pour savoir que le deuxième join relie la table t_commande à la table tj_prod_cmd.
    J'en suis arrivé à la conclusion suivante:
    il exécute d'abord cette partie là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select p.*,c.* from t_produit p
       join tj_prod_cmd pc on p.prod_id=pc.prod_id
    et le deuxième join est relié ainsi à la table obtenu

    C bien ça ?

    ++

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 52
    Par défaut
    J'ai jamais vraiment aimer travailler avec des Join, mais tu pourrais faire ca de la facon suivante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT P.PROD_ID, P.PROD_LIBELLE, C.CMD_ID, C.CMD_DATE FROM T_PRODUIT P, T_COMMANDE C, TJ_PROD_CMD J WHERE P.PROD_ID = J.PROD_ID AND C.CMD_ID = J.CMD_ID;
    Ta table TJ_PROD_CMD est la table qui fait le lien entre la table T_COMMANDE et la table T_PRODUIT grâce aux 2 clés étrangères CMD_ID et PROD_ID.

    Donc pour faire tes jointure, tu dois relié la clé primaire de t_commande (cmd_id) au cmd_id de la table tj_prod_cmd, et tu dois aussi relié la clé primaire de t_produit (prod_id) au prod_id de la table tj_prod_cmd.

    Ceci est fait dans le bout de code après le WHERE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE P.PROD_ID = J.PROD_ID AND C.CMD_ID = J.CMD_ID;
    J'espère que je t'ai éclairer un peu

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2004
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 306
    Par défaut
    Oui très clair mais par contre comment fais-tu des jointures externes avec ta méthode ?

  4. #4
    Xo
    Xo est déconnecté
    Membre Expert
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Par défaut
    Citation Envoyé par etiennegaloup
    par contre comment fais-tu des jointures externes avec ta méthode ?
    La syntaxe d'une jointure externe dasn un WHERE se fait grâce à (+). Cf. un exemple dans lecours de SQLPro ici, qui précise bien entendu de ne pas utiliser cette synatxe quand on peut s'en passer
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  5. #5
    Membre éprouvé
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Par défaut
    Bonjour,
    (+) est 1 syntaxe qui ne marchera qu'avec Oracle.
    Sans utiliser les jointures SQL2 il faudra utiliser UNION et NOTEXISTS ou NOT IN

    [EDIT]
    Citation Envoyé par etiennegaloup
    t_produit p join tj_prod_cmd pc on p.prod_id=pc.prod_id
    tu joins t_produit et tj_prod_cmd
    Citation Envoyé par etiennegaloup
    join t_commande c on pc.cmd_id=c.cmd_id
    et la tu joins t_commande et tj_prod_cmd
    Le résultat sera constitué des éléments qui satisfont aux 2 conditions
    IE : pc.cmd_id = c.cmd_id et à pc.prod_id
    Citation Envoyé par etiennegaloup
    et le deuxième join est relié ainsi à la table obtenu
    C'est l'optimiseur qui à tendance à travailler comme ça pour réduire les volumes traités et donc les temps quand le résultat obtenu est le même. Mais ce n'est pas toi qui décide quel JOIN sera exécuté en 1er.
    Si tu veux joindre 1 table à 1 ensemble de résultat il faut lui dire explicitement dans ta requête
    [/EDIT]

  6. #6
    Membre éclairé
    Inscrit en
    Juillet 2004
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 306
    Par défaut
    Merci pour l'explication.

    C + clair maintenant.

    A +

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

Discussions similaires

  1. Jointure qui ne renvoie pas tous les enregistrements
    Par rayonx dans le forum Langage SQL
    Réponses: 12
    Dernier message: 19/07/2024, 09h33
  2. Sélection multitable (jointure) ?
    Par riamo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/05/2013, 15h58
  3. [MySQL] Jointure multitables SELECT et LIKE
    Par foetus69 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 25/05/2011, 15h25
  4. Requête multitables, quelle jointure ?
    Par mortimer.pw dans le forum SQL
    Réponses: 3
    Dernier message: 15/03/2010, 14h02
  5. Requête avec une jointure multitables
    Par thefleo dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/02/2009, 09h07

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