OVH Cloud OVH Cloud

Syntaxe SQL

5 réponses
Avatar
Borroch
Bonjour à tous

Cela fait des années que j'utilise le langage SQL sous Access et SQL_Server
et dernièrement Oracle 9.
Pour faire des jointures, j'utilise les INNER JOIN, LEFT JOIN ou RIGHT JOIN.

Une nouvelle collègue n'utilise pas ce système, mais fait les jointures dans
la clause WHERE en utilisant des =, *= ou =*. Je ne connaissais pas cette
syntaxe.

Les 2 méthodes sont elle équivalentes ?
Si non, laquelle est préférable ?

Merci

5 réponses

Avatar
Vuillermet Jacques
Les jointures dans les clauses WHERE ont été rendues obsolètes en 1992 par
la norme SQL2.

Microsoft demande depuis longtemps à ces utilisateurs de ne plus utiliser
cette technique, indiquant parfois que les requêtes ainsi rédigées ne sont
pas censées être optimisées ni mêmes utilisables dans les prochaines
versions.

Dans SQL Server 2005, la demande est encore réitérée mais la syntaxe encore
maintenue... car des utilisateurs continuent à l'employer... et des
écoles/facs continuent à l'enseigner.

Cette technique présente des cas où des ambiguités peuvent apparaître, d'où
des erreurs.
A mon goût, elle génère des requêtes plus difficilement compréhensibles
qu'avec la syntaxe SQL2.

Voir :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/acdata/ac_8
_qd_06_3vsm.asp

Jacques.


"Borroch" a écrit dans le message de news:
42df65e8$0$22275$
Bonjour à tous

Cela fait des années que j'utilise le langage SQL sous Access et


SQL_Server
et dernièrement Oracle 9.
Pour faire des jointures, j'utilise les INNER JOIN, LEFT JOIN ou RIGHT


JOIN.

Une nouvelle collègue n'utilise pas ce système, mais fait les jointures


dans
la clause WHERE en utilisant des =, *= ou =*. Je ne connaissais pas cette
syntaxe.

Les 2 méthodes sont elle équivalentes ?
Si non, laquelle est préférable ?

Merci




Avatar
Ph. B.
> Bonjour à tous



Bonjour,

Cela fait des années que j'utilise le langage SQL sous Access et SQL_Server
et dernièrement Oracle 9.
Pour faire des jointures, j'utilise les INNER JOIN, LEFT JOIN ou RIGHT JOIN.



C'est bien ! ;-)
Tu utilises les opératuers de la norme SQL2.

Une nouvelle collègue n'utilise pas ce système, mais fait les jointures dans
la clause WHERE en utilisant des =, *= ou =*. Je ne connaissais pas cette
syntaxe.



Ne vient-elle pas d'un monde où une ancienne version d'Oracle est utilisée
(antérieure à la 9 si mes souvernirs sont bons) ?

Les 2 méthodes sont elle équivalentes ?



Tout dépend du parseur SQL et de son niveau de tolérance par rapport à la norme.
A cela vient s'ajouter des pbs d'optimisation (sera ce optimisé avec l'ancienne
syntaxe ?)...

Si non, laquelle est préférable ?



Ben naturellement, celle de la norme, donc celle que tu uilises... :-)
De plus, elle permet de dissocier les conditions de jointure des éventuels
critères de filtre et AMHA, amène plus de clarté dans la requête...

Merci



Pour plus de détails, on peut aussi regarder ici:
http://sqlpro.developpez.com/cours/sqlaz/jointures/

--
Philippe.
Avatar
lionelp
Bonjour,

*= et =* correspondent aux jointures externes, cette syntaxe est
déconseillée et ne fonctionne pas dans SQL Server 2005 par défaut (mode
compatibilité 90).
Dans Oracle la syntaxe était += et =+ si ma méoire est bonne.

Cordialement,
LionelP

"Ph. B." wrote in message
news:42df71b0$0$7811$
> Bonjour à tous

Bonjour,

> Cela fait des années que j'utilise le langage SQL sous Access et


SQL_Server
> et dernièrement Oracle 9.
> Pour faire des jointures, j'utilise les INNER JOIN, LEFT JOIN ou RIGHT


JOIN.

C'est bien ! ;-)
Tu utilises les opératuers de la norme SQL2.

> Une nouvelle collègue n'utilise pas ce système, mais fait les jointures


dans
> la clause WHERE en utilisant des =, *= ou =*. Je ne connaissais pas


cette
> syntaxe.

Ne vient-elle pas d'un monde où une ancienne version d'Oracle est utilisée
(antérieure à la 9 si mes souvernirs sont bons) ?

> Les 2 méthodes sont elle équivalentes ?

Tout dépend du parseur SQL et de son niveau de tolérance par rapport à la


norme.
A cela vient s'ajouter des pbs d'optimisation (sera ce optimisé avec


l'ancienne
syntaxe ?)...

> Si non, laquelle est préférable ?

