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 :

Question SQL Jointure - Produit cartésien ?


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 20
    Points : 14
    Points
    14
    Par défaut Question SQL Jointure - Produit cartésien ?
    Bonjour,

    J'ai une petite question sur sql, il me vous paraître simple. Mais j'aurais besoin de votre avis. MERCI D'AVANCE.

    Voici un requête :

    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
    SELECT 
    commande.NumeroDeCommande
              categorie.categorie
              livraison.Destination 
              livraison.Expediteur,
              Cout.Montant,
              ...
    FROM
    commande,
            categorie,
            livraison,  
            Cout
    WHERE
    commande.NumeroDeCommande=livraison.NumeroDeCommande
    and Cout.NumeroLivraison=livraison.NumeroLivraison


    Donc comme vous le constater il n'y a pas de jointure avec la table catégorie.
    Cette table contient 2 colonnes : Ordre, Catégorie.


    Comment fonctionne la requête ? Comment fonctionne le produit cartésien ?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 243
    Points : 12 874
    Points
    12 874
    Par défaut
    Bonjour,
    Imaginons que la requête sans la table categorie renvoie 2000 lignes, et que la table categorie contienne 500 lignes.
    Le produit cartesien des deux table va contenir toute les combinaisons possible des deux tables, soit 2000 * 500 = 1000000 de lignes.

    Le nombre colonnes dans les tables ne joue pas ici, seule compte le nombre de lignes.

    Tatayo.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    Merci pour votre réponse.
    Mais dans ce cas le produit cartésien s'effectue entre quelle table et quelle table ?

    Merci.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 243
    Points : 12 874
    Points
    12 874
    Par défaut
    Dans la requête donnée en exemple, il se fait entre la table categorie et la "table résultat", construite par le moteur sur le reste de la requête.
    Pour faire simple, il faut imaginer cette vue:
    Code SQL : 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
     
    create view V1 as 
    SELECT 
    commande.NumeroDeCommande
    categorie.categorie
    livraison.Destination 
    livraison.Expediteur,
    Cout.Montant,
    ...
    FROM
    commande,
    livraison, 
    Cout
    WHERE
    commande.NumeroDeCommande=livraison.NumeroDeCommande
    and Cout.NumeroLivraison=livraison.NumeroLivraison
    Ta requête equivaut à celle-ci (sauf pour les colonnes, bien sur):
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select *
    from V1
    cross join categorie

    Tatayo.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    merci !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/04/2012, 10h06
  2. Supprimer le produit cartésien d'une jointure
    Par David55 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 13/08/2010, 09h52
  3. Produit cartésien au lieu d'une jointure
    Par Smix007 dans le forum Débuter
    Réponses: 1
    Dernier message: 17/04/2008, 14h50
  4. select sur plusieurs table, question sur jointure
    Par Schulman dans le forum Langage SQL
    Réponses: 7
    Dernier message: 03/09/2004, 13h54
  5. [sql] [jointure] champs = substring(champs,1,5)
    Par DaxTaz dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/05/2004, 12h45

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