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

MS SQL Server Discussion :

INNER JOIN ... ON ... ou jointure dans clause where


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 58
    Points : 46
    Points
    46
    Par défaut INNER JOIN ... ON ... ou jointure dans clause where
    Bonjour à tous,
    voila je me pose une petite question.
    Pourquoi tant de monde utilise les INNER JOIN ... ON ... plustot que les jointure dans les clause where.
    D'apres ce que j'ai lu, la performance de la requete n'est pas affecter par le choix d'un des 2 types de jointures. En plus, je trouve les INNER JOIN ... ON ... vraiment illisible voir carrement indigeste par rapport aux jointures "normales" dans les clause where.

    quelqu'un pourrai m'indiquer la diiférence entre les 2 manières ?

  2. #2
    Membre chevronné Avatar de Oluha
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 183
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 183
    Points : 1 967
    Points
    1 967
    Par défaut
    En plus, je trouve les INNER JOIN ... ON ... vraiment illisible voir carrement indigeste par rapport aux jointures "normales" dans les clause where
    c'est tout le contraire. Quand tu mets tout dans la clause where, tu mélanges jointure et condition, bonjour le bordel pour t'y retrouver sur une grosse requête

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    De plus lorsque tu dois passer à une jointure externe, il n'y a pas grand chose qui change, tandis que si tu fais ta jointure dans le where il faut tout casser, et apprendre les inner join, left join.

  4. #4
    Membre actif
    Avatar de Eric.H
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 220
    Points : 286
    Points
    286
    Par défaut
    Citation Envoyé par Oluha
    En plus, je trouve les INNER JOIN ... ON ... vraiment illisible voir carrement indigeste par rapport aux jointures "normales" dans les clause where
    c'est tout le contraire. Quand tu mets tout dans la clause where, tu mélanges jointure et condition, bonjour le bordel pour t'y retrouver sur une grosse requête
    Je pense pareil

    Dans les where : c'est les criteres de selections des enregistrement que l'on veut

    Dans les joins : c'est les liaison entre tables

    c'est plus clair de séparer les deux

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 58
    Points : 46
    Points
    46
    Par défaut
    Oluha > peut etre alors ! je dirai que c'est une question d'habitude. Perso je trouve dans les clause where mille fois plus facile a comprendre/lire ainsi qu'a maintenir. Question de gout je dirai donc. En plus pour la clarter je fais les jointure d'une par puis ensuite les conditions, donc se qui fait que les deux sont quand meme bien séparés

    soazig > n'importe quoi ce que tu ecris, c'est le meme principe pour les jointure externe sauf qu'il y a encore moins a ecrire dans les clauses where (*= ou =*). Il y a pas de petites economies

  6. #6
    Membre chevronné Avatar de Oluha
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 183
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 183
    Points : 1 967
    Points
    1 967
    Par défaut
    Voilà un article qui devrait t'apporter des réponses :

    UN CONSEIL IMPORTANT

    Dans la mesure du possible, utilisez toujours un opérateur de jointure normalisé Sql2 (mot clef JOIN).

    En effet :


    Les jointures faites dans la clause WHERE (ancienne syntaxe de 1986 !) ne permettent pas de faire la distinction de prime abord entre ce qui relève du filtrage et ce qui relève de la jointure.
    Il est à priori absurde de vouloir filtrer dans le WHERE (ce qui restreint les données du résultat) et de voiloir "élargir" ce résultat par une jointure dans la même clause WHERE de filtrage.
    La lisibilité des requêtes est plus grande en utilisant la syntaxe à base de JOIN, en isolant ce qui est du filtrage et de la jointure, mais aussi en isolant avec clarté chaque condition de jointures entre chaque couples de table.
    L'optimisation d'exécution de la requête est souvent plus pointue du fait de l'utilisation du JOIN.
    Lorsque l'on utilise l'ancienne syntaxe et que l'on supprime la clause WHERE a des fins de tests, le moteur SQL réalise le produit cartésiens des tables ce qui revient la plupart du temps à mettre à genoux le serveur !
    http://sqlpro.developpez.com/cours/s...ointures/#L1.2

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 58
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par Oluha
    Voilà un article qui devrait t'apporter des réponses :

    UN CONSEIL IMPORTANT

    Dans la mesure du possible, utilisez toujours un opérateur de jointure normalisé Sql2 (mot clef JOIN).

    En effet :


    Les jointures faites dans la clause WHERE (ancienne syntaxe de 1986 !) ne permettent pas de faire la distinction de prime abord entre ce qui relève du filtrage et ce qui relève de la jointure.
    Il est à priori absurde de vouloir filtrer dans le WHERE (ce qui restreint les données du résultat) et de voiloir "élargir" ce résultat par une jointure dans la même clause WHERE de filtrage.
    La lisibilité des requêtes est plus grande en utilisant la syntaxe à base de JOIN, en isolant ce qui est du filtrage et de la jointure, mais aussi en isolant avec clarté chaque condition de jointures entre chaque couples de table.
    L'optimisation d'exécution de la requête est souvent plus pointue du fait de l'utilisation du JOIN.
    Lorsque l'on utilise l'ancienne syntaxe et que l'on supprime la clause WHERE a des fins de tests, le moteur SQL réalise le produit cartésiens des tables ce qui revient la plupart du temps à mettre à genoux le serveur !
    http://sqlpro.developpez.com/cours/s...ointures/#L1.2


    j'aime bien les "peu etre "

    non en fait je pense pas que ca dégrade les performances ni meme d'ailleur que ca les ameliores. Tant que l'on sait comment classer les conditions dans le where.
    Qu'en a la meilleurs lecture des requetes ben je passe plus de temps à les comprendres avec les inner....join que dans la clause where. Je suis peu etre le seul dans ce cas
    J'aime bien que dans le from il apparai que les tables utilisés ca permet deja de bien comprendre la requete. En plus l'ordre dans le from lui est important et joue sur la performence de la requete.
    enfin voila merci de vos precisions

  8. #8
    Membre chevronné Avatar de Oluha
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 183
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 183
    Points : 1 967
    Points
    1 967
    Par défaut
    en fait je me demande pourquoi tu as posé la question puisque ca semblait déjà fixé dans ton idée

    Ce qui prime avant tout c'est la normalisation à mon avis, d'autant plus quand quelqu'un doit reprendre le code par la suite (ce qu'on imagine par forcemment quand on code)

    Je pense que s'il a été crée une nouvelle norme pour les jointures depuis 1986, c'est qu'il y a bien une bonne raison à cela

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 58
    Points : 46
    Points
    46
    Par défaut
    le truc que je voulias savoir c'est pourquoi on conseille d'ecrire comme ca alors que pour moi c'est moins lisible et qu'on y gagne rien niveau pref ou autre.

    La j'ai compris ben qu'en fait que ca sert a rien mise à part que d'autre que moi le trouve plus lisible. Je croyais que pour les autres aussi c'etait plus dure à lire le sql présenter comme ca, je me suis tromper en meme temps mon echantillon de personne est un peu trop petit vu que j'avais juste mon opignon

  10. #10
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    Mon premier contact avec ce style de jointure c'est avec Access que je l'ai eu, or pour être-utilisable avec les assistants de requête, le SQL généré est particulièrement lourd et indigeste.

    Mais quand c'est bien présenté et indenté c'est tout à fait lisible et puissant. Il a comme avantage de bien séparer les jointures des clauses de restriction.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 58
    Points : 46
    Points
    46
    Par défaut
    heu peux tu preciser de quel type de jointure tu parles

  12. #12
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    ...je parlais des jointures ANSI SQL 92, c'est-à-dire INNER JOIN.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 58
    Points : 46
    Points
    46
    Par défaut
    ok merci ;-)

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

Discussions similaires

  1. [AC-2007] Equivalent Left Join dans Clause Where
    Par kornetmuse dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 07/03/2013, 16h31
  2. [t-sql] instruction CASE dans clause WHERE
    Par ignitionflip dans le forum Langage SQL
    Réponses: 4
    Dernier message: 22/01/2007, 18h07
  3. Réponses: 8
    Dernier message: 16/11/2006, 13h31
  4. Select dans clause Where
    Par Bisûnûrs dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/08/2006, 11h50
  5. [PL/SQL Oracle] Syntaxe dans clause where
    Par Misdrhaal dans le forum Oracle
    Réponses: 2
    Dernier message: 01/03/2006, 13h33

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