Ben naturellement, celle de la norme, donc celle que tu uilises... :-)
De plus, elle permet de dissocier les conditions de jointure des éventuels
critères de filtre et AMHA, amène plus de clarté dans la requête...

> Merci

Pour plus de détails, on peut aussi regarder ici:
http://sqlpro.developpez.com/cours/sqlaz/jointures/

--
Philippe.


Avatar
Fred BROUARD
Bonjour

1) les syntaxes des jointures externes normalisées avec LEFT, ROGHT et FULL
OUTER JOIN datent de ... 1992 ! Il serait temps de s'y mettre... Ta collègue à
près de 15 ans de retard...

2) l'optimisation des plan de calcul de requête est plus sophistiquées et plus
rapide si les jointure normatives sont utilisées.

3) la syntaxe *=, =* et *=* est non seulement propriétaire donc impossible de
porter ses requêtes sous un autre serveur (Oracle, IBM DB2, PostGreSQL, Access,
MySQL...), mais limitée (on ne peut pas faire des cascades de jointures externes
avec ce bidule).

4) les jointures externes avec l'ancienne syntaxe propre à MS SQL Server donne
des résultats faux eût égard à la norme SQL. (ce que l'aide en ligne apelle
pudiquement "Dans certains cas, cette syntaxe provoque une requête ambiguë qui
peut être interprétée de différentes manières" [...])

5) dans l'aide en ligne MS SQL Server 200, on trouve la phrase suivante :
"[...]Cette syntaxe risque de ne plus être prise en charge dans les futures
versions de SQL Server. Toute instruction utilisant les jointures externes
Transact-SQL doivent être modifiées afin d'utiliser la syntaxe SQL-92"

6) MS SQL Server 2005 n'accepte plus nativement les jointures externes. Le
message d'erreur est alors le suivant :
"
Msg 4147, Level 15, State 1, Line 3
The query uses non-ANSI outer join operators ("*=" or "=*"). To run this query
without modification, please set the compatibility level for current database to
80 or lower, using stored procedure sp_dbcmptlevel. It is strongly recommended
to rewrite the query using ANSI outer join operators (LEFT OUTER JOIN, RIGHT
OUTER JOIN). In the future versions of SQL Server, non-ANSI join operators will
not be supported even in backward-compatibility modes.
"

Moralité : jette ta consoeur aux orties, ou invite-là à suivre un formation de
recyclage...
Mon site, comme mes bouquins, peuvent l'y aider !!!!

A +

--
Fred. BROUARD, MVP SQL Server. Expert SQL, spécialiste SGBD et modèles
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************


Borroch a écrit:
Bonjour à tous

Cela fait des années que j'utilise le langage SQL sous Access et SQL_Server
et dernièrement Oracle 9.
Pour faire des jointures, j'utilise les INNER JOIN, LEFT JOIN ou RIGHT JOIN.

Une nouvelle collègue n'utilise pas ce système, mais fait les jointures dans
la clause WHERE en utilisant des =, *= ou =*. Je ne connaissais pas cette
syntaxe.

Les 2 méthodes sont elle équivalentes ?
Si non, laquelle est préférable ?

Merci




Avatar
Fred BROUARD
rectif :

Dans Oracle la syntaxe était (+)= et =(+) si ma méoire est bonne.

A +

lionelp a écrit:
Bonjour,

*= et =* correspondent aux jointures externes, cette syntaxe est
déconseillée et ne fonctionne pas dans SQL Server 2005 par défaut (mode
compatibilité 90).
Dans Oracle la syntaxe était += et =+ si ma méoire est bonne.

Cordialement,
LionelP

"Ph. B." wrote in message
news:42df71b0$0$7811$

Bonjour à tous



Bonjour,


Cela fait des années que j'utilise le langage SQL sous Access et





SQL_Server

et dernièrement Oracle 9.
Pour faire des jointures, j'utilise les INNER JOIN, LEFT JOIN ou RIGHT





JOIN.

C'est bien ! ;-)
Tu utilises les opératuers de la norme SQL2.


Une nouvelle collègue n'utilise pas ce système, mais fait les jointures





dans

la clause WHERE en utilisant des =, *= ou =*. Je ne connaissais pas





cette

syntaxe.



Ne vient-elle pas d'un monde où une ancienne version d'Oracle est utilisée
(antérieure à la 9 si mes souvernirs sont bons) ?


Les 2 méthodes sont elle équivalentes ?



Tout dépend du parseur SQL et de son niveau de tolérance par rapport à la



norme.

A cela vient s'ajouter des pbs d'optimisation (sera ce optimisé avec



l'ancienne

syntaxe ?)...


Si non, laquelle est préférable ?



Ben naturellement, celle de la norme, donc celle que tu uilises... :-)
De plus, elle permet de dissocier les conditions de jointure des éventuels
critères de filtre et AMHA, amène plus de clarté dans la requête...


Merci



Pour plus de détails, on peut aussi regarder ici:
http://sqlpro.developpez.com/cours/sqlaz/jointures/

--
Philippe.








--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************