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 :

Jointures INNER et jointures classiques ???


Sujet :

Langage SQL

  1. #1
    Membre confirmé
    Inscrit en
    Août 2002
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 37
    Par défaut [Résolu] Jointures INNER et jointures classiques ???
    Bonjour,

    Je vois souvent dans ce forum des requetes avec des INNER JOIN ou LEFT JOIN ou ce genre de truc . Etant complètement immergé dans le monde Oracle (ou je n'ai jamais vu une chose pareil pour l'instant mais plutot des jointures du type table1.champA=table2.champB et aucune de mes docs n'en parle) je me posais les questions suivantes :
    - Est-ce que ces expressions sont normalisés SQL2 ou 3 ? Peuvent elles alors fonctionner sous différends sgbd sans retoucher le code ? Si non quels sont les sgbd qui utilisent ce type de synthaxe ?
    - Quel est l'avantage, s'il y-en a un, d'utiliser ce type d'expression ? Le moteur sql traite il alors la requête différemment ? Les performances s'en ressentent elles ?

    Merci d'éclairer ma curiosité

  2. #2
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    Ben, à ce que j'ai compris, il s'agit d'une norme SQL2. (SQLPro me reprendra si je dis des bétises... )

    L'avantage étant d'éviter le produit cartésien..
    Ainsi un requete comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select T1.* from T1 INNER JOIN T2 ON T1.ID=T2.ID
    parce que là, on fait un travail uniquement sur les éléments joint
    est plus performante qu'une requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT T1.* FROM T1, T2 WHERE T1.ID=T2.ID
    qui fait un produit cartésien avant de ne garder que les lignes dont les élément joints sont communs.

    C'est ce que j'ai compris

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    La clause JOIN est en effet un élément normatif depuis SQL 2 (1992) !

    Certains SGBDR vieillots comme Oracle ou SQL Server, avait implanté une syntaxe différente avant que cette norme soit effective. Oracle à pris beaucoup de retard sur le sujet...

    Les avantages de ce type de jointure sont incommensurables !
    Certaines jointures normalisées ne peuvent être effectué par les anciennes syntaxes. Il en est ainsi du NATURAL JOIN et des non équi jointures externe.

    De plus cette syntaxe est bien plus claire puisqu'elle distingue ce qui est de la jointure et ce qui relève du filtre.

    Enfin elle est plus optimisée que l'ancienne syntaxe du fait que l'optimiseur s'attende à trouver dans les clauses ON des jointures des colonnes indexées alors que ce n'est pas systématiquement le cas dans le filtre WHERE.

    A lire sur le sujet :
    http://sqlpro.developpez.com/SQL_AZ_3.html#JOIN_syntaxe

    etrait :
    "UN CONSEIL IMPORTANT

    Dans la mesure du possible, utilisez toujours un opérateur de jointure normalisé (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 !
    "

    A +

    Frédéric BROUARD, expert SQL / bases de données
    Livre 'SQL' la référence - Campus Press éditeur
    * http://sqlpro.developpez.com/bookSQL.html *
    site web 'SQLpro' http://sqlpro.developpez.com/
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre confirmé
    Inscrit en
    Août 2002
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 37
    Par défaut
    Merci à tous les 2

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

Discussions similaires

  1. logique de jointure Inner vs left outer.
    Par grabriel dans le forum Langage SQL
    Réponses: 8
    Dernier message: 04/08/2008, 17h47
  2. Réponses: 3
    Dernier message: 10/06/2008, 11h50
  3. Réponses: 5
    Dernier message: 19/09/2007, 14h23
  4. Jointures INNER JOIN LEFT JOIN
    Par tizla dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 31/05/2007, 12h12
  5. Jointures : INNER JOIN vs WHERE
    Par vic dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/02/2006, 11h05

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