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 :

join = where ?


Sujet :

MS SQL Server

  1. #1
    Membre habitué
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 412
    Points : 149
    Points
    149
    Par défaut join = where ?
    Bonjour,

    est-ce que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select T.A from T, V where T.X = V.X
    est équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select T.A from T join V on T.X = V.X
    ?


    Ou plus compliqué est-ce que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select T.A from T, V where T.X = V.X and T.Y = V.Y
    est équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select T.A from T join V on (T.X = V.X and T.Y = V.Y)
    et à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select T.A from T join V on T.X = V.X where T.Y = V.Y
    ?


    Le mot-clé JOIN ne servirait alors que dans le cas où on veut faire des LEFT/RIGHT JOIN ?

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 917
    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 : 21 917
    Points : 51 693
    Points
    51 693
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT T.A 
    FROM   T, V 
    WHERE  T.X = V.X
     
    =
     
    SELECT T.A 
    FROM   T 
           INNER JOIN V 
                 ON T.X = V.X
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT T.A 
    FROM   T, V 
    WHERE  T.X = V.X 
      AND  T.Y = V.Y
     
    =
     
    SELECT T.A 
    FROM   T 
           INNER JOIN V 
                 ON     T.X = V.X 
                    AND T.Y = V.Y

    La dernière est illogique.

    Lisez pourquoi faire des JOIN et non pas des jointures dans le WHERE :
    http://sqlpro.developpez.com/cours/s...ointures/#L1.2
    Si vous ne faites pas de JOIN, vous avez tout simplement 15 ans de retard !

    A +

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2002
    Messages : 899
    Points : 1 103
    Points
    1 103
    Par défaut
    Oui, c'est bien équivalent, au moins en terme de résultat.
    Par contre, ce n'est pas équivalent en terme de lisibilité:
    Par habitude, on place les jointures en join, et les restrictions en where (en sql server)
    De plus, il me semble que les jointures par join sont optimisées par sql server (il gagne du temps).
    La lisibilité est encore accrue car dans entreprise manager, tu peux coller une requête que tu as fait avec les join, et voir le schéma de la requête directement.

    Pour info, le join n'existait pas dans les anciennes normes sql, et certains langages ne le gerent pas. Les seules jointures possibles sont alors les jointures par where.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2002
    Messages : 899
    Points : 1 103
    Points
    1 103
    Par défaut
    Oups, grillé sur le timing...

  5. #5
    Membre habitué
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 412
    Points : 149
    Points
    149
    Par défaut
    Merci beaucoup pour vos éclaircissements.

  6. #6
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    Citation Envoyé par Peanut Voir le message
    Merci beaucoup pour vos éclaircissements.
    et beh penser au fameux tag

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

Discussions similaires

  1. SELECT, JOINS, WHERE
    Par Girzi dans le forum Requêtes
    Réponses: 10
    Dernier message: 07/01/2009, 16h43
  2. DELETE JOIN WHERE
    Par SpaceFrog dans le forum Requêtes
    Réponses: 7
    Dernier message: 28/03/2008, 15h29
  3. Probleme de SQL INNER JOIN WHERE
    Par korben06 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 05/06/2007, 18h18
  4. [Performances] Ordre d'éxecution de JOIN / WHERE
    Par brice01 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/02/2006, 21h40
  5. INNER JOIN ou WHERE ...
    Par maitrebn dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/10/2004, 13h14

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