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 :

left join vs inner join


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 4
    Points : 5
    Points
    5
    Par défaut left join vs inner join
    Bonjour,

    Toujours dans le cadre de mon autoformation à sql, je me pose une nouvelle question.

    J'ai lu par ici et là qu'il était (souvent) préférable d'utiliser un inner join plutôt qu'un left join.

    Peut-être ... mais j'aimerai comprendre pourquoi. D'après ce que j'ai lu, left join "impose" le parcours initial sur la table gauche alors que l'inner join choisi la table la plus petite.

    Sûrement ... mais qu'entend t-on par la table plus petite ??? NB de rows total, nb de rows après clause where, taille de la table, .... ?

    Dans mon cas d'emploi, j'ai

    - une table Rencontre qui pointe vers une table inscription (1 rencontre => 1 à n inscription)
    - La table Rencontre comporte beaucoup de colonnes
    - La table Inscription ne comporte que 4 colonnes (Son Id, l'Id de la rencontre, la date de la rencontre, et l'id de l'utilisateur inscrit.

    J'aurai donc quand même choisi un left join en partant sur la table Inscription pour limiter au max les accès

    Ais-je raison ?

    Autre question sur un autre sujet :

    Certains se poseraient sûrement pourquoi j'ai dupliqué ma colonne "Date de Rencontre" dans ma table Inscription alors qu'elle ne devrait logiquement n'être QUE dans la table Rencontre.

    Je réponds (Mais est-ce une connerie ?) que sur la logique métier, bon nombre de filtres (mais pas tous) sont liés à la date de la rencontre ET l'inscription. Afin d'optimiser les accès disques lors des requêtes, je me suis dit que c'était peut être intéressant même si conceptuellement c'est débile.

    Si c'est réellement débile, comment vous, les experts, vous optimiseriez ce cas ?

    Merci d'avance pour votre retour.

    Soyez indulgents... je débute


    ==== EDIT ====

    Faudrait-il modifier la structure pour faire une table RencontreDate (Id et Date de rencontre) et placer les reste des colonnes dans Rencontre

    RencontreDate => [1,1] Rencontre
    RencontreDate => [1,n] inscriptions

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Bonjour lpupi,

    Citation Envoyé par lpupi Voir le message
    J'ai lu par ici et là qu'il était (souvent) préférable d'utiliser un inner join plutôt qu'un left join.
    Non : le choix du type de jointure dépend du besoin fonctionnel. Le résultat n'est pas du tout le même.
    Ce qui est vrai, c'est que mécaniquement, l'effectif construit par une jointure OUTER est plus important que celui d'une jointure INNER, ce n'est pas une raison pour choisir le type de jointure sur ce critère !
    On choisit une jointure externe (OUTER JOIN) quand on veut tous les éléments de la table INNERet facultativement si présents, les éléments de la table OUTER.
    On choisit une jointure interne (INNER JOIN) quand on ne veut les éléments de chaque table que si les colonnes de jointure sont trouvées dans les deux tables jointes.


    Citation Envoyé par lpupi Voir le message
    Autre question sur un autre sujet :

    Certains se poseraient sûrement pourquoi j'ai dupliqué ma colonne "Date de Rencontre" dans ma table Inscription alors qu'elle ne devrait logiquement n'être QUE dans la table Rencontre.

    Je réponds (Mais est-ce une connerie ?) que sur la logique métier, bon nombre de filtres (mais pas tous) sont liés à la date de la rencontre ET l'inscription. Afin d'optimiser les accès disques lors des requêtes, je me suis dit que c'était peut être intéressant même si conceptuellement c'est débile.
    Mauvais choix : toute redondance est une source d'erreur potentielle, sans compter que vous encombrez inutilement l'espace disque.
    Sans compter que lors de l'insertion d'un nouvelle inscription pour une rencontre existante, vous êtes du coup contraint de faire une jointure avec la table rencontre pour récupérer la date, du coup vous ajoutez une jointure inutile.

Discussions similaires

  1. INNER et LEFT JOIN
    Par Beaudelicius dans le forum Langage SQL
    Réponses: 5
    Dernier message: 07/11/2011, 14h47
  2. Left join qui se conduit comme un inner join
    Par francois134 dans le forum Requêtes
    Réponses: 5
    Dernier message: 19/04/2009, 17h03
  3. INNER JOIN, LEFT JOIN
    Par Mitaka dans le forum Requêtes
    Réponses: 27
    Dernier message: 24/03/2009, 16h52
  4. left join , right join et inner join ?
    Par amine003 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/12/2008, 17h25
  5. Jointures INNER JOIN LEFT JOIN
    Par tizla dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 31/05/2007, 12h12

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