PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Forums Hébergement > Forum Hébergement serveur > ms.public.fr.sqlserver > Différence entre where et join
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
Différence entre where et join

Réponse
 
LinkBack Outils de la discussion
Vieux 06/12/2007, 11h40   #1
jerome
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Différence entre where et join

Bonjour,

Je me pose une question (pour l'instant) :
Existe t-il une différence de traitement et d'exécution entre un where et un
inner join ?

select * from table1 t1, table2 t2 where t1.id = t2.id
select * from table1 t1 inner join table2 t2 on t1.id = t2.id

Quelle est la différence ?

Merci


  Réponse avec citation
Vieux 06/12/2007, 12h13   #2
Patrice
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Différence entre where et join

La première syntaxe est obsolète depuis pas mal de temps : elle laissait une
possible ambiguïté sur l'ordre d'exécution des critères qui relèvent du
where et ceux qui relèvent du join. En plus une clause join permet de
séparer explicitement ces deux aspects ce qui est plus clair plus les
différentes formes de join offrent plus de possibilités.

La première forme ne devrait plus être utilisée (à vérifier mais je me
demande d'ailleurs si la première forme n'est pas indiquée dans la doc de
SQL Server comme pouvant ne plus être supportée ultérieurement ou peut-être
le *= qui est d'ores et déjà inutilisable, à vérifier mais je crois avoir vu
qq chose comme cela).

--
Patrice


"jerome" <jerome@hh.fr> a écrit dans le message de news:
Os6CDz$NIHA.5524@TK2MSFTNGP05.phx.gbl...
> Bonjour,
>
> Je me pose une question (pour l'instant) :
> Existe t-il une différence de traitement et d'exécution entre un where et
> un
> inner join ?
>
> select * from table1 t1, table2 t2 where t1.id = t2.id
> select * from table1 t1 inner join table2 t2 on t1.id = t2.id
>
> Quelle est la différence ?
>
> Merci
>
>



  Réponse avec citation
Vieux 06/12/2007, 14h11   #3
Fred BROUARD
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Différence entre where et join

Patrice a écrit :
> La première syntaxe est obsolète depuis pas mal de temps : elle laissait une
> possible ambiguïté sur l'ordre d'exécution des critères qui relèvent du
> where et ceux qui relèvent du join. En plus une clause join permet de
> séparer explicitement ces deux aspects ce qui est plus clair plus les
> différentes formes de join offrent plus de possibilités.
>
> La première forme ne devrait plus être utilisée (à vérifier mais je me
> demande d'ailleurs si la première forme n'est pas indiquée dans la doc de
> SQL Server comme pouvant ne plus être supportée ultérieurement ou peut-être
> le *= qui est d'ores et déjà inutilisable, à vérifier mais je crois avoir vu
> qq chose comme cela).



effectivement *= n'est plus supporté à partir de 2005. En fait cette
syntaxe donnait des résultats faux par rapport à la norme SQL et au
principe de jointure externe.

Voici le pourquoi de l'emploi des JOIN que je donne dans mon site SQlpro
(http://sqlpro.developpez.com/cours/s...ointures/#L1.2)

"
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 !
"

A +

>
> --
> Patrice
>
>
> "jerome" <jerome@hh.fr> a écrit dans le message de news:
> Os6CDz$NIHA.5524@TK2MSFTNGP05.phx.gbl...
>> Bonjour,
>>
>> Je me pose une question (pour l'instant) :
>> Existe t-il une différence de traitement et d'exécution entre un where et
>> un
>> inner join ?
>>
>> select * from table1 t1, table2 t2 where t1.id = t2.id
>> select * from table1 t1 inner join table2 t2 on t1.id = t2.id
>>
>> Quelle est la différence ?
>>
>> Merci
>>
>>

>
>



--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************
  Réponse avec citation
Vieux 07/12/2007, 15h44   #4
jerome
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Différence entre where et join

Merci,

Donc la requete TJ1.COL1 = TJ2.COL1 AND TJ1.COL2 = 'taratata' and 1=0
retournerait le meme jeu de résultat avec des OR suivant la méthode
d'évaluation que vous décrivez



"Fred BROUARD" <brouardf@club-internet.fr> wrote in message
news:u9MAwJBOIHA.2208@TK2MSFTNGP06.phx.gbl...
> Patrice a écrit :
> > La première syntaxe est obsolète depuis pas mal de temps : elle laissait

une
> > possible ambiguïté sur l'ordre d'exécution des critères qui relèvent du
> > where et ceux qui relèvent du join. En plus une clause join permet de
> > séparer explicitement ces deux aspects ce qui est plus clair plus les
> > différentes formes de join offrent plus de possibilités.
> >
> > La première forme ne devrait plus être utilisée (à vérifier mais je me
> > demande d'ailleurs si la première forme n'est pas indiquée dans la doc

de
> > SQL Server comme pouvant ne plus être supportée ultérieurement ou

peut-être
> > le *= qui est d'ores et déjà inutilisable, à vérifier mais je crois

avoir vu
> > qq chose comme cela).

>
>
> effectivement *= n'est plus supporté à partir de 2005. En fait cette
> syntaxe donnait des résultats faux par rapport à la norme SQL et au
> principe de jointure externe.
>
> Voici le pourquoi de l'emploi des JOIN que je donne dans mon site SQlpro
> (http://sqlpro.developpez.com/cours/s...ointures/#L1.2)
>
> "
> 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 !
> "
>
> A +
>
> >
> > --
> > Patrice
> >
> >
> > "jerome" <jerome@hh.fr> a écrit dans le message de news:
> > Os6CDz$NIHA.5524@TK2MSFTNGP05.phx.gbl...
> >> Bonjour,
> >>
> >> Je me pose une question (pour l'instant) :
> >> Existe t-il une différence de traitement et d'exécution entre un where

et
> >> un
> >> inner join ?
> >>
> >> select * from table1 t1, table2 t2 where t1.id = t2.id
> >> select * from table1 t1 inner join table2 t2 on t1.id = t2.id
> >>
> >> Quelle est la différence ?
> >>
> >> Merci
> >>
> >>

> >
> >

>
>
> --
> Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
> Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
> Audit, conseil, expertise, formation, modélisation, tuning, optimisation
> *********************** http://www.sqlspot.com *************************



  Réponse avec citation
Vieux 07/12/2007, 16h46   #5
Patrice
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Différence entre where et join

De mon côté, je ne suis pas sûr de comprendre la question. Je laisse Fred
surgir de sa boîte ;-)

De mémoire, le problème était notamment avec les IS NULL. Selon que le IS
NULL était fait avant une jointure ou pas, le résultat pouvait être quelque
peut différent.

Je ne sais pas si il est utile de détailler plus avant, mais à mon avis le
plus simple est de laisser tomber définitivement cette syntaxe,
l'utilisation de la clause JOIN n'ayant que des avantages...

--
Patrice

"jerome" <jerome@hh.fr> a écrit dans le message de news:
eNQgJgOOIHA.4740@TK2MSFTNGP02.phx.gbl...
> Merci,
>
> Donc la requete TJ1.COL1 = TJ2.COL1 AND TJ1.COL2 = 'taratata' and 1=0
> retournerait le meme jeu de résultat avec des OR suivant la méthode
> d'évaluation que vous décrivez
>
>
>
> "Fred BROUARD" <brouardf@club-internet.fr> wrote in message
> news:u9MAwJBOIHA.2208@TK2MSFTNGP06.phx.gbl...
>> Patrice a écrit :
>> > La première syntaxe est obsolète depuis pas mal de temps : elle
>> > laissait

> une
>> > possible ambiguïté sur l'ordre d'exécution des critères qui relèvent du
>> > where et ceux qui relèvent du join. En plus une clause join permet de
>> > séparer explicitement ces deux aspects ce qui est plus clair plus les
>> > différentes formes de join offrent plus de possibilités.
>> >
>> > La première forme ne devrait plus être utilisée (à vérifier mais je me
>> > demande d'ailleurs si la première forme n'est pas indiquée dans la doc

> de
>> > SQL Server comme pouvant ne plus être supportée ultérieurement ou

> peut-être
>> > le *= qui est d'ores et déjà inutilisable, à vérifier mais je crois

> avoir vu
>> > qq chose comme cela).

>>
>>
>> effectivement *= n'est plus supporté à partir de 2005. En fait cette
>> syntaxe donnait des résultats faux par rapport à la norme SQL et au
>> principe de jointure externe.
>>
>> Voici le pourquoi de l'emploi des JOIN que je donne dans mon site SQlpro
>> (http://sqlpro.developpez.com/cours/s...ointures/#L1.2)
>>
>> "
>> 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 !
>> "
>>
>> A +
>>
>> >
>> > --
>> > Patrice
>> >
>> >
>> > "jerome" <jerome@hh.fr> a écrit dans le message de news:
>> > Os6CDz$NIHA.5524@TK2MSFTNGP05.phx.gbl...
>> >> Bonjour,
>> >>
>> >> Je me pose une question (pour l'instant) :
>> >> Existe t-il une différence de traitement et d'exécution entre un where

> et
>> >> un
>> >> inner join ?
>> >>
>> >> select * from table1 t1, table2 t2 where t1.id = t2.id
>> >> select * from table1 t1 inner join table2 t2 on t1.id = t2.id
>> >>
>> >> Quelle est la différence ?
>> >>
>> >> Merci
>> >>
>> >>
>> >
>> >

>>
>>
>> --
>> Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
>> Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
>> Audit, conseil, expertise, formation, modélisation, tuning, optimisation
>> *********************** http://www.sqlspot.com *************************

>
>



  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 01h24.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,20683 seconds with 13 queries