[Troll] Join SQL traditionnel ou ANSI ?

Join SQL traditionnel ou ANSI ? [Troll] - SQL/NoSQL - Programmation

Marsh Posté le 21-04-2009 à 23:59:06    

Le grand débat du jour au taf: qu'est qui est bien et qu'est ce qui est mal entre:

Code :
  1. select *
  2. from x inner join y on x.id = y.id


et

Code :
  1. select * from x,y
  2. where x.id = y.id


 
et surtout pourquoi :o
 
A titre perso je pense que le 1 est nettement mieux parce que:
- ça clarifie la notion de join: le where est uniquement pour mes filtres, pas pour les conneries de join
- si le mot join est là ya une raison. c'est comme remplacer le for du C par while + if/then. ça marche pareil, mais pourquoi ne pas utiliser mlot-clef fait pour ?
 
On m'a objecté:
- c'est plus compact
- (un peu de mauvaise foi assumée je pense) la méthode 1 est celle de ceux qui font des left join à tort et à travers sans rien comprendre, la 2 est donc la méthode des "vrais"
 
Voilà, vous faites quoi, vous ?


---------------
« Le verbe "aimer" est le plus compliqué de la langue. Son passé n'est jamais simple, son présent n'est qu'imparfait et son futur toujours conditionnel. » Jean Cocteau
Reply

Marsh Posté le 21-04-2009 à 23:59:06   

Reply

Marsh Posté le 22-04-2009 à 00:20:37    

Je préfère la deuxième solution, parce que je la trouve beaucoup plus lisible et compréhensible, surtout quand les jointures sont plus compliqué que dans le cas ultra simple qui est présenté ici. L'un des avantages parmi d'autres est de trouver tout de suite les tables concernées derière le mot From, au lieu de chercher les noms des tables éparpillés au milieu de plein de blabla. Mais il y a beaucoup de programmeurs qui aiment le blabla. Ce n'est pas mon cas. La deuxième forme est directe, simple, lisible. Elle me convient mille fois mieux que la première.

Reply

Marsh Posté le 22-04-2009 à 10:35:59    

j'avais commencé par la méthode 2, et des gens m'avaient expliqué que c'était super le (+) d'oracle tout ca, mais depuis 1 an je suis complètement passé en ansi.
Personnellement je trouve la déclaration avec join beaucoup plus lisible, dès qu'on croise une dizaine de table et qu'on ajoute des filtres cela devient le bordel complet en mettant tout dans le where, et je dois être débile mais je mets 5x plus de temps a comprendre une requête ou tout se trouve dans le where.
 
L'histoire du compact on s'en fout, on est pas payés au caractère en moins, ce qu'on veut c'est un code lisible que l'on puisse maintenir.
 
Pour le coup du left join c'est débile aussi, on fait un left join si on en a besoin et c'est très souvent utile, et oracle permet d'en faire dans les deux modes d'écriture, d'autre part si l'on doit parler de join foireux, c'est très facile de faire un cross join parce qu'on a oublié de lier deux tables dans le where dans une requête complexe, alors que avec la méthode ansi on aura une syntax erroret l'idée me plait bien.

Reply

Marsh Posté le 22-04-2009 à 10:51:05    

Les slides Join-Fu expliquent ça très bien dans la partie "ANSI vs. Theta SQL coding style".

Reply

Marsh Posté le 22-04-2009 à 18:39:13    

Intéressantes ces slides :jap:


---------------
« Le verbe "aimer" est le plus compliqué de la langue. Son passé n'est jamais simple, son présent n'est qu'imparfait et son futur toujours conditionnel. » Jean Cocteau
Reply

Marsh Posté le 23-04-2009 à 11:07:50    

Sans être DBA, j'ai une préférence pour la méthode 1 (ANSI) ...

Reply

Marsh Posté le 24-04-2009 à 12:37:34    

Ni bien, ni mal, c'est pareil, juste une question de lisibilité de la requête. De toute manière le planificateur va la reformuler à sa sauce et le résultat sera le même niveau performance.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